#include <IRremote.h>
#include <Stepper.h>
#include <avr/wdt.h>
#define PIN_RECEIVER 2 // Signal Pin of IR receiver
IRrecv receiver(PIN_RECEIVER);
int codigoBotao = 162;
int val; // variable to read the value from the analog pin
const int stepsPerRevolution = 200;
const int red = 3;
const int green = 4;
const int blue = 5;
Stepper myStepper(stepsPerRevolution, 9, 10, 11, 12);
void interruptFunction() {
if (receiver.decode()) {
if (receiver.decodedIRData.command == codigoBotao) {// Código do botão corresponde ao código esperado
Serial.println("reset");
digitalWrite(red, LOW);
digitalWrite(green, LOW);
digitalWrite(blue, LOW);
wdt_enable(WDTO_15MS);
}
receiver.resume(); // Reinicia o receptor para receber o próximo sinal
}
}
void setup()
{
myStepper.setSpeed(60);// set the speed at 60 rpm:
Serial.begin(9600);// initialize the serial port:
receiver.enableIRIn(); // Start the receiver
attachInterrupt(digitalPinToInterrupt(PIN_RECEIVER), interruptFunction, CHANGE);
val = 200;
pinMode(red, OUTPUT);
pinMode(green, OUTPUT);
pinMode(blue, OUTPUT);
}
void loop()
{
// Checks received an IR signal
if (receiver.decode()) {
translateIR();
receiver.resume(); // Receive the next value
}
}
void translateIR()
{
// Takes command based on IR code received
switch (receiver.decodedIRData.command) {
case 162:
//lcdPrint("POWER");
break;
case 226:
digitalWrite(red, HIGH);
delay(500);
digitalWrite(red, LOW);
//lcdPrint("MENU");
break;
case 34:
digitalWrite(red, HIGH);
delay(500);
digitalWrite(red, LOW);
//lcdPrint("TEST");
break;
case 2:
digitalWrite(green, HIGH);
myStepper.step(val);
delay(500);
digitalWrite(green, LOW);
//lcdPrint("PLUS");
break;
case 194:
digitalWrite(red, HIGH);
delay(500);
digitalWrite(red, LOW);
//lcdPrint("BACK");
break;
case 224:
//lcdPrint("PREV.");
Serial.println("inicia");
digitalWrite(blue, HIGH);
digitalWrite(red, HIGH);
myStepper.step(-val*3);
digitalWrite(blue, LOW);
digitalWrite(red, LOW);
Serial.println("termina");
break;
case 168:
digitalWrite(red, HIGH);
delay(500);
digitalWrite(red, LOW);
//lcdPrint("PLAY");
break;
case 144:
//lcdPrint("NEXT");
Serial.println("inicia");
digitalWrite(green, HIGH);
myStepper.step(val*3);
digitalWrite(green, LOW);
Serial.println("termina");
break;
case 104:
digitalWrite(red, HIGH);
delay(500);
//lcdPrint("num: 0");
break;
case 152:
digitalWrite(green, HIGH);
digitalWrite(red, HIGH);
myStepper.step(-val);
digitalWrite(green, LOW);
digitalWrite(red, LOW);
//lcdPrint("MINUS");
break;
case 176:
digitalWrite(red, HIGH);
delay(500);
digitalWrite(red, LOW);
//lcdPrint("key: C");
break;
case 48:
digitalWrite(red, HIGH);
delay(500);
digitalWrite(red, LOW);
//lcdPrint("num: 1");
break;
case 24:
digitalWrite(red, HIGH);
delay(500);
digitalWrite(red, LOW);
//lcdPrint("num: 2");
break;
case 122:
digitalWrite(red, HIGH);
delay(500);
digitalWrite(red, LOW);
//lcdPrint("num: 3");
break;
case 16:
digitalWrite(red, HIGH);
delay(500);
digitalWrite(red, LOW);
//lcdPrint("num: 4");
break;
case 56:
digitalWrite(red, HIGH);
delay(500);
digitalWrite(red, LOW);
//lcdPrint("num: 5");
break;
case 90:
digitalWrite(red, HIGH);
delay(500);
digitalWrite(red, LOW);
//lcdPrint("num: 6");
break;
case 66:
digitalWrite(red, HIGH);
delay(500);
digitalWrite(red, LOW);
//lcdPrint("num: 7");
break;
case 74:
digitalWrite(red, HIGH);
delay(500);
digitalWrite(red, LOW);
//lcdPrint("num: 8");
break;
case 82:
digitalWrite(red, HIGH);
delay(500);
digitalWrite(red, LOW);
//lcdPrint("num: 9");
break;
default:
digitalWrite(red, HIGH);
digitalWrite(green, HIGH);
digitalWrite(blue, HIGH);
delay(500);
digitalWrite(red, LOW);
digitalWrite(green, LOW);
digitalWrite(blue, LOW);
}
}