#include <IRremote.h>
int RECV_PIN = 13;
int EG = 11; // LED 1
int EG1 = 10; // LED 2
int FEU = 9; // LED 3
int DG = 6; // LED 4
int DG1 = 7; // LED 5
int ST = 5; // LED 6
int Frei1 = 4; // LED 7
int ST1 = 3; // LED 8
int itsONled[] = {0, 0, 0, 0, 0, 0, 0, 0, 0};
int ledPins[] = {11, 10, 9, 6, 7, 5, 4, 3}; //array with all the LED's pins
int i = 0; //LED index for the arrays
//IR Fernbedienugsmanegment-----------------------------------------
#define Taste0 16738455 // code received from button 0
#define Taste1 16724175 // code received from button 1
#define Taste2 16718055 // code received from button 2
#define Taste3 16743045 // code received from button 3
#define Taste4 16716015 // code received from button 4
#define Taste5 16726215 // code received from button 5
#define Taste6 16734885 // code received from button 6
#define Taste7 16728765 // code received from button 7
#define Taste8 16730805 // code received from button 8
#define Taste9 16732845 // code received from button 9
#define Schlange 16750695 // code received from button Schlange
#define TastePlus 16748655 // code received from button Plus
#define TasteMinus 16754775 // code received from button Minus
IRrecv irrecv(RECV_PIN);
decode_results results;
//Zeitmanegment-----------------------------------------
int ze = 500; //=delay / Zeit bei alle Einschalten 2500
int za = 1000; //=delay / Zeit bei alle Ausschalten
//Timen-----------------------------------------
int fadeValue;
int lastCounter = 1;
int counter;
void setup()
{
Serial.begin(9600); // you can comment this line
irrecv.enableIRIn(); // Start the receiver
randomSeed(0);
pinMode(EG, OUTPUT);
pinMode(EG1, OUTPUT);
pinMode(DG, OUTPUT);
pinMode(DG1, OUTPUT);
pinMode(ST, OUTPUT);
pinMode(ST1, OUTPUT);
pinMode(FEU, OUTPUT);
}
//------------------------------------------------------
void loop() {
//###########Schaltet Taste 1-9 EIN oder AUS###########################
if (irrecv.decode(&results)) {
unsigned int value = results.value;
switch (value) {
case Taste1:
if (itsONled[1] == 1) {
digitalWrite(EG, LOW);
itsONled[1] = 0;
} else {
digitalWrite(EG, HIGH);
itsONled[1] = 1;
}
break;
case Taste2:
if (itsONled[2] == 1) {
digitalWrite(EG1, LOW);
itsONled[2] = 0;
} else {
digitalWrite(EG1, HIGH);
itsONled[2] = 1;
}
break;
case Taste3:
if (itsONled[3] == 1) {
digitalWrite(DG, LOW);
itsONled[3] = 0;
} else {
digitalWrite(DG, HIGH);
itsONled[3] = 1;
}
break;
case Taste4:
if (itsONled[4] == 1) {
digitalWrite(DG1, LOW);
itsONled[4] = 0;
} else {
digitalWrite(DG1, HIGH);
itsONled[4] = 1;
}
break;
case Taste5:
if (itsONled[5] == 1) {
digitalWrite(ST, LOW);
itsONled[5] = 0;
} else {
digitalWrite(ST, HIGH);
itsONled[5] = 1;
}
break;
case Taste6:
if (itsONled[6] == 1) {
digitalWrite(ST1, LOW);
itsONled[6] = 0;
} else {
digitalWrite(ST1, HIGH);
itsONled[6] = 1;
}
break;
case Taste0:
if (itsONled[1, 2, 3, 4, 5, 6, 7, 8] == 1) {
digitalWrite(EG, LOW);
delay(za);
digitalWrite(EG1, LOW);
delay(za);
digitalWrite(DG, LOW);
delay(za);
digitalWrite(DG1, LOW);
delay(za);
digitalWrite(ST, LOW);
delay(za);
digitalWrite(ST1, LOW);
delay(za);
digitalWrite(FEU, LOW);
itsONled[1, 2, 3, 4, 5, 6, 7, 8] = 0;
} else {
digitalWrite(EG, HIGH);
delay(ze);
digitalWrite(EG1, HIGH);
delay(ze);
digitalWrite(DG, HIGH);
delay(ze);
digitalWrite(DG1, HIGH);
delay(ze);
digitalWrite(ST, HIGH);
delay(ze);
digitalWrite(ST1, HIGH);
delay(ze);
digitalWrite(FEU, HIGH);
itsONled[1, 2, 3, 4, 5, 6, 7, 8] = 1;
}
break;
case Taste9:
if (itsONled[3] == 1) {
digitalWrite(FEU, LOW);
itsONled[3] = 0;
} else {
digitalWrite(FEU, HIGH);
itsONled[3] = 1;
}
break;
case TastePlus:
Timen();
break;
case TasteMinus:
Timen();
break;
case Taste8:
if (itsONled[3] == 1) {
digitalWrite(FEU, LOW);
itsONled[3] = 0;
} else {
FeuerFlackern(FEU, 1000);
itsONled[3] = 1;
}
break;
} //#### switch (value) ENDE #####
Serial.println(value); // you can comment this line
irrecv.resume(); // Receive the next value
} //### if Ende ########
//### wenn aus case Taste8: herausgenommen dann funktionierts ########
if (itsONled[3] == 1) {
digitalWrite(FEU, LOW);
itsONled[3] = 0;
} else {
FeuerFlackern(FEU, 1000);
itsONled[3] = 1;
}
}
//##### void loop Ende ##################
void FeuerFlackern(int thePin, int dauer) {
int val = 0; // variable LED Helligkeit
int delayval = 0; // variable LED Wartezeit
val = random(100, 255); // Zufallszahl zwischen 100 und 255. 0 = LED aus, 255 = LED maximale Helligkeit.
analogWrite(thePin, val); // Setzt das PWM Signal auf die Zufallszahl
val = random(100, 255);
analogWrite(thePin, val);
val = random(50, 255); // Zufallszahl zwischen 50 und 255. 0 = LED aus, 255 = LED maximale Helligkeit.
analogWrite(thePin, val);
val = random(50, 255);
analogWrite(thePin, val);
delayval = random(100, 400); // Zufallszahl zwischen 100 und 400. 50 = schnell, 600 = langsam.
delay(delayval); // Setze die Wartezeit auf die Zufallszahl
}
//##### Timen ##################
void Timen() {
counter = lastCounter;
if (irrecv.decode(&results))
{
if (results.value == 16748655) {
counter ++;
}
if (results.value == 16754775) {
counter --;
}
irrecv.resume();
}
if (counter > 8) counter = 8; //maximum for counter = 5
if (counter < 2) counter = 1; //minimum for counter = 1
switch (counter) { //depending on the counter the fadevalue is sent to the led
case 1:
fadeValue = 00;
break;
case 2:
fadeValue = 4;
break;
case 3:
fadeValue = 8;
break;
case 4:
fadeValue = 16;
break;
case 5:
fadeValue = 32;
break;
case 6:
fadeValue = 64;
break;
case 7:
fadeValue = 128;
break;
case 8:
fadeValue = 255;
break;
}
analogWrite(EG1, fadeValue);
analogWrite(DG, fadeValue);
analogWrite(DG1, fadeValue);
analogWrite(ST, fadeValue);
analogWrite(FEU, fadeValue);
lastCounter = counter; //reset counter
}