#include #define warten_nach_press 300 // Ausgang Pin #define Relais1 12 #define Relais2 11 #define Relais3 10 #define Relais4 9 #define Relais5 8 #define Relais6 7 #define Relais7 6 #define Relais8 5 #define Relais9 4 #define Relais10 3 #define UP 2 #define DOWN 13 // / Segment Anzeige PIN Belegung #define a A2 #define b A3 #define c A4 #define d A5 #define e A6 #define f A1 #define g A0 /* a -------- | | f | | b |__g___| | | e | | c |__d___| */ // Reihenfolge a,b,c,d,e,f,g uint8_t pins_fuer_zahl[12][7] = { {a,b,c,d,e,f,0}, // 0 {b,c,0,0,0,0,0}, // 1 {a,b,d,e,g,0,0}, // 2 {a,b,g,e,d,0,0}, // 3 {f,g,b,c,0,0,0}, // 4 {a,f,g,c,d,0,0}, // 5 {f,g,c,d,e,0,0}, // 6 {a,b,c,0,0,0,0}, // 7 {a,b,c,d,e,f,g}, // 8 {a,b,c,g,f,0,0}, // 9 {e,f,a,b,c,g,0}, // 10 -> A {a,b,c,d,e,f,g} // 11 -> Alle aus }; void ini_io(void); void alle_aus(void); void taster_einlesen(void); void relais_schalten(void); void segment_anzeigen(void); int counter = 0; unsigned long ntime = 0; void setup(){ ini_io(); segment_anzeigen(); alle_aus(); } void loop(){ taster_einlesen(); } void taster_einlesen(){ if(millis()-ntime >= warten_nach_press){ if(!digitalRead(UP)){ counter++; if(counter >= 10) counter = 10; relais_schalten(); segment_anzeigen(); } if(!digitalRead(DOWN)){ counter--; if(counter <= 0) counter = 0; relais_schalten(); segment_anzeigen(); } ntime = millis(); } } void relais_schalten(){ switch (counter) { case 0: alle_aus(); break; case 1: digitalWrite(Relais1,HIGH); delay(50); digitalWrite(Relais2, LOW); break; case 2: digitalWrite(Relais1, LOW); digitalWrite(Relais3, LOW); delay(50); digitalWrite(Relais2, HIGH); break; case 3: digitalWrite(Relais2, LOW); digitalWrite(Relais4, LOW); delay(50); digitalWrite(Relais3, HIGH); break; case 4: digitalWrite(Relais3, LOW); digitalWrite(Relais4, HIGH); digitalWrite(Relais5, LOW); break; case 5: digitalWrite(Relais4, LOW); digitalWrite(Relais6, LOW); delay(50); digitalWrite(Relais5, HIGH); break; case 6: digitalWrite(Relais5, LOW); digitalWrite(Relais7, LOW); delay(50); digitalWrite(Relais6, HIGH); break; case 7: digitalWrite(Relais6, LOW); digitalWrite(Relais8, LOW); delay(50); digitalWrite(Relais7, HIGH); break; case 8: digitalWrite(Relais7, LOW); digitalWrite(Relais9, LOW); delay(50); digitalWrite(Relais8, HIGH); break; case 9: digitalWrite(Relais8, LOW); digitalWrite(Relais10, LOW); delay(50); digitalWrite(Relais9, HIGH); break; case 10: digitalWrite(Relais9, LOW); delay(50); digitalWrite(Relais10, HIGH); break; default: break; } } void segment_anzeigen(){ // Schaltet alle aus for(int i = 0 ; i < 7 ; i++){ digitalWrite(pins_fuer_zahl[11][i],LOW); } // Zeigt Zahl an for(int i = 0 ; i < 7 ; i++){ if(pins_fuer_zahl[counter][i] != 0){ digitalWrite(pins_fuer_zahl[counter][i],HIGH); } } } void alle_aus(){ // Geht Ausgang 3 - 12 durch und schaltet Ausgänge aus for(int i = 3; i<13; i++){ digitalWrite(i,LOW); } } void ini_io(){ pinMode(Relais1,OUTPUT); pinMode(Relais2,OUTPUT); pinMode(Relais3,OUTPUT); pinMode(Relais4,OUTPUT); pinMode(Relais5,OUTPUT); pinMode(Relais6,OUTPUT); pinMode(Relais7,OUTPUT); pinMode(Relais8,OUTPUT); pinMode(Relais9,OUTPUT); pinMode(Relais10,OUTPUT); pinMode(UP ,INPUT); pinMode(DOWN,INPUT); // / Segment Anzeige PIN Belegung pinMode(a,OUTPUT); pinMode(b,OUTPUT); pinMode(c,OUTPUT); pinMode(d,OUTPUT); pinMode(e,OUTPUT); pinMode(f,OUTPUT); pinMode(g,OUTPUT); }