Ответы пользователя по тегу Arduino
  • Ошибка с 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 комментария
  • Как сделать плавное изменение яркости ШИМ?

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

    для этого нужно менять скважность ШИМ не один раз скачком от текущего значения к целевому, а постепенно, за несколько шагов. С постоянной скоростью -- примерно так:
    void set_pwm_smooth(int new_pwm)
    {
        static const int pwm_step = ...; // шаг изменения ШИМ
        static const int pwm_step_time = ...; // время одного шага изменения ШИМ
        static int old_pwm;
        int pwm = old_pwm;
    
        while (pwm != new_pwm) {
            int next_pwm = pwm + (pwm < new_pwm ? pwm_step : -pwm_step);
            if ((pwm < new_pwm && next_pwm > new_pwm) ||
                (pwm > new_pwm && next_pwm < new_pwm))
                pwm = new_pwm;
            else
                pwm = next_pwm;
            analogWrite(LEDPIN, pwm);
            delay(pwm_step_time);
        }
        old_pwm = new_pwm;
    }
    Ответ написан
  • Как правильно объявить функцию, использующую переменную из класса, и класс включающий в себя использование этой функции?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Как объявить их так, чтобы избежать подобных ошибок?

    Очень странная конструкция в коде:
    - если это такой уж univeralTool, то зачем он завязывается на поле какого-то конкретного объекта какого-то класса?
    - если уж надо завязаться на поле объекта, то почему эта функция -- не член этого класса?
    - если надо обработать какое-то значение, то почему не передать это значение как аргумент функции?

    Ну и если и ни то и ни сё, и действительно надо как написано в коде -- то раздели всё на части и используй объявления или упорядочи определения функций как следует, например так:
    class someClass {
    public:
      void someClassTool();
      int variableInClass = 5;
    };
    
    Someclass someclass;
    
    void someUniversalTool()
    {
      int variable1 = someClass.variableInClass ;
      //some additional code
    }
    
    void SomeClass::someClassTool()
    {
       someUniversalTool();
       //some additional code
    }
    Ответ написан
    Комментировать