Arduino Loop unterbrechen

Gast #5358423
Lesenswert?
• ▲
▼
Hallo,
ich arbeite mit dem Arduino Uno und der Arduino IDE.
Ich möchte ganz einfach unter bestimmten Umständen (zb wenn ich einen 
Mausklick mache) den Loop unterbrechen und eine bestimmte Handlung 
einsetzen lassen. Das Ganze soll erst wieder beendet werden, wenn ich 
erneut einen Mausklick mache, dann soll der Loop wieder normal 
durchlaufen werden.
Ich denke die einfachste Variante in dem Fall wäre ein normaler 
Interrupt, liege ich da richtig?
Es wäre echt super wenn ihr mir nur mit Pseudocode ein bisserl auf die 
Sprünge helfen könntet, wie das Ganze genau ausschauen müsste.
Danke schonmal für eure Hilfe!
Gast #5358531
Lesenswert?
• ▲
▼
Warum unterbrechen? Die loop läuft doch eh dauernd durch, also kann man 
einfach beim nächsten Durchlauf auf den Mausklick reagieren. Bei 
"normalen" Schleifendurchlaufszeiten fällt die Verzögerung nicht auf, 
der Mensch ist langsamer...

also
1
void loop() {
2

3
 ... irgendwas anderes ...
4
 ... nochwas anderes ...
5
  if (mausklick_wartet_auf_reaktion) {
6
    ... reagiere auf mausklick ...
7
  }
8
 ... und noch was anderes, z.B. tastendruck bearbeiten ...
9
}

man muss sich halt "delay(xxx)" in der loop verkneifen, und Wartezeiten 
durch millis() realisieren.
#5358559
Lesenswert?
• ▲
▼
Hallo,

Steven schrieb:
> Ich möchte ganz einfach unter bestimmten Umständen (zb wenn ich einen
> Mausklick mache) den Loop unterbrechen und eine bestimmte Handlung
> einsetzen lassen. Das Ganze soll erst wieder beendet werden, wenn ich
> erneut einen Mausklick mache, dann soll der Loop wieder normal
> durchlaufen werden.

mich verwirrt etwas:
Du hast eine Maus am Arduino Uno oder wo willst Du womit klicken?

Gruß aus Berlin
Michael
Gast #5358682
Lesenswert?
• ▲
▼
Steven schrieb:
> Ich möchte ganz einfach unter bestimmten Umständen (zb wenn ich einen
> Mausklick mache) den Loop unterbrechen und eine bestimmte Handlung
> einsetzen lassen.
> ...
> Ich denke die einfachste Variante in dem Fall wäre ein normaler
> Interrupt, liege ich da richtig?

Wenn du "einsetzen" gegen "zwischendurch ausführen" tauscht, könntest du 
Recht haben.
Gast #5358707
Lesenswert?
• ▲
▼
Walter K. schrieb:
> Jetzt ahne ich, was mit dem in diesem Forum immer wieder mal
> auftauchenden  Begriff: 'Generation Arduino' gemeint ist.

Genau so ist es ;).

Zum Thema: Mausklick erzeugt ein Interrupt und toggelt ein _Bool. Wenn 
dieses _Bool gesetzt ist (weil es z.B. "bWarten") heißt, dann macht die 
main loop eben nix.

Und das alles natürlich in C ohne Arduino IDE.

Pseudeocode:
1
volatile _Bool bWait = false;
2

3
ISR(){
4
  bWait = not bWait;
5
}
6

7
loop(){
8
  if(bWait == true){
9
    //mache nix
10
  }
11
  else{
12
    //normaler programmfluss
13
  }
14
}

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.