Required Hardware:
1 x Arduino Nano
1 x Green LED 5mm
1 x Red LED 5mm
1 x White LED 5mm
1 x IR Remote control module
20 cm wire
Printed parts:
Circuit / Wiring
Code:
// Include IR Remote Library by Ken Shirriff
#include
// Define sensor pin
const int RECV_PIN = 4;
const int ledPin1 = A0;
const int ledPin2 = A1;
long previousMillis = 0;
long previousMillis2 = 0;
int ledState = LOW;
// Define IR Receiver and Results Objects
IRrecv irrecv(RECV_PIN);
decode_results results;
int verdi2 = 0;
int verdi1 = 0;
void setup(){
// Serial Monitor @ 9600 baud
Serial.begin(9600);
// Enable the IR Receiver
irrecv.enableIRIn();
pinMode (ledPin1, OUTPUT);
pinMode (ledPin2, OUTPUT);
}
void loop(){
unsigned long currentMillis = millis();
if (irrecv.decode(&results)){
// Print Code in HEX
// Serial.println(results.value, HEX);
switch(results.value)
{
case 0xFFA25D:
Serial.println("Quick Serien");
verdi1 = 1;
break;
case 0xFF629D:
Serial.println("ISO");
verdi1 = 2;
break;
case 0xFFE21D:
Serial.println("FM");
verdi1 = 3;
break;
case 0xFF22DD:
Serial.println("Flash");
verdi1 = 4;
break;
case 0xFF02FD:
Serial.println("Kardinal");
verdi1 = 5;
break;
case 0xFFC23D:
Serial.println("Morse");
verdi1 = 6;
break;
case 0xFFE01F:
Serial.println("7");
verdi1 = 8;
break;
case 0xFFA857:
Serial.println("8");
verdi1 = 8;
break;
case 0xFF906F:
Serial.println("9");
verdi1 = 8;
break;
case 0xFF9867:
Serial.println("AV");
verdi1 = 7;
break;
case 0xFF6897:
Serial.println("*");
Serial.println("Fast");
verdi1 = 8;
break;
case 0xFFB04F:
Serial.println("#");
verdi1 = random(1,6);
verdi2 = random(0,4);
Serial.println(verdi1);
break;
case 0xFF18E7:
Serial.println("o");
if (verdi1 = 2) {
verdi1 = verdi1 - 1;
Serial.println(verdi1);
}
else {
verdi1 = 6;
Serial.println(verdi1);
}
break;
case 0xFF10EF:
Serial.println("V");
if (verdi2 >= 2) {
verdi2 = verdi2 - 1;
Serial.println(verdi2);
}
else {
verdi2 = 9;
Serial.println(verdi2);
}
break;
case 0xFF5AA5:
Serial.println("H");
if (verdi2 500 && currentMillis - previousMillis 1000) previousMillis = currentMillis;
break;
case 1: // VQ
blinkOff();
if(currentMillis - previousMillis > 250 && currentMillis - previousMillis 500) previousMillis = currentMillis;
break;
case 2: // UQ
blinkOff();
if(currentMillis - previousMillis > 125 && currentMillis - previousMillis 250) previousMillis = currentMillis;
break;
case 3:
verdi2 = 0;
break;
case 4:
verdi2 = 0;
break;
case 5:
verdi2 = 0;
break;
case 6:
verdi2 = 0;
break;
case 7:
verdi2 = 0;
break;
case 8:
verdi2 = 0;
break;
case 9:
verdi2 = 2;
break;
}
break;
case 2: //ISO
switch(verdi2) {
case 0: //ISO1
blinkOff();
if(currentMillis - previousMillis > 500 && currentMillis - previousMillis 1000) previousMillis = currentMillis;
break;
case 1: // ISO2
blinkOff();
if(currentMillis - previousMillis > 1000 && currentMillis - previousMillis 2000) previousMillis = currentMillis;
break;
case 2: // ISO 4
blinkOff();
if(currentMillis - previousMillis > 2000 && currentMillis - previousMillis 4000) previousMillis = currentMillis;
break;
case 3: // ISO6
blinkOff();
if(currentMillis - previousMillis > 3000 && currentMillis - previousMillis 6000) previousMillis = currentMillis;
break;
case 4: // ISO8
blinkOff();
if(currentMillis - previousMillis > 4000 && currentMillis - previousMillis 8000) previousMillis = currentMillis;
break;
case 5:
verdi2 = 0;
break;
case 6:
verdi2 = 0;
break;
case 7:
verdi2 = 0;
break;
case 8:
verdi2 = 0;
break;
case 9:
verdi2 = 4;
break;
}
break;
case 3: //FM / OC
switch(verdi2) {
case 0: //FM1
blinkOff();
if(currentMillis - previousMillis >1000) blinkOn();
if(currentMillis - previousMillis > 6000) previousMillis = currentMillis;
break;
case 1: // FM2
blinkOff();
if(currentMillis - previousMillis > 1000 && currentMillis - previousMillis 2000 && currentMillis - previousMillis 3000 && currentMillis - previousMillis 8000) previousMillis = currentMillis;
break;
case 2: // FM3
blinkOff();
if(currentMillis - previousMillis > 1000 && currentMillis - previousMillis 2000 && currentMillis - previousMillis 3000 && currentMillis - previousMillis 4000 && currentMillis - previousMillis 5000 && currentMillis - previousMillis 8000) previousMillis = currentMillis;
break;
case 3: //
verdi2 = 0;
break;
case 4: //
verdi2 = 0;
break;
case 5:
verdi2 = 0;
break;
case 6:
verdi2 = 0;
break;
case 7:
verdi2 = 0;
break;
case 8:
verdi2 = 0;
break;
case 9:
verdi2 = 2;
break;
}
break;
case 4: //Flash
switch(verdi2) {
case 0: //Fl 4s
if(currentMillis - previousMillis > 0 && currentMillis - previousMillis 500 && currentMillis - previousMillis 4000) previousMillis = currentMillis;
break;
case 1: // Fl 6s
if(currentMillis - previousMillis > 0 && currentMillis - previousMillis 500 && currentMillis - previousMillis 6000) previousMillis = currentMillis;
break;
case 2: // LF 10s
if(currentMillis - previousMillis > 0 && currentMillis - previousMillis 2000 && currentMillis - previousMillis 10000) previousMillis = currentMillis;
break;
case 3: // Fl(2) 6s
if(currentMillis - previousMillis > 0 && currentMillis - previousMillis 500 && currentMillis - previousMillis 1000 && currentMillis - previousMillis 1500 && currentMillis - previousMillis 6000) previousMillis = currentMillis;
break;
case 4: // Fl(3) 6s
if(currentMillis - previousMillis > 0 && currentMillis - previousMillis 500 && currentMillis - previousMillis 1000 && currentMillis - previousMillis 1500 && currentMillis - previousMillis 2000 && currentMillis - previousMillis 2500 && currentMillis - previousMillis 6000) previousMillis = currentMillis;
break;
case 5:
verdi2 = 0;
break;
case 6:
verdi2 = 0;
break;
case 7:
verdi2 = 0;
break;
case 8:
verdi2 = 0;
break;
case 9:
verdi2 = 4;
break;
}
break;
case 5: //Kardinal
switch(verdi2) {
case 0: //Nord
blinkOff();
if(currentMillis - previousMillis > 500 && currentMillis - previousMillis 1000) previousMillis = currentMillis;
break;
case 1: // Øst
if(currentMillis - previousMillis > 0 && currentMillis - previousMillis 250 && currentMillis - previousMillis 500 && currentMillis - previousMillis 750 && currentMillis - previousMillis 1000 && currentMillis - previousMillis 1250 && currentMillis - previousMillis 5000) previousMillis = currentMillis;
break;
case 2: // Sør
if(currentMillis - previousMillis > 0 && currentMillis - previousMillis 250 && currentMillis - previousMillis 500 && currentMillis - previousMillis 750 && currentMillis - previousMillis 1000 && currentMillis - previousMillis 1250 && currentMillis - previousMillis 1500 && currentMillis - previousMillis 1750 && currentMillis - previousMillis 2000 && currentMillis - previousMillis 2250 && currentMillis - previousMillis 2500 && currentMillis - previousMillis 2750 && currentMillis - previousMillis 3000 && currentMillis - previousMillis 5000 && currentMillis - previousMillis 10000) previousMillis = currentMillis;
break;
case 3: // vest
if(currentMillis - previousMillis > 0 && currentMillis - previousMillis 250 && currentMillis - previousMillis 500 && currentMillis - previousMillis 750 && currentMillis - previousMillis 1000 && currentMillis - previousMillis 1250 && currentMillis - previousMillis 1500 && currentMillis - previousMillis 1750 && currentMillis - previousMillis 2000 && currentMillis - previousMillis 2250 && currentMillis - previousMillis 2500 && currentMillis - previousMillis 2750 && currentMillis - previousMillis 3000 && currentMillis - previousMillis 3250 && currentMillis - previousMillis 3500 && currentMillis - previousMillis 3750 && currentMillis - previousMillis 4250 && currentMillis - previousMillis 4500 && currentMillis - previousMillis 10000) previousMillis = currentMillis;
break;
case 4: //
verdi2 = 0;
break;
case 5:
verdi2 = 0;
break;
case 6:
verdi2 = 0;
break;
case 7:
verdi2 = 0;
break;
case 8:
verdi2 = 0;
break;
case 9:
verdi2 = 2;
break;
}
break;
case 6: //Kardinal
switch(verdi2) {
case 0: //Nord
if(currentMillis - previousMillis > 0 && currentMillis - previousMillis 250 && currentMillis - previousMillis 500 && currentMillis - previousMillis 750 && currentMillis - previousMillis 1000 && currentMillis - previousMillis 1250 && currentMillis - previousMillis 2000 && currentMillis - previousMillis 2750 && currentMillis - previousMillis 3000 && currentMillis - previousMillis 3750 && currentMillis - previousMillis 4000 && currentMillis - previousMillis 4750 && currentMillis - previousMillis 5500 && currentMillis - previousMillis 5750 && currentMillis - previousMillis 6000 && currentMillis - previousMillis 6250 && currentMillis - previousMillis 6500 && currentMillis - previousMillis 6750 && currentMillis - previousMillis 8000) previousMillis = currentMillis;
break;
case 1: //
verdi2 = 0;
break;
case 2: //
verdi2 = 0;
break;
case 3: //
verdi2 = 0;
break;
case 4: //
verdi2 = 0;
break;
case 5:
verdi2 = 0;
break;
case 6:
verdi2 = 0;
break;
case 7:
verdi2 = 0;
break;
case 8:
verdi2 = 0;
break;
case 9:
verdi2 = 0;
break;
}
break;
case 7:
blinkOff();
break;
case 8:
blinkOn();
break;
}
}
void blinkOn()
{
analogWrite(ledPin1, 130);
digitalWrite(ledPin2, HIGH);
delay(30);
analogWrite(ledPin1, 255);
}
void blinkOff()
{
digitalWrite(ledPin1, LOW);
digitalWrite(ledPin2, LOW);
}
