Задать вопрос
  • Почему условие работает не правильно?

    @kalapanga
    = это оператор присваивания, а оператор проверки на равенство ==
    Ответ написан
    2 комментария
  • Как в структуре обьявить ссылку на структуру в С arduino?

    RiseOfDeath
    @RiseOfDeath
    Диванный эксперт.
    Так у вас в структуре две переменные с одинаковым именем, на что компилятор и ругается.
    bool submenu;  
    struct menu *submenu;
    Ответ написан
    1 комментарий
  • Указатели в языке Си?

    CityCat4
    @CityCat4 Куратор тега C
    Дома с переломом ноги
    Вмешалась ОС? Но если так, то почему?

    Потому что классическая ошибка - использование неинициализированного указателя. Ты обьявил a указателем на целое, но не присвоил ему никакого значения (через malloc(), calloc() или функции, возвращающие указатель). Обьявленная переменная была выделена в куче и получила какое-то мусорное значение, доступное твоей программе (вполне может быть указатель на часть кода, например, на ядро, на общие функции). Ты его прочитал.
    При попытке записать по данному адресу поймал SIGSEGV, потому что данный адрес твоей программе по записи недоступен. Все, как должно быть.
    могу ли я указателю дать ссылку на конкретную ячейку в памяти?

    Теоретически можешь, но практически ось тебе сразу выдаст SIGSEGV, потому что писать ты можешь только в те области памяти, которые тебе доступны по записи.
    warning: initialization of 'int *' from 'int' makes pointer from integer without a cast

    Ну правильно говорит - инициализация делается без приведения типа. Такой финт ушами часто делают со строками - по умолчанию выставляя там указатель на NULL (что обычно означает, что строке еще не выделялась память), напрмер
    char *str = (char *) NULL;
    Ответ написан
    Комментировать
  • Указатели в языке Си?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    почему программа завершилась? Вмешалась ОС? Но если так, то почему?

    Потому что у тебя был неинициализированный указатель, который по стечению обстоятельств указывал в область памяти которую можно читать (мы это знаем, поскольку ты смог оттуда прочитать значение) но нельзя изменять (поскольку ну ты понял).

    Почему я не могу поменять значение самого указателя (ведь указатель - это всего лишь ссылка на адрес памяти, а не на значение).

    Значение указателя ты поменять можешь, но это не то, что было написано в коде. В коде было написано поменять значение на которое указатель указывает. Поменять указатель было бы a = (int *)10;

    могу ли я указателю дать ссылку на конкретную ячейку в памяти?

    Можешь, но под ОС с виртуальной памятью это в большинстве случаев не имеет смысла. API в таких ОС обычно устроены так, что ты просишь выделить область памяти с заданными характеристиками, а ОС выполняет выделение и возвращает тебе адрес выделенного участка.

    получаю ошибку, ведь вряд ли адрес памяти у указателя хранится в виде 16-ричного целочисленного литерала.

    В памяти всё хранится как последовательность байтов. Любую последовательность байтов можно проинтерпретировать как указатель. Но чтобы компилятор С понял что ты имеешь в виду, ему надо явно сказать, что ты хочешь проинтерпретировать целое число как адрес: int *a = (int *)0x0061FF18;
    Ответ написан
    Комментировать
  • Как при http запросе curl не выводить ничего в консоль?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    как выполнить запрос и не выводить ничего в консоль?

    Если результат запроса надо сохранить -- то открыть файл на запись и передать полученный указатель в CURLOPT_WRITEDATA. Если сохранять не надо -- установить функцию, которая будет игнорировать передаваемые ей для записи данные в CURLOPT_WRITEFUNCTION.
    Ответ написан
    Комментировать
  • Как сделать, чтобы при нажатии кнопки выводился текст на дисплей?

    ProgrammerForever
    @ProgrammerForever
    Учитель, автоэлектрик, программист, музыкант
    Откройте пример для работы с дисплеем. Останется только добавить один if для обработки кнопки.
    Ответ написан
    Комментировать
  • Начал изучать Ардуино, столкнулся с проблемой, не понимаю что делать?

    nava2002
    @nava2002
    Инженер
    int GLed = A7; // Не правильно
    int GLed = 7; //Правильно так, тогда во всех командах analogRead ( GLed ); будет читаться аналоговый вход А7

    Если нужно использовать эту ногу как ЦИФРОВУЮ нужно указать:
    int GLed = 90; // Эта нога в Ардуино Мега назначится как цифровой вход/выход D90 (она же А7)
    digitalWrite ( GLed, 1 ); // Будет работать как цифровой ВЫХОД.

    В Ардуине NANO так сделать нельзя. А6 и А7 могут быть только аналоговыми входами. Нужно взять картинку с распиновкой вашей платы и внимательно посмотреть какие есть варианты для назначения ног в платформе Ардуино.
    Можно конечно лезть в настройки портов и управлять ногами через команды ассемблера но я думаю что на этапе освоения платформы такой подход будет излишним.
    Ответ написан
    2 комментария
  • Будет ли скомпилированный код C++ работать на всех архитектурах процессора?

    @res2001
    Developer, ex-admin
    Даже бинарник для х64 не будет работать под х32, что уж говорить о принципиально разных архитектурах.
    В исполняемом файле содержатся машинные команды для конкретной архитектуры процессора.
    Для другой архитектуры нужен другой исполняемый файл.
    То же самое актуально и для разных ОС (бинарники для линукс и винды не совместимы). Но, обычно, есть варианты запустить бинарник от другой ОС - виртуализация, wine в линукс, WSL в винде.

    Более того, например, если у вас приложение х64 и вы используете какую-то специфическую фичу процессора, которая есть только в определенных моделях процессора, то приложение будет корректно работать только на процессорах поддерживающих эту фичу. Если нужно, в приложении можно предусмотреть проверку процессора и если фича не поддерживается использовать какую-то универсальную реализацию.
    Ответ написан
    Комментировать
  • Как сменить тип литералов в С++?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    f(std::string("abc"))

    Каких-то специальных встроенных в язык средств созадавать const std::string нету.
    Ответ написан
    2 комментария
  • Как сменить тип литералов в С++?

    @nagayev Автор вопроса
    Ответ из комментариев:
    Начиная с С++14 можно сделать так:
    "abc"s
    Так же можно определять пользовательские литералы
    Ответ написан
    Комментировать
  • Почему программа на Си молчит?

    @kaka888
    C, C++, Qt, Python, Flask, aiogram, MySQL, Redis..
    Вместо printf("%d\n", atoi(a[i])); напиши printf("%c\n", a[i]);.
    Ответ написан
    Комментировать
  • Почему программа на Си молчит?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Потому что atoi(const char * string)
    Ответ написан
    Комментировать
  • Что за деталь на фото?

    @pfg21
    ex-турист
    кондер стоит как защита от помех коллектора двигателя.
    там выделяется куча помех для которых провод становится передающей антеной.
    на второй картинке синфазный дроссель с бифилярной намоткой. тоже для подавления помех.

    все прекрасно будет работать без них, только куча помех в эфире.
    Ответ написан
    2 комментария
  • Что за деталь на фото?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Керамический конденсатор, если не ошибаюсь на 22 нанофарад на 250 вольт. n - обозначение нанофарад, Z - допуск по величине или точность.
    https://go-radio.ru/marking-capacitor.html

    Доп. ответ - деталь с обмоткой называется дроссель.
    Ответ написан
    6 комментариев
  • Потенциометр для ардуино, какое нужно сопротивление?

    gbg
    @gbg Куратор тега Arduino
    Любые ответы на любые вопросы
    В данном случае, ардуина является вольтметром, причем с достаточно большим входным сопротивлением.

    Это означает, что выбор сопротивления потенциометра продиктован током, который будет через него течь в первую очередь. 100 Ом тоже будет работать (если его верно подключить и верно запрограммировать), но через него будет течь довольно большой ток (5V / 100 Ом = 0.05А = 50 миллиампер), что может создать проблему, если девайс имеет батарейное питание - батарейки будут быстро садиться.

    Типичным выбором являются потенциометры с сопротивлением 10 000 - 100 000 Ом.

    Лучший способ проверить потенциометр - измерить напряжение на выводе движка мультиметром, когда концы сопротивления подключены к источнику питания с известным выходным напряжением. Мультиметр при этом желательно иметь стрелочный, чтобы оценить плавность работы и отсутствие участков с плохим контактом между ползунком и дорожкой.
    Ответ написан
    Комментировать
  • Что не так с Arduino?

    nava2002
    @nava2002
    Инженер
    Нет драйвера USB для Arduino.
    Предположу что на плате Arduino NANO установлен контроллер СН340.

    https://wiki.iarduino.ru/page/ch340-win-ten
    Ответ написан
    1 комментарий
  • Как из аналогового сигнала получить вольты?

    На ардуино есть отличная функция map и на англ., для преобразования диапазонов.
    spoiler

    _______________________
    Математически функция map() может быть записана так:
    
    long map(long x, long in_min, long in_max, long out_min, long out_max)
    {
      return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
    }
    //а если заменить long на float или double, то она будет работать с плавающей точкой
    //и соответственно изменить имя функции, что бы оно не пересекалось с родной библиотекой ардуины

    _______________________

    Если считать в милливольтах, т.е.
    y = map(x, 0, 1023, 0, 5000), т.е. 1023 - соответствует 5000 мВ, т.е. 5 В.

    Если надо можно сделать на ее основе свою, но переваривающую плавающие точки. Только помните, что плавающие точки считать немного дольше, чем целые числа.
    Ответ написан
    Комментировать