arduino останавливается посреди выполнения программы
Пытаюсь сделать пульт на arduino. Посреди программы ардуина останавливается (или останавливается вывод?). Было даже, что светодиод RX просто оставался включённым. Проблема проявлялась в нескольких вариантах:
- Ардуина останавливалась на выводе sending data, не выводя data sent (код ниже). Один раз было, что после этого светодиод, который у меня стоит вместо ИК, остался гореть, но очень неярко.
- Была остановка на found pult signal, причём что когда я снова нажимал на пульт, светодиод L, который у меня мониторит сигналы пульта, снова моргал.
Часто при прирывании программы выводится знак chr('16'). Reset кнопка на плате помогает.
Ещё есть две ошибки, которые больше похожи на программные, но ошибку я не смог найти.
- Сначала светодиод , который у меня стоит вместо ИК, вроде моргает при sending data, а потом перестаёт, хотя sending data пишется, как будто стирается переменная dt.
- Иногда бывает, что я не нажал кнопку записи, но видно что светодиод L моргает когда я нажимаю на пульт (т.е. оно всё ещё считывает ИК приёмник)
#include <PCM.h>
#include <IRremote.h>
const int recPin = 2;
const int playPin = 3;
const int reciverPin = 9;
bool recPushed, playPushed, recving;
IRrecv irrecv(reciverPin);
IRsend sender(10);
//uint32_t res;
decode_results results;
IRData* dt;
void setup()
{
Serial.begin(115200);
pinMode(recPin,INPUT);
pinMode(playPin,INPUT);
sender.begin(10,1,LED_BUILTIN);
irrecv.enableIRIn();
}
void loop() {
recPushed=digitalRead(recPin);
playPushed=digitalRead(playPin);
Serial.println(1);
if(recPushed && !recving)
{
irrecv.start();
Serial.println("starting recv");
recving=true;
}
Serial.println(2);
delay(100);
if(!recPushed && recving)
{
irrecv.stop();
Serial.println("stopping recv");
recving=false;
}
Serial.println(3);
delay(100);
if (recving && irrecv.decode()) {
Serial.println("found pult signal");
dt=irrecv.read();
irrecv.resume();
}
Serial.println(4);
delay(100);
if(playPushed)
{
Serial.println("sending data");
sender.write(dt,10);
Serial.println("data sent");
}
delay(100);
}