Zum Inhalt springen

Antwort auf: Ein-und Ausschaltverzögerung mit Modulo-Trick

Projekte und Tutorials für Arduino Foren StartHardware-Forum Ein-und Ausschaltverzögerung mit Modulo-Trick Antwort auf: Ein-und Ausschaltverzögerung mit Modulo-Trick

#8284
Stefan Hermann
Administrator

Hi Tapsi,

danke für deine Mail. Irgendwie ist der Post im Spam-Folder gelandet. Diese Forumssoftware ist sehr eigen, wenn man Links einsetzt.

Zu deiner Frage: Der Ansatz ist nicht schlecht, aber der Modulo-Trick ist hier schwer einzusetzen, weil der eher für Wiederholungen gedacht ist. Ich schlage vor, einfach eine Einschaltzeit zu setzen und eine Einschaltdauer festzulegen. Die Einschaltzeit kannst du ja auch später neu festlegen, z. B. wenn du einen Button drückst: if (digitalRead(button)==LOW) Zeitein = millis(); // Hierbei sollte Zeitein aber nicht als int, sondern als long deklariert werden.

Ansonsten versuche das mal:

int Buzzer = 2;             // Alarmhorn
int Zeitein = 4000;        // Ein-Zeit = (Zeit + Zeitaus)
int Dauer = 1000;        // Einschaltverzögerung (muss < Zeitein sein!)

void setup() {
  pinMode(Buzzer, OUTPUT);
}

void loop() {
  if ((millis()>Zeitein)&&(millis() < Zeitein+Dauer)) {
    digitalWrite(Buzzer, HIGH);
  } else {
    digitalWrite(Buzzer, LOW);
  }
}

Hier noch die Variante mit Taster:

int Buzzer = 2;             // Alarmhorn
int Button = 13;
int ButtonZeitverzoegerung = 1000;
long Zeitein = 4000;        // Ein-Zeit = (Zeit + Zeitaus)
int Dauer = 1000;        // Einschaltverzögerung (muss < Zeitein sein!)

void setup() {
  pinMode(Buzzer, OUTPUT);
  pinMode(Button, INPUT_PULLUP);
}

void loop() {
  if (digitalRead(Button)==LOW) Zeitein = millis()+ButtonZeitverzoegerung;
  
  if ((millis()>Zeitein)&&(millis() < Zeitein+Dauer)) {
    digitalWrite(Buzzer, HIGH);
  } else {
    digitalWrite(Buzzer, LOW);
  }
}

Liebe Grüße :-)