Alle 10 Sekunden ein Signal überwachen

Hallo zusammen,

bin gerade dabei mir das programmieren mit dem Arduino beizubringen. Seither habe ich immer Steuerungen wie S7 oder Logo verwendet.

D.h. hier standen mir immer Merker und Zeit-Bausteine zur Verfügung. Leider steckt dieses denken immer noch in meinem Kopf....

Meine eigentliche Frage:

Wie kann ich den Zeit-Baustein der nachfolgenden Aufgabe darstellen.

Projekt:

Taster 1 startet eine Überwachung-Funktion indem er Merker 1 auf high setzt. Ist Merker 1 da und kommt zusätzlich ein Impuls von Taster 2 dann soll eine Zeit von 10s starten. Innerhalb dieser 10s sollte erneut ein Impuls von Taster 2 kommen. Kommt dieser nicht dann wird Merker "Alarm high gesetzt. Dies soll sich ständig wiederholen.

Also im Grunde möchte ich überprüfen ob alle 10s ein Impuls an Taster 2 ankommt. Ist dies nicht der Fall, soll der Alarm angehen.

Vielen Dank im Voraus!

Merk dir die Zeit der letzten Taste und überwache ständig ob millis()-gemerkteZeit > 10000 wird, dann kannst du den Alarm auslösen.

Hallo,

wenn ich ergänzen darf. Zum allgemeinen Verständnis. Theseus erklärt millis() http://forum.arduino.cc/index.php?topic=400102.msg2752141#msg2752141

D.h. hier standen mir immer Merker und Zeit-Bausteine zur Verfügung. Leider steckt dieses denken immer noch in meinem Kopf....

Wieso "leider"?

Diese Denkweise ist auch für eine AVR basierten Steuerung angemessen.

Nur, dass dir diese Bausteine nicht unmittelbar zur Verfügung stehen. Selber machen ist angesagt, oder bewährte Libs nehmen.

Tipp: Du bist nicht der erste, mit dieser "Denkart". Siehe z.B. : IEC Timer für Arduino?

Also ich habe mal was zusammen geschrieben. Leider fehlt mir die Rücksetztung des Alarms durch den Schaltimpuls.


const int BUTTON1 = 7; // Taster startet Überwachungs-Betrieb const int BUTTON2 = 8; // Schaltimpuls (muss alle 10s kommen) const int BUTTON3 = 9; // Reset Taster

int val1 = 0; int val2 = 0; int val3 = 0;

int alarm = 0; int state = 0; int merker1 = 0;

void setup() { pinMode(BUTTON1, INPUT); // pinMode(BUTTON2, INPUT); // pinMode(BUTTON3, INPUT); //

}

void loop(){

val1 = digitalRead(BUTTON1); val2 = digitalRead(BUTTON2); { if(val1 == HIGH){ merker1= 1; // Überwachung aktiv } if((merker1 == HIGH) && (val2 == HIGH)) { // Überwachung aktiv und Schaltimpuls startet Zeit state= 1; } if( state == HIGH) { // Ist state 10s high, so geht alarm an delay (10000); alarm=1; // Alarm geht an }

}

}

Was hat das mit meiner Antwort zu tun?

Ist aber auch egal, ich klinke mich hier wegen OT-Taubheit aus.

Viel Erfolg.

“Merk dir die Zeit der letzten Taste und überwache ständig ob millis()-gemerkteZeit > 10000 wird, dann kannst du den Alarm auslösen.”

ich weiss nicht wie dass realisieren soll… geb mir doch mal ein Beispiel.

const byte checkPin = 7;
const byte alarmPin = 10;
unsigned int maxDuration = 10000;
unsigned long lastPulse;
byte lastState;

void setup() {
  pinMode(checkPin, INPUT_PULLUP);
  pinMode(alarmPin, OUTPUT);
}

void loop() {
  byte currState = digitalRead(checkPin);
  if (!currState) {
    if (lastState) {
      lastPulse = millis();
      digitalWrite(alarmPin, LOW);
    }
  }
  lastState = currState;
  if (millis() - lastPulse > maxDuration) {
    digitalWrite(alarmPin, HIGH);
  }
}

Vielen Dank für dein code!!! Ich kannte den Befehl millis nicht... Ich arbeite mich mal in den code ein und spiele mal etwas drin herum.

sayor: Ich kannte den Befehl millis nicht...

Das liegt daran, dass du dich um Antworten nicht scherst.

Hier nochmal die #2:

Doc_Arduino: Hallo,

wenn ich ergänzen darf. Zum allgemeinen Verständnis. Theseus erklärt millis() http://forum.arduino.cc/index.php?topic=400102.msg2752141#msg2752141

Dafür gibt es eine Library: SimpleTimer.h

Du kannst das als Vorlage für eine eigene Lösung nehmen.

Siehe http://playground.arduino.cc/Code/SimpleTimer#Example

Damit solltest Du Dein Problem lösen können.