C++ Arduino Zeit-Programm?
Hallo,
wollte Fragen wie man eine Uhr macht, welche sich anschaltet wenn sich der Bewegungsmelder etwas erkennt und stoppt wenn er ein zweites Mal etwas erkennt.
Mein eigener Code war:
int counter = 0;
unsigned long previousMillis = 0;
int inputPin = 7;
void setup() {
Serial.begin(9600);
pinMode(inputPin, INPUT);
}
void loop() {
unsigned long currentMillis = millis();
int signalValue = digitalRead(inputPin);
//Serial.println("Signal:" + String(signalValue));
//Serial.println(currentMillis);
if(signalValue >= 1 && counter == 0) {
previousMillis = currentMillis;
//Serial.println(previousMillis);
counter++;
}
if(signalValue >= 1 && counter == 1) {
int newMillis = currentMillis - previousMillis;
counter--;
}
}
aber dieser funktioniert nicht weil ja immer previousMillis gleich wie currentMillis ist. Hab mir ein paar Videos angesehen da ist es aber auch immer so.
PS: ist für ein Arduino UNO.
Danke im Voraus!
1 Antwort
Das kann so nicht funktionieren. Du brauchst eine Variable, die speichert, ob schon das erste Signal erfasst wurde, mind einen Zeitspeicher, und die Struktur muss anders aussehen.
Wenn noch keine erste Bewegung erkannt wurde und der BWM anspricht, Zeitspeicher setzen und Variable setzen. (Erste If)...
Wenn Variable gesetzt und BWM anspricht, Zeitdifferenz ausrechnen und Variable zurücksetzen... (zweite If)...
Bedenke bitte dabei auch, dass der BWM sein signal noch hält. Ist also die If erfüllt, so muss geprüft werden, dass der BWM erst abfällt, bevor die nächste If wieder gesetzt werden darf. Notfalls also noch eine zweite Variable als Rückfallmelder des BWM einbinden, die eine Triggerung verhindert, solange der BWM High meldet und noch nicht LOW wurde (Flankenauswertung)