Arduino Zähler?
Moin, ich will einen Zähler programmieren, der jedes Mal, mitzählt, wie oft eine if Funktion positiv war.
Folgedendes Szenario: Ich habe zwei Bewegungsmelder die ein Signal von einer Minute geben, wenn Bewegung erkannt wird, das sind die Variablem Sensor1 und Sensor2 und ich will jetzt wissen wie oft diese ausgelöst haben und das als Variable speichern. Wie mache ich das?
Das Ganze ist eine Alarmanlage, die ich programmiert habe und Arming ist ein Schalter der entscheidet, ob die Alarmanlage an oder aus ist.
Ps. das Blynk zeug ist unwichtig in diesem Kontext, das ist nur eine App, mit der Ich sehen kann was abgeht. Danke Schonmal!
if (Arming = 1) {
Blynk.virtualWrite(V0, 1);
digitalWrite(32, HIGH);
Sensor1 = digitalRead(27);
Sensor2 = digitalRead(26);
if ((Sensor1 = LOW) || (Sensor2 = LOW)) {
digitalWrite(33, LOW);
alarmON();
}
LOW bedeutet übrigens, dass der Melder ein signal gibt, weil ich den internen Pullup Widerstand benutze, deswegen ist es falsch herum
1 Antwort
Ich hab schon ewig nix mehr mit dem Arduino gemacht, aber meine erste Überlegung war folgende:
2 Variablen, eine zum Zählen (int oder so) und eine (bool?) zum merken, das schon gezählt wurde.
Nennen wir die Zählvariable count und die Merkvariable memo.
Dann soll er in deiner if-Schleife nur count um 1 erhöhen, wenn memo false ist und danach memo auf true setzen.
Zusätzlich gibt es noch eine zweite if-Schleife, in der abgefragt wird, ob beide BWM wieder high sind; damit wird memo wieder auf false gesetzt.
Dann müsste jede Auslösung nur 1x gezählt werden.
Wird so nicht in jedem Programmdurchlauf state auf 0 gesetzt und damit zu oft gezählt?
So hätte ich mir das jetzt vorgestellt:
if (Arming == 1) {
Sensor1 = digitalRead(27);
Sensor2 = digitalRead(26);
if ((Sensor1 == LOW) || (Sensor2 == LOW)) {
digitalWrite(33, LOW);
if (state == 0) {
counter++;
state = 1;
}
alarmON();
}
if ((Sensor1 == HIGH) && (Sensor2 == HIGH)) {
state = 0;
}
ne kann er ja nicht, weil state nur wieder auf 0 geht, wenn einMelder ausgelöst wird. kann aber auch sein, dass ich was verwechsel.
Das würde ja bedeuten mit dem && dass beide auslösen müssen, was ich ja nicht will, deswegen | | das oder bedeutet.
if ((Sensor1 == HIGH) && (Sensor2 == HIGH)) {
state = 0;
ja genau sowas hab ich mir auch gedacht aber wusste nicht wie aber das hat mir echt geholfen, vielen dank
so hab das jetzt geschrieben das sollte ja funktionieren?