Hallo Leute,
ich arbeite seit zwei Tagen an einem Code und komme einfach zu keinem Ergebnis. Ich schaffe es eine LED mit RFID einzuschalten, was ziemlich einfach ist, aber ich schaffe es einfach nicht mit dem gleichen RFID die LED auszuschalten. Hoffentlich kriege ich hier ein paar Denkanstösse, die ich vorantreiben. Mein Code mit LED einschalten sieht wiefolgt aus:
Danach habe ich folgendes geändert:
Ganz oben vor dem Setup: int Status = 0;
und im Loop:
if (RFID_Kontrolle && Status == 0)
{
digitalWrite (Test_LED, HIGH);
Status = 1;
}
if (RFID_Kontrolle && Status == 1)
{
digitalWrite (Test_LED, LOW);
Status = 0;
}
Problem: Die LED bleibt immer aus.
Dann habe ich was im Internet gefunden, dass man mit Invertierungen arbeiten muss, das habe ich auch probiert. Wenn die LED an ist, dann soll ein Wert invertiert werden und so weiter. Ungelogen, ich habe in zwei Tagen bestimmt 30 verschiedene Versionen durch, nichts klappt.
Mal blinkt die LED die ganze Zeit an und aus, mal ist sie die ganze Zeit aus, mal die ganze Zeit an, nur das was ich will passiert nicht. Bei einem draufhalten = an, bei einem weiteren drauf halten = aus. Ich bin am Ende mit meinem Latein.
Setze Deinen Code bitte in Codetags (</>-Button oben links im Forumseditor oder [code] davor und [/code] dahinter ohne *).
Dann ist er auch auf mobilen Geräten besser lesbar.
Das kannst Du auch noch nachträglich ändern.
Code-Tags sind wichtig, hat Tommy schon geschrieben.
Soweit sieht das doch gut aus, aber warum zeigst du nicht, wie der Sketch zusammen gebaut aussieht.
Nur so können wir sehen, wo du den Fehler machst.
Ich habe mir da folgendes gedacht. Wenn der Chip, den ich habe, nicht der richtige Chip ist, dann soll er mir melden, dass die RFID_Kontrolle "false" gewesen ist. Diese Schleife macht er solange, bis RFID_Kontrolle "true" ist, deshalb prüfe ich das. Erst wenn der richtige Chip vorgehalten wird, dann erst geht er unten in die If-Abfragen, vorher nicht.
Die If-Abfragen ganz unten, da ist der Fehler drin. Ich habe recherchiert im Internet, habe was gefunden "toggle LED", dann irgendwie drei Variablen, eine für alten Status, eine für neuen Status und eine für toggle. Wie gesagt, sitzte seit zwei Tagen dran, habe 20 verschiedene Versionen durch und gar nichts klappt. Entweder geht die LED gar nicht an, oder sie geht an und nicht mehr aus, oder sie blinkt an und aus.
if (RFID_Kontrolle && Status == 1) {
digitalWrite (Test_LED, LOW);
Status = 0;
}
Sollte doch ziemlich klar sein, dass Status "nicht lange" auf 1 bleibt, oder?
Du willst vermutlich sowas wie:
if (RFID_Kontrolle) {
Status = ! Status; // Status umschalten
digitalWrite (Test_LED,Status);
RFID_Kontrolle = false; // ???
// so genau habe ich den Rest nicht angeschaut,
// wie soll das nur einmal bei neuer Karte erfolgen?
}
Ich hab es. Der Fehler war glaube ich das Erwähnte "zu schnell" für meine Augen. Ich habe mfrc522.PICC_HaltA(); hinzugefügt. Damit liest er die Karte nur einmal.
Ok, dann lag es an dem "else". Vielen lieben Dank für die schnellen Antworten, vielen Dank, dass es dieses Forum gibt, Danke an alle. Ihr werdet bestimmt noch ab und zu das Vergnügen mit mir haben. Ich habe mich auch gar nicht vorgestellt. Mache im Moment den staatlich geprüften Techniker im Elektrotechnik, bin nicht ganz Neuling, was Arduino angeht, aber ab und zu kriege ich etwas nicht hin.
noiasca:
nö, gelöst hast du es mit dem hinzugekommenen else.
Aber kann es auch damit zu tun haben, dass ich diesen Extrabefehl noch reingetan haben. Ohne diesen Befehl liesst er andauernt den Chip ohne Pause, aber ich bin kein Experte, wenn du (Sie) sagst (sagen), dass es an dem "else" liegt, dann nehme ich das so auf und achte in Zukunft darauf.
noiasca:
ein staatlich geprüfter Techniker hat in diesem Sketch aber noch vieles zu tun! Z.B.:
defines durch Konstante Variablen ersetzen
const machen was sich nicht ändern soll
richtige Variablengrößen verwenden
STRG-T zum formierten drücken
Ich bin seit einem Jahr dabei erst und Programmieren ist einer meiner Schwächen, ich hab da irgendwie Probleme mit. Wie kann ich die defines anders ausdrücken? Ich sehe halt überall im Internet, dass define oft gebraucht wird. Ist in meinem Code etwas was sich nicht ändern soll. Gibt es Variablengrößenfehler? Das wäre echt cool, wenn du den Code korrigieren würdest, ich weiss nicht, wo welcher von dir aufgeführte Punkt in meinem Code vor kommt.