Hi Ich möchte mit einem Arduino die Zeit stoppen, weiß aber ehrlich gesagt nicht ob das so funktionieren kann. Code ist folgender: void setup(){ Serial.begin(9600); //serial output für das Servo Board attachInterrupt(0, irq_rc_r, RISING); attachInterrupt(0, irq_rc_f, FALLING); } volatile boolean hallo; void loop(){ Serial.print(hallo); delay(10); } void irq_rc_f(){ hallo = true;} void irq_rc_r(){ hallo = false;} Die Ausgabe ist 01111111111111111, das Signal am Pin wackelt aber, das habe ich getestet. Meine These geht in die Richtung: das geht so nicht, du musst CHANGE verwenden und in den Handler eine if(digitalRead(2)) reinschreiben. Geht es evtl. doch irgendwie? Danke schon mal Gruss
Interrupt's werden in der Arduino "Programmsprache" ausgesprochen stiefmütterlich bis garnicht behandelt. Ich würde die Finger davon lassen und das Arduino Board in C, BASCOM oder LunaAVR programmieren. Dann stehen Dir alle Interrupt Möglichkeiten offen.
Ebenso sind die Timer Möglichkeiten bei der Arduino Software rudimentär und kaum zu gebrauchen (Timer mit Interrupt).
"busy waiting" und loops zählen funktioniert recht gut. Wenns genau sein muss (und sonst nicht stört) kann man auch während der Mess-Schleife Interrupts deaktivieren.
Hallo Dieter, der 328P kann nur eine Signalform am INT0 Pin auswerten, entweder steigende, fallende,wechselnde Flanke oder LOW Pegel. Siehe dir mal das Interrupt Controll Register im Datenblatt an. Also wäre deine Vermutung wahrscheinlich richtig mit CHANGE zu arbeiten. Deine Ausgabe bleibt auf HIGH weil du mit attachInterrupt(0, irq_rc_f, FALLING); die Anweisung attachInterrupt(0, irq_rc_r, RISING); überschreibst. Es wird nur die fallende Flanke ausgewertet und somit bleibt hallo auf TRUE; Gruß Karl-Heinz
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.