Паук на ИК не реагирует на вторую команду
- Войдите на сайт для отправки комментариев
Сб, 07/12/2019 - 15:04
Добрый день.
решил повторить проект ringo.
собрал прототип. код почти не изменил. робот реагирует только на первую команду и повторяет ее постоянно уже не реагируя на последующие.
собрал на nano, датчик висит на 2м пине (у автора аналоговый вход - у меня цифровой и датчик немного другой). команды принимает нормально если без двигателей смотреть на порту.
помогите понять что не так.
пробовал с прерываниями (поэтому на 2й линии оставил датчик - не как у автора), робот уже слушается команд но с переменным успехом.
хотелось бы понять что не так с оригинальным кодом.
*******************************************************
вот эти библиотеки
конфликтуют - подробности в тырнетах
вот эти библиотеки
конфликтуют - подробности в тырнетах
спасибо за быстрый ответ. поищу.
хотелось бы понять что не так с оригинальным кодом.
Он неправильно вставлен в сообщение.
вот посмотрел код из библиотеки irremote- в методе irrecv
тут используют для irremote.h таймер 2 а в серво
// Say which 16 bit timers can be used and in what order #if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) #define _useTimer5 #define _useTimer1 #define _useTimer3 #define _useTimer4 typedef enum { _timer5, _timer1, _timer3, _timer4, _Nbr_16timers } timer16_Sequence_t; #elif defined(__AVR_ATmega32U4__) #define _useTimer1 typedef enum { _timer1, _Nbr_16timers } timer16_Sequence_t; #elif defined(__AVR_AT90USB646__) || defined(__AVR_AT90USB1286__) #define _useTimer3 #define _useTimer1 typedef enum { _timer3, _timer1, _Nbr_16timers } timer16_Sequence_t; #elif defined(__AVR_ATmega128__) || defined(__AVR_ATmega1281__) || defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__) || defined(__AVR_ATmega2561__) #define _useTimer3 #define _useTimer1 typedef enum { _timer3, _timer1, _Nbr_16timers } timer16_Sequence_t; #else // everything else #define _useTimer1 typedef enum { _timer1, _Nbr_16timers } timer16_Sequence_t; #endifу меня - Nano значит таймер 1.
получается не пересекаются таймеры и не должно быть конфликта?
Не понял, сначала приводите код для ESP32, потом говорите, что у Вас Nano. Как-то в показаниях путаетесь.
Не понял, сначала приводите код для ESP32, потом говорите, что у Вас Nano. Как-то в показаниях путаетесь.
ага не туда посмотрел
а какой таймер тогда далее используется?
void IRrecv::enableIRIn ( ) { // Interrupt Service Routine - Fires every 50uS #ifdef ESP32 // ESP32 has a proper API to setup timers, no weird chip macros needed // simply call the readable API versions :) // 3 timers, choose #1, 80 divider nanosecond precision, 1 to count up timer = timerBegin(1, 80, 1); timerAttachInterrupt(timer, &IRTimer, 1); // every 50ns, autoreload = true timerAlarmWrite(timer, 50, true); timerAlarmEnable(timer); #else cli(); // Setup pulse clock timer interrupt // Prescale /8 (16M/8 = 0.5 microseconds per tick) // Therefore, the timer interval can range from 0.5 to 128 microseconds // Depending on the reset value (255 to 0) TIMER_CONFIG_NORMAL(); // Timer2 Overflow Interrupt Enable TIMER_ENABLE_INTR; TIMER_RESET; sei(); // enable interrupts #endif2й? по комментариям вижу а где смотреть аналогичную функцию не понятно. подскажите плз.
а все нашел.- таймер 2
ну тогда да обе билбиотеки указывают использовать один и тот же таймер 2. тогда либо изменить ее либо другую библиотеку смотреть. надеюсь есть такая еще для ик датчика
См. макрос TIMER_CONFIG_NORMAL. А, Вы уже посмотрели. Понятно.
Почему? Разве Servo не первый таймер использует?
да в серво 1 в ремот- 2. получается все ок - нет конфликта.
Так ото ж.
Так ото ж.
а чего тогда не так с кодом?
Не знаю.
Не знаю.
тему можно закрыть. все заработало когда я стал использовать аналоговый порт контроллера. на цифровом порту наводилось все подряд в момент работы серв.возможно можно было бы подтянуть резисторы к цифровому порту для однозначного состояния его (0 или 1).