Arduino IRremote перестает работать

Я использую стандартный приемник 38 кГц с библиотекой Arduino-IRremote, и некоторое время он работает нормально, но потом перестает работать. Функция цикла выполняется раз за разом, как и ожидалось, но в какой-то момент функция декодирования библиотеки начинает возвращать false, пока я не сброшу плату.

Этот пример кода работает для меня с любым arduino nano или голым atmega328p на частоте 8 МГц, но для них обоих он зависает после некоторых приемов.

Код-это сам пример библиотеки:

#include <IRremote.h>

int RECV_PIN = 11;

IRrecv irrecv(RECV_PIN);

decode_results results;

void setup()
{
  Serial.begin(9600);
  irrecv.enableIRIn(); // Запуск приемника
}

void loop() {
  if (irrecv.decode(&results)) {
    Serial.println(results.value, HEX);
    irrecv.resume(); // Получить следующее значение
  }
  delay(100);
}

Иногда это происходит быстро, а иногда после 20 или более приемов. Я только добавил светодиодное мигание позже, чтобы проверить, зависла ли плата или это только инфракрасное излучение, которое перестает принимать, и это был второй случай.

, 👍1

Обсуждение

ПРИВЕТ, вы тот же пользователь, который опубликовал эту проблему на Github, @RSM

@RSM Да, это так. Я не знаю, ошибка это или что. Сначала я протестировал Nano с RGB светодиодами, управляемыми ШИМ, и подумал, что проблема в этом, поэтому я изолировал ИК-часть на bareduino, которая получает только от ИК и записывает в soft serial, а иногда и зависает. Когда я сбрасываю баредуино, он снова работает., @aalku

Я запустил код на UNO и pro micro с непрерывной катушкой ИК-указателя данных на нем в течение 15 минут? так что я не знаю, что за код у тебя, @RSM

Я никогда не видел, чтобы он выходил из строя при подключении к компьютеру, так что я думал, что это как-то связано с последовательным выходом, поэтому я удалил все последовательные отпечатки, но все равно тот же результат., @aalku

При работе "автономно" nano подключается к зарядному устройству сотового телефона через USB, а позже, когда добавляется bareduino, он питается от nano vcc., @aalku

Я так понимаю, у вас тоже есть последняя версия Библиотеки?, @RSM

Я не думаю, что VCC будет проблемой., @RSM

Я получил последнюю версию, прежде чем заметил, что она не стабильна. Сделал небольшие правки сам (определяет и так, никаких изменений кода), чтобы иметь возможность использовать его. Если вы думаете, что проблема может заключаться в том, что я попытаюсь изменить его на этой неделе на стабильную версию с тегами. Теперь он встроен в устройство, и его не так просто обновить., @aalku

Если у вас есть библиотека за последние три месяца, она должна быть самой последней. Какие определения вы изменили, возможно, поместили их в вопрос или связали файл, возможно, это не проблема, так как это не должно привести к его замораживанию., @RSM

Моя текущая версия библиотеки такова https://mega.nz/#!6cwVVKpI!U3uWmixxSzxI5iRXUIXbOknbpRrv6JNWJFbleoWnXoo. Я думаю, что скопировал изменение для поддержки arduino pro micro/leonardo (протестировано, но не очень), имел дело с наполовину выполненными определениями/ifdefs для каждого бренда и переименовал его из-за конфликта с RobotIRemote., @aalku

Попробуйте добавить конденсатор к силовой шине вашего баредуино. Может быть, просто процессор зависает, и в коде нет ничего плохого. Попробуйте переключить светодиод внутри цикла, чтобы увидеть, работает ли код по-прежнему., @Gerben

@Gerben На нано-входе есть конденсатор. Я думаю, что процессор вообще не зависает. В настоящее время с nano+bare nano вообще не висит. Я в этом уверен. RGB-светодиоды постоянно меняются. Я добавлю светодиод к баредуино, чтобы убедиться, что он не повешен., @aalku


3 ответа


1

Учебники по Arduino, которые я видел, не упоминают об этом, но в таблицах данных производителей ИК-приемников рекомендуется стабилизировать vcc с помощью резистора и конденсатора.

circuit

Кажется, что рецептор не может правильно сообщить о принятой волне, поэтому библиотека может неправильно ее декодировать. В моем случае проблема возникла, когда я добавил светодиоды RGB, управляемые ШИМ, к тому же (стабилизированному) источнику питания.

,

2

У меня была похожая проблема (но не та же самая). И это было связано с программными последовательными контактами, которые продолжают заполнять буферы MCU.

Иногда случается, что шим-контакты продолжают получать данные, например, GPS также продолжает заполнять буфер, и из-за этого arduino зависает .

Чтобы решить эту проблему, я открываю новый фиктивный последовательный порт программного обеспечения.( выберите любые свободные контакты ) и прослушивайте свои последовательные контакты программного обеспечения, когда вы хотите прочитать его, в противном случае заставьте dummy слушать.

,

Мне это кажется совершенно неуместным. В вопросе не упоминается программный последовательный порт., @Nick Gammon


0

Короче говоря: В библиотеке IRremote есть ошибки, которые приводят к невосприимчивости платы. Были некоторые обновления, а теперь и IRremote.h library 3.01 работает около суток с подключенной к нему светодиодной полосой FastLED.h WS1211.

Мой подход к тому, чтобы сделать его надежным более 24 часов с помощью новейшей библиотеки, вы можете подключить цифровой вывод к выводу сброса на Arduino. Затем используйте EVERY_N_HOURS, чтобы время от времени тянуть этот контакт низко.

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

Это должно даже сделать так, чтобы каждый клон платы 2USD работал настолько надежно, насколько это возможно/позволяет аппаратное обеспечение.

Получайте удовольствие :)

,