Hilfe zu "Interrupt" Befehl

OP #2279279
Lesenswert?

Guten Tag!
Ich bin noch ein ziemlicher Anfänger in Sachen Microcontroller und 
schäme mich fast eine so banale Frage überhaupt zu stellen. Ich habe mir 
ein Arduino Board bestellt und habe nun dazu eine Frage.
Ich habe eine Tonabfolge programmiert und möchte nun diese per Tasten 
druck abbrechen. Da aber der Zustand des Buttons am Anfang meiner 
Hauptschleife abgefragt wird, muss ich praktisch den Taster die ganze 
Zeit gedrückt halten, bis meine Schleife von vorn beginnt, damit der 
Befehl "noTone" ausgeführt werden kann. Ich aber möchte, dass der 
"Sound" sofort beendet wird. Nun habe ich mich etwas informiert und bin 
auf den Begriff "Interrupt" gestoßen. Doch auch nach längerem 
recherchieren habe ich noch nicht die genaue Aufbauweise und wie ich 
diesen Befehl in meinen Sketch einbauen kann durchschaut. Daher wäre ich 
Euch sehr verbunden, wenn ihr mir etwas auf die Sprünge helfen könntet. 
Vielen Dank im voraus
Gruß Julian
OP #2279303
Lesenswert?

Vielen Dank für Deine Antwort!
Doch ist es nicht einfacher und schneller ohne die vielen If Schleifen?
Außerdem habe ich oben genannt,dass ich mich noch nicht so gut auskenne, 
daher wäre es sehr nett, wenn du mir sagen könntest was ein "Timertakt" 
ist und wie man ihn einsetzt :-)
Vielen Dank!
Gast #2279314
Lesenswert?

Mit dem Thema bist du schon mitten in der Programmierung für 
Fortgeschrittene.

Ein grundsätzlicher Weg ist:

1. Du benutzt einen Timer Interrupt, der alle x Millisekunden die Taste 
abfragt und das Ergebnis in einer Hilfsvariable speichert. Im Grunde 
funktioniert das wiehier im AVR-GCC-Tutorial im Timer-Aschnitt 
beschrieben.

2. Das regelmäßig ausgeführte Hauptprogramm (loop also), schaut in der 
Hilfsvariable nach und reagiert entsprechend. Die Hilfsvariable muss 
allerdings volatile gekennzeichnet sein. Warum steht im Artikel über die 
Interrupts.

Um das Thema Prellen/Entprellen bei Tasten zu entschärfen, kannst du die 
Routine in 1. entsprechend schreiben. Also z.B. ändert sich die 
Hilfsvariable erst, wenn x-mal hintereinander der gleiche Tastenwert 
anliegt. Näheres zum Entprellen steht im gleichnamigen Artikel.

Beim Aufsetzen eines Timers in der Arduino Umgebung muss man beachten, 
dass für eigene Zwecke nur TIMER1 und TIMER2 benutzbar sind, denn TIMER0 
ist der Systemtimer des Arduino. Näheres dazu in 
http://wiki.mediazone.co.nz/Arduino+Timer+Interrupts

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren