bool press[3]={0,0,0}; // array speichert welcher Taster gerade gedrückt wird
bool LEDswitch[3]={0,0,0}; // array speichert den Zustand jeder LED
int r=5; // array speichert den entsprechenden array von pinLED
int pinTaster[3] ={5,6,7}; // Zuordung an welchen Pins die Taster stecken
int taster[]={0,0,0,0,0,0,1,2}; // die Ausgänge (11 12 13) werden den Schaltern über array zugeordnet(11=0 12=1 13=2)
int pinCount=2; // anzahl der Stellen im array -1 (0 ist erste Stelle, 1 zweite und 2 dritte Stelle)
int pinLED[3] ={11,12,13}; // Pin Ausgang LED
unsigned long taster1millis = 0; // Millisekunden für das entprellen ( 0 bis 4.294.967.295)
void setup() {
Serial.begin(115200);
/****************************************************************
********** Pins input / output werden gesetzt *********
***************************************************************/
for (int i=0; i<=pinCount;i++){
pinMode(pinTaster[i],INPUT_PULLUP);
}
for (int i=0; i<=pinCount;i++){
pinMode(pinLED[i], OUTPUT) ;
}
/****************************************************************
***************************************************************/
}
void loop() {
loopMillis();
tasterRead();
switchLED();
}
/****************************************************************
**** millis (taster1millis) laufen weiter wenn keine *****
**** Taste gedrückt und stoppen sobald eine gedrückt wird *****
***************************************************************/
void loopMillis(){
if (digitalRead(pinTaster[0])==true&&digitalRead(pinTaster[1])==true&&digitalRead(pinTaster[2])==true){
taster1millis = millis();
}
}
/****************************************************************
**** Taster werden ausgelesen und bewertet *****
***************************************************************/
void tasterRead(){
for (int i=0;i <=pinCount;i++){
if (digitalRead(pinTaster[i])==false&& millis() - taster1millis >30){ // auslesen welche Taste gedrückt wird
press[i]=1; // wenn Taste gedrückt wird der "press"-wert im array auf 1 geändert
r=taster[(pinTaster[i])]; // r bekommt den zugewiesenden Wert aus array vom gedrückten Taster (Pin 5= 0 / 6=1 / 7=2)
}
}
if(press[r]==1&&digitalRead(pinTaster[r])==true){ // wenn Taster, welcher gedrückt ist, losgelassen wird
if(LEDswitch[r]==0){LEDswitch[r]=1;}else{LEDswitch[r]=0;} // wird für den Taster der Wert "LEDswitch" im array umgeschaltet (1 oder 0)
press[r]=0; // array in "press" wird wieder auf 0 gesetzt
}
}
/****************************************************************
**** LED´s werden geschaltet (ein / aus) *****
***************************************************************/
void switchLED(){
digitalWrite(pinLED[r],LEDswitch[r]); //
}
/*
** **
** **
** ** ** **
** ** ** ** ****** *****
** ** ** ** ** ** ** **
** ** ** ** ** ** ** **
** ** ** ** ** ** ** **
** ** ** ** ******** ** **
*/