Forum: Mikrocontroller und Digitale Elektronik Arduino Loop unterbrechen


von Steven (Gast)


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!

: Verschoben durch User
von Frank L. (hermastersvoice)


Lesenswert?

selbst googeln wäre unter deiner Würde?

von F. F. (foldi)


Lesenswert?

https://www.arduino.cc/en/Guide/HomePage

... und noch ein Stichwort: ISR.

Später dann, aber besser gleichzeitig, 
https://www.mikrocontroller.net/articles/AVR-GCC-Tutorial.

: Bearbeitet durch User
von Schwarzseher (Gast)


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.

von Walter K. (Gast)


Lesenswert?

Jetzt ahne ich, was mit dem in diesem Forum immer wieder mal 
auftauchenden  Begriff: 'Generation Arduino' gemeint ist.

von Michael U. (amiga)


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

von F. F. (foldi)


Lesenswert?

Weisse Bescheid, Michael?

So wie immer. Der TO will wahrscheinlich die "Weltsteuerungsmaschine" 
bauen und bestimmtes, automatisiertes Verhalten per Mausklick vom PC aus 
beeinflussen.
Aber das sagt er uns viiiíel später.

von Wolfgang (Gast)


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.

von Curby23523 N. (Gast)


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
}

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
Noch kein Account? Hier anmelden.