#include <NecDecoder.h>
// обявляем пины
#define RED 12
#define GREEN 11
#define IR 2
NecDecoder ir;
int first = -1;
int second = -1;
void setup() {
Serial.begin(9600);
// запускаем прием на D2, прерывание 0
attachInterrupt(0, irIsr, IR);
}
void loop() {
// если пакет успешно принят
if (ir.available()) {
// вывести команду (8 бит)
// Serial.println(decodeValue(ir.readCommand()));
int dec = decodeValue(ir.readCommand());
if (dec == -1) {
error();
}else if (first == -1) {
first = decodeValue(ir.readCommand());
} else if (first != -1 && second == -1) {
second = decodeValue(ir.readCommand());
calc();
iluminate();
}
}
}
// в прерывании вызываем tick()
void irIsr() {
ir.tick();
}
void green() {
digitalWrite(GREEN, HIGH);
delay(400);
digitalWrite(GREEN, LOW);
delay(400);
}
void error(){
for (int i = 0; i < 2; ++i) {
digitalWrite(RED, HIGH);
delay(150);
digitalWrite(RED, LOW);
delay(150);
}
}
void iluminate () {
for (int i = 0; i < 8; ++i) {
digitalWrite(RED, HIGH);
delay(50);
digitalWrite(RED, LOW);
delay(50);
digitalWrite(GREEN, HIGH);
delay(50);
digitalWrite(GREEN, LOW);
delay(50);
}
}
void calc() {
for (int i = 0; i < (first + second); ++i) {
green();
}
first = -1;
second = -1;
}
int decodeValue(int val) {
// Serial.println(ir.readCommand());
switch (val) {
case 22:
return 0;
case 12:
return 1;
case 24:
return 2;
case 94:
return 3;
default:
return -1;
}
}