Задать вопрос
Ответы пользователя по тегу Arduino
  • Почему в самописном приёмнике данные не принимаются без Serial.print()?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    декодирование кода Хэмминга происходит неверно(да и приём байт в целом), если в цикле заполнения буфера отсутствует вывод serial

    это происходит потому, что приём буфера синхронизируется только в его начале, по преамбуле, после этого никакой синхронизации нет. Чтобы приём выполнялся корректно, задержки при семплировании битов приёмником не должны отличаться от задержек при передаче больше чем на (длительность одного бита)/(максимальное число битов в сообщении). В передатчике из дополнительных задержек -- печать байта и пробела после каждого переданного байта:
    for(int i = 0;i<24;++i) {
        sendByte(block[i]);
        Serial.print(block[i],HEX);Serial.print(' ');
    }


    В приёмнике -- печать двух байт и двух пробелов после приёма каждых двух байтов:
    for(int i = 0;i<10;++i) {
          uint8_t byte1 = receiveByte();uint8_t byte2 = receiveByte();
          buffer[i*2] = byte1; buffer[i*2+1] = byte2; 
          //delay(200);
         Serial.print(byte1,HEX); Serial.print(' '); Serial.print(byte2,HEX);Serial.print(' ');
    }


    В среднем задержки в приёмнике и передатчике при наличии печати в Serial совпадают. А при удалении печати в приёмнике задержки начинают расходиться слишком сильно.

    Я бы не рекомендовал вставлять вызовы Serial.print() или других функций с переменным временем выполнения в алгоритм требующий работы в режиме реального времени.
    Ответ написан
    Комментировать
  • Почему компилятор не видит реализацию методов во компиляции?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    ld.exe: .pio\build\desktop\test\desktop\test_user\user.test.o: in function `test_only_strongest_zone_applies()':
    P:\stalker\dosimetr-arduino/test/desktop/test_user/user.test.cpp:31:(.text+0x104): undefined reference to `User::updatePosition(GpsPosition const&)'

    Линковщик тебе говорит, что методы класса User не определены.

    в какую сторону копать

    Надо разобраться, где находятся реализации указанных функций, в objects/User.hpp или где-то ещё, и понять, каким образом должен собираться этот код.
    Ответ написан
  • Ошибка с ESP32?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Что это значит

    подозреваю, что вот эта часть: ���`�B��Χh� �l<*�� !����� -- это вывод скетча на 9600. Откуда LoadProhibited -- непонятно.

    можно ли это как-то исправить?

    только разобравшись, что происходит. idf.py monitor обычно декодирует стек трейс и выводит соответствующие строчки исходников, можно начать отсюда.
    Ответ написан
  • Можно ли в ESP32-Cam одновременно использовать SD карту и периферийное устройство общающееся по SPI?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    как это сделать вместе?

    Повесить второе SPI-устройство на отдельную линию CS. Я вижу, что сигнал U2RXD с разъёма P1 можно для этого использовать, если речь об этом модуле.
    Ответ написан
  • Есть ли модуль реального времени в AI Thinker ESP32 (ESP32 CAM)?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Нет. То что в esp32 называется RTC -- это не энергонезависимые часы.
    Ответ написан
    3 комментария
  • HEX значение возвращается неправильно, почему?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Почему

    Потому что Serial.println печатает то, что ты передаёшь ей на вход, а ты передаёшь ей на вход values[0][0] -- это один символ, '8'.

    как это решить?

    Понять, что ты хочешь напечатать и организовать данные для печати правильным образом. Сейчас определение массива values говорит о полном непонимании того, что происходит. Если ты хотел инициализировать массив кодами символов, то не нужно было брать коды в одиночные кавычки, это превратило их в символьные литералы. Значения типа char не могут вместить больше чем 8 битов, а 0xe918 -- 16-битное число. Если это симовл unicode в кодировке utf-8, то его байты должны идти как отдельные символы. Если ты собираешься печатать отдельные байты закодированных utf-8 символов, то не нужно делать этого функцией println, потому что она вставит символ конца строки после печати каждого символа.
    Если ты хотел напечатать шестнадцатеричные значения, ты мог сделать это так:
    unsigned int values[][6] = {
      {0xE918, 0x14, 0xE918, 0x49, 0xE918, 0x48}
    };
    …
    Serial.println(values[0][0], HEX);


    Короче, начни с того чтобы понять, что ты хочешь напечатать.
    Ответ написан
    Комментировать
  • Не могу залить прошивку на ESP-32 CAM?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Никак не пойму в чём дело
    Brownout detector was triggered

    Контроллер перезагружается по защите из-за недостаточного питания.
    Ответ написан
    5 комментариев
  • Как прошить ESP32 CAM программатором ESP-32-CAM-MB?

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

    Нет, неправильно. Нижняя сопля соединяющая GND и U0TX точно не нужна, она тупо не даёт esp32 отвечать по UART. Верхняя сопля соединяет GPIO0 и GND, что нужно для начала прошивки, но на плате программатора и так есть кнопка с той же самой функцией.
    Вообще для начала прошивки нужно выполнить сброс (кнопкой RST) и на момент сброса соединить GPIO0 и GND (кнопкой IO0 на программаторе). После такого сброса контроллер можно прошивать.
    Я рекомендую убрать обе сопли с программатора и попробовать описанную выше процедуру.
    Ответ написан
    8 комментариев
  • Compilation error: exit status 1?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    D:\ N E W\ 1637\ 1\Talking LED Alarm Clock Using TM1637 LED Module\Code/Code.ino:91: undefined reference to `sp3_THE'
    D:\ N E W\ 1637\ 1\Talking LED Alarm Clock Using TM1637 LED Module\Code/Code.ino:91: undefined reference to `sp3_THE'
    D:\ N E W\ 1637\ 1\Talking LED Alarm Clock Using TM1637 LED Module\Code/Code.ino:92: undefined reference to `sp3_TIME'

    В чему может быть проблема ?


    Так вот же написано: символы не определены. Поскольку компиляция прошла успешно, а проблема на этапе линковки, нужно добавить в линковку библиотеку в которой эти символы определены.
    Ответ написан
    Комментировать
  • Как отправлять пакеты по Wi-Fi для управления МК ESP8622?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Сеть вай-фай раздает сама плата, телефон к ней подключается и условно говорят когда в приложении нажата кнопка1 то на плату должна прийти команда включить светодиод1…
    как это реализовать

    Выбрать протокол взаимодействия (UDP, TCP), выбрать или разработать протокол уровня приложения, реализовать сервер выполняющийся на esp8266, реализовать клиент выполняющийся на андроид.
    В простейшем случае можно сделать для esp8266 UDP-сервер принимающий один байт, значение которого соответствует состоянию светодиода и включающий/выключающий светодиод при приёме этого байта. Клиент на андроид, соответственно, должен будет посылать по UDP на условленный порт один байт при нажатии или отпускании кнопки в приложении. Поиск по словам "python udp" находит полезные результаты.
    Ответ написан
    Комментировать
  • Возможно ли как-то использовать обычную функцию заместо макро-функции?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    #define BIT_SET(port, bit) (port |= (1 << bit))
    
    int main(void)
    {
        BIT_SET(PORTB, PORTB0);
    }


    вот такой вариант, с макро-функцией, работает, так как это просто текстовая замена

    Он работает, потому что с таким определением BIT_SET PORTB не может быть определён просто как 0x04. Потому что просто текстовая замена 0x04 |= 1 << 0 не имеет смысла. Он определён как volatile ссылка на память с адресом 0x04. Когда ты научишься передавать ссылку на такую память в функцию, функция тоже начнёт работать.
    Ответ написан
    3 комментария
  • Как настроить внешнее прерывание Arduino?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Подскажите, сайтик с нормальным решением

    Вот пример идущий вместе с этой библиотекой, который делает то, что ты описал.
    Ответ написан
    Комментировать
  • Что возвращает gps модуль neo-6m?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    что возвращается в качестве ответа

    Сообщения формата NMEA.

    Вроде все сообщения из твоего ответа по ссылочке описаны. В частности
    $GPGLL,5547.75949,N,03747.58257,E,155030.00,A,A*64
    55°47.75949' северной широты, 37°47.58257' восточной долготы, зафиксировано в 15:50:30.00.
    Ответ написан
    Комментировать
  • Как показать переменную на русском языке LCD_1602_RUS?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    как можно вставить сюда переменную?

    Сюда можно вставить переменную тип которой -- wchar_t *
    Ответ написан
    8 комментариев
  • Почему компиляция жалуется на инциализацию lcd дисплея?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Почему компиляция жалуется на инциализацию lcd дисплея?

    вот он же тебе прямо пишет:
    class LiquidCrystal_I2C' has no member named 'init'

    Почему ты думаешь, что эта функция существует?
    Ответ написан
    2 комментария
  • Не прошивается esp8266, что делать?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Не прошивается esp8266, что делать?

    читать сообщение об ошибке, вот это:
    Arduino\libraries\ESP8266HttpClient-master/SerialResponse.h:15:10: fatal error: Delay.h: No such file or directory

    разбираться с разницей между "не прошивается" и "не компилируется".
    Ответ написан
    Комментировать
  • Как узнать удаленный IP на плате ESP?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Как мне узнать IP WiFi, к которому подключена ESP?

    Никак, но не потому, что "это зависит от настроек роутера". А потому что нет никакого "IP WiFi". WiFi -- это физический и канальный протоколы, IP -- транспортный. Можно подключиться к WiFi и не использовать IP. Может быть "IP шлюза по умолчанию" -- вы получите его по DHCP, но с WiFi он может быть не связан совсем.
    Ответ написан
    Комментировать
  • Почему не работает проверка IF в arduino?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    if (p180T != (p180T_if,10))

    В этом месте наверняка имелось в виду что-то другое. Сейчас тут написано if (p180T != 10).
    Ответ написан
    Комментировать
  • Возможно ли управление скоростью мотора без использования потенциометра?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Возможно ли управление скоростью мотора без использования потенциометра?

    Зависит от типа мотора. В случае коллекторного мотора может помочь широтно-импульсная модуляция. В случае бесколлекторного мотора с прямым доступом к обмоткам можно попробовать менять скорость переключения обмоток.
    Ответ написан
    6 комментариев
  • Как не откладывать обработку прерывания в долгий ящик?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Если я в коде по прерыванию отключаю обработку этого самого прерывания, например на пару секунд, то прерывание действительно не будет обрабатываться эти две секунды, но если оно было, то будет обработано сразу же после следующего подключения прерывания.

    Это описание верно только для прерывания срабатывающего по фронту сигнала. Прерывание срабатывающее по уровню сигнала нигде не запоминается. Вне зависимости от того, было ли оно запрошено в то время, пока оно было запрещено, если оно не запрошено в момент разрешения прерывания -- прерывания не случится.

    Верно ли я понимаю, что микроконтроллер запоминает факт прерывания

    Верно для прерываний срабатывающих по фронту. Неверно для прерываний срабатывающих по уровню.

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

    Неверно в общем случае. Флаги запроса прерывания могут быть доступны через регистры, иногда эти регистры можно программно очищать.

    Возможно ли как-то переопределить данное поведение?

    У некоторых прерываний можно настроить, срабатывают они по уровню или по фронту. Например, у Atmel можно настроить как детектируются внешние прерывания INT0 и INT1 -- регистром EICRA.

    Или скинуть каким-то другим способом этот флаг?

    Опять же, на Atmel флаги внешних прерываний лежат в R/W регистре EIFR, в нужные биты которого можно записать 0, чтобы очистить запомненный запрос прерывания.
    Ответ написан
    2 комментария