Hallo,
bei meinen Projekt geht es darum, dass bei schlechten Luftzustand ein Buzzer einen akustischen Alarm machen soll. Das funktioniert auch. Aber ...
Mein Code:
alarm();
if (tasterstatus == HIGH){
noTone(12);
}
Wenn der Alarm(Buzzer) angeht soll per Taster möglich sein diesen Alarm auszuschalten und es soll in den nächsten 15 Minuten die Methode alarm() deaktiviert sein. Wie mach ich das ? . Derzeit kann ich den Buzzer immer nur kurz ausschalten den nach durchlaufen der alarm() Methode geht der Alarm wieder los wenn die Luft schlecht ist. Diese Methode soll aber nach drücken des Taster für 15 Minuten deaktiviert sein. ??
bitte poste Code nur in code Tags.
Noch besser, immer compilierbaren Code posten. Ansonten bekommst du von uns auch nur Code-Fetzen.
Zur Frage:
Einfach die Zeit (millis) merken wenn du den Alarm bestätigst
und vor der nächsten Auslösung prüfen, ob genug Zeit seit dem letzten Alarmbestätigung vorüber sind.
"BlinkWithoutDelay" - zeigt dir den Umgang mit millis().
Und weil du dann fragen wirst, warum das die ersten 15 minuten nicht klappt, den previousMillis Zeitstempel einfach schon mit einem "Überlauf" initialisieren (also mit -15 minuten) - dann klappt der erste Alarm auch schon.
Was bitte sollen wir mit den Fragmenten anfangen ?
Poste bitte deinen kompletten Sketch in Code-Tags.
Verwende dazu die Schaltfläche </> oben links im Editorfenster. Dazu den Sketch markieren und die Schaltfläche klicken, oder [ code] davor und [ / code] dahinter ohne Leerzeichen. Oder im IDE-Fenster rechte Maustaste und für "Forum kopieren klicken", danach hier einfügen.
Das kannst du in deinem Startbeitrag noch nachträglich machen.
fabiannn:
soll in den nächsten 15 Minuten die Methode alarm() deaktiviert sein. Wie mach ich das ?
1000+1 Wege führen nach Rom.
Einer davon: Merke dir, wann Du den alarm ausgemacht hast.
Sperre solange den (erneuten) Alarm bis die Zeit abgelaufen ist.
Dazu brauchst noch eine Variable lastalarmaus vom typ unsigned long und dann z.B.
Ok, ich habe das jetzt so eingefügt wie du es geändert hast. Es funktioniert auch fast alles. Das einzige Problem was jetzt noch ist, ist folgendes: Die Methode soll gleich beim Starten des Programmes durchgeführt werden und die Luft überprüfen. Dies macht die Methode aber erst wenn das 900000ms delay abgelaufen ist. Ich habe das mit 10sek delay getestet. Nach 10sek wird die Methode alarm() ausgeführt. Sie soll aber direkt abgerufen werden. Da ich den Sensor zuvor beeinflusst habe ging der Alarm sofort los. Anschließend drückte ich den Taster und der Alarm ging für 10sek aus was auch richtig ist.
fabiannn:
Ok, ich habe das jetzt so eingefügt wie du es geändert hast. Es funktioniert auch fast alles.
nene - es funktioniert alles.
Das einzige Problem was jetzt noch ist, ist folgendes:
Das hast Du nicht geschrieben - das ist eine neue Anforderung.
Hättest Du die erste Antwort (#1) befolgt, hätte ich Dir eine Variable geschenkt, die gesetzt wird.
Dann wäre auch Deine Anforderung erfüllt gewesen.
#1 ist die erste Antwort auf Deine Frage gemeint.
da steht:
noiasca:
Und weil du dann fragen wirst, warum das die ersten 15 minuten nicht klappt, den previousMillis Zeitstempel einfach schon mit einem "Überlauf" initialisieren (also mit -15 minuten) - dann klappt der erste Alarm auch schon.
Diese werden rechts durchnummeriert. Das hier ist zB #12
Grüße Uwe