ESP32: не работают вместе IRemote и NVS

Тема в разделе "ESP8266, ESP32", создана пользователем nsv2018, 5 сен 2018.

  1. Mitrandir

    Mitrandir Гуру

    Попробуйте так.
    закопируйте фаилы IRremote.h irRecv.cpp чтобы можно было вернуть назад если не удастся

    в фаиле IRremote.h добавляем метод void disableIRIn ( ) ;

    в фаиле irRecv.cpp пишем реализацию:

    Код (C++):


    void  IRrecv::disableIRIn ( )
    {

    #ifdef ESP32
        // ESP32 has a proper API to setup timers, no weird chip macros needed
        // simply call the readable API versions :)

       timerDetachInterrupt(timer);
      timerAlarmDisable(timer);


     
    #endif


    }
     
    ZAZ-965 нравится это.
  2. nsv2018

    nsv2018 Нерд

    УРА! похоже что все получилось!
    Итак, теперь отчет.
    При работате с IR приемником и сохранием данных в NVS ESP-32
    библиотеки IRremote..h и Preferences.h совместно жить не желали, контроллер вываливался по дампу и перезагружался. Попытки подобрать комбинацию библиотек ни к чему не приводили.

    Проблему удалось решить воспользовавшись советом и помощью уважаемого Mitrandir:
    Добавить в библиотеку IRremote метод disableIRIn.
    И до обращения к NVS останавливать IRremote, а после обращения - опять его запускать.
    Вот как я добавил метод:
    1.Файл IRemote.h
    добавил метод void disableIRIn ();
    Код (C++):

    // Main class for receiving IR
    class IRrecv
    {
        public:
            IRrecv (int recvpin) ;
            IRrecv (int recvpin, int blinkpin);

            void  blink13    (int blinkflag) ;
            int   decode     (decode_results *results) ;
            void  enableIRIn ( ) ;
            void  disableIRIn ();  // -----    ADD func
            bool  isIdle     ( ) ;
            void  resume     ( ) ;

        private:
            long  decodeHash (decode_results *results) ;
            int   compare    (unsigned int oldval, unsigned int newval) ;
     
    2. Файл irRecv.cpp
    пишем реализацию добавленного метода:
    Код (C++):

    void IRrecv::disableIRIn()
    {
    #ifdef ESP32
         // ESP32 has a proper API to setup timers, no weird chip macros needed
         // simply call the readable API versions :)

            timerDetachInterrupt(timer);
               timerAlarmDisable(timer);
    #endif
    }
    3. Все!
    На первых порах, пока разработчики не исправят баги в SDK - вполне можно пользоваться.
    Если имеются иные решения - напишите пож-ста.
    Еще раз благодарю всех откликнувшихся/
     
    Последнее редактирование: 8 сен 2018
    ИгорьК и ZAZ-965 нравится это.