Verstehe nicht warum der Serielle Monitor, wenn ich den Magneten auf den Sensor halte kein "Erkannt ausgibt"
const int hallSensorPin = 12; // Pin an dem der Hall-Sensor angeschlossen ist
int hallSensorStatus = 0;
void setup() {
// Pin fuerr den Hall-Sensor als Eingang definieren
pinMode(hallSensorPin, INPUT);
Serial.begin(9600);
}
void loop() {
// Status des Hall-Sensors auslesen
hallSensorStatus = digitalRead(hallSensorPin);
if (hallSensorStatus == LOW) {
Serial.println("ERKANNT");
}
}
Meine Frage ist nun warum er wenn ich den Magneten an den Sensor halte direkt 20 mal und öfters ausgibt "Erkannt". Habe das Programm bisschen umgeändert.
Weil Dein Magnet länger dran ist, als er für ein mal erkannt ausgeben braucht.
Wenn Du pro Magnetdurchgang nur 1 Meldung willst, musst Du Dir diesen Status merken und ihn wieder zurück schalten, wenn kein Magnet mehr da ist.
PAXON999:
Meine Frage ist nun warum er wenn ich den Magneten an den Sensor halte direkt 20 mal und öfters ausgibt "Erkannt". Habe das Programm bisschen umgeändert.
Ach das müssen wir dann nicht sehen und weiter raten.
Warum zeigst du das nicht ?
Aber mal geraten:
Die Anzeige und Abfrage läuft in der Loop und wird somit ständig aufgerufen.
Solange der Magnet vor dem Sensor klebt.
Und nochmal, wir brauchen genauere Informationen, ist das so schwer ?
Ich vermute, daß der Arduino in dieser kurzen Zeit '20mal oder öfter' die loop() durchläuft.
In jeder Runde prüft Er, ob Da ein Magnet ist - wenn JA, sagt Er im Terminal Bescheid.
Das liegt also an Dir - Du musst wesentlich schneller werden - oder Deinen Sketch umschreiben, daß die Erkennung nur noch 1x ausgegeben wird.
Ansatz: merke Dir, ob Du 'jetzt' was erkannt hast, oder ob nicht.
DAVOR prüfst Du, wenn Du was erkannt hast, ob Du 'beim letzten Mal' bereits was erkannt hattest.
Male Dir den Ablauf auf, was wann passieren soll und denke stets daran: der Arduino ist blöd, Der muß sich auch Alles aufschreiben, was Er Sich merken soll.