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

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