Hi meddie,
erstmal vorweg, delay() ist für fast nichts zu gebrauchen als vileicht einer Zeitbegrenzten Eingabesperre.
Du willst ja nicht dein Programm aufhängen, sondern es soll ja weiterlaufen. Bei solchen Anwendungen kann man sich ganz gut mit millis() behelfen (micros() get auch). millis() gibt einfach nur die Zeit an, die nach einschalten des µC vergangen ist.
Hier ein Beispielcode:
Ich hatte keine Lust, das jetzt für 3 Buttons zu machenconst int buttonPin = 2;
int buttonState = 0;
int sperrbyte=0;
int Befehl;
unsigned long zeit;
void setup() {
__pinMode(buttonPin, INPUT);
__digitalWrite(buttonPin, HIGH); //PullUp-Wiederstand aktivieren
}
void loop(){
__Tastenabfrage();
__if(Befehl==1){
____//Dein Code
__}
__if(Befehl==2){
____//Dein Code
__}
}
void Tastenabfrage(){
__buttonState=digitalRead(buttonPin);
__if((buttonState == LOW) && (sperrbyte==0)){
____zeit=millis(); //erste Zeit nehmen beim runterdrücken des Tasters
____sperrbyte=1; //verhindert das dauerhafte Zeitnehmen beim Tastendruck
__}
__if((buttonState == HIGH) && (zeit+60<=millis()) && (zeit+1000>millis()) && (sperrbyte==1)){ //Wenn Taster länger als 60ms (Entprellen) und kürtzer als 1 Sekunde gedrückt wurde, führe Aktion "a" aus
____Befehl=1;
____zeit=0;
____sperrbyte=0;
__}
__if((buttonState == HIGH) && (zeit+1000<=millis()) && (sperrbyte==1)){ //Wenn Taster mindestens 1 Sekunde gedrückt wurde, führe Aktion "b" aus
____Befehl=2;
____zeit=0;
____sperrbyte=0;
__}
__if((zeit+60>millis()) && (buttonState==HIGH)){ //Wen Taster kürtzer als 60ms gedrückt wurde, sperrbyte und Zeit zurücksetzen
____sperrbyte=0;
____zeit=0;
__}
}
.
Aber den Code wirst du ja wohl noch an deine Bedürfnisse anpassen können oder?
Soooo....Wen Fragen, dann fragen.
Gruß, Green
Lesezeichen