Forum: Mikrocontroller und Digitale Elektronik im Arduinoprogramm springen


von hilfe (Gast)


Lesenswert?

hi leute
wisst ihr op und wie man in einem Arduinoprogramm springen kann???

von Ulrich F. (Gast)


Lesenswert?

1. Mit goto !
2. Oder: http://www.avr-asm-tutorial.net/avr_de/beginner/sprung.html
Wobei 1 meist eine extrem dumme Idee ist.
Und 2 wohl unabdingbar, wenn man mit dem Assembler arbeitet.

Unter der Arduino IDE?
Für dich vermutlich beides falsch.
In C/C++ lässt sich alles sauber abhandeln ohne rumgespringe.

von Mitlesa (Gast)


Lesenswert?

Ulrich F. schrieb:
> Unter der Arduino IDE?

In der IDE wird gar nicht gesprungen, weder in der Arduino
noch in einer anderen ....

von Jay (Gast)


Lesenswert?

setjmp() und longjmp() - wenn der Code so richtig s******e sein soll.

von Noch einer (Gast)


Lesenswert?

Was willst du erreichen? Bzw. warum reichen dir die empfohlenen 
Mechanismen aus der Strukturierten Programmierung nicht aus?

von Jonas G. (jstjst)


Lesenswert?


von Falk B. (falk)


Lesenswert?


von hilfe (Gast)


Lesenswert?

Ich möchmöchte einen  timer bauen den ich in jeder Sekunde zurücksetzen 
kann aber immerhin wenn ich das Schreibe ist das wie eine periode....

von Cyblord -. (cyblord)


Lesenswert?

hilfe schrieb:
> Ich möchmöchte einen  timer bauen den ich in jeder Sekunde zurücksetzen
> kann aber immerhin wenn ich das Schreibe ist das wie eine periode....

Hasts mit Binden oder o.b. versucht?

von Max H. (hartl192)


Lesenswert?

hilfe schrieb:
> Ich möchmöchte einen  timer bauen den ich in jeder Sekunde
> zurücksetzen
> kann aber immerhin wenn ich das Schreibe ist das wie eine periode....
Und wozu denkst du dabei das goto zu brauchen?

von Maik S. (yellowbird)


Lesenswert?

Vermutlich um in und aus eine/r Schleife zu springen.

von Jonas G. (jstjst)


Lesenswert?

Um aus einer Schleife zu springen verwendet man break
http://arduino.cc/en/Reference/Break

von Noch einer (Gast)


Lesenswert?

Sieht eher so aus, als müsstest du dich da in Timer und Interrups 
einarbeiten.
http://playground.arduino.cc/Deutsch/HalloWeltMitInterruptUndTimerlibrary

von Cyblord -. (cyblord)


Lesenswert?

Jonas G. schrieb:
> Um aus einer Schleife zu springen verwendet man break

Aber doch nicht im Arduino-Zoo. Da kämmt man sich auch mit dem Hammer.

von Karl H. (kbuchegg)


Lesenswert?

....
> Vermutlich um in und aus eine/r Schleife zu springen.
....
> Um aus einer Schleife zu springen verwendet man break

Alles richtig und sehr wahrscheinlich doch falsch.

Bitte haltet immer im Hinterkopf, dass derartige Fragesteller Anfänger 
sind. Die Fragen schon mal danach, wo sie in Moskau links abbiegen 
müssen und ob sie ein Visum brauchen, wenn sie von Nürnberg nach 
Frankfurt fahren.

Soll heissen: orientiert euch nicht nach dem was er gefragt hat, sondern 
an dem was er in seiner 'üblicherweise' mickrigen Projektbeschreibung 
von sich gibt. Denn das wonach er konkret gefragt hat, ist eher selten 
der Weg, wie man solche Dinge löst.

Arduinotypisch funktioniert der Umgang mit 'Timer' Bausteinen (das sind 
nicht die Hardware Timer) so, dass man die millis() Funktion zu Hilfe 
nimmt. Konzeptionell ist es eine Uhr und mittels Zeitvergleich stellt 
man fest, wie lang die Zeitspanne war, seit man das letzte mal eine 
Aktion gemacht hat. Ist die Zeitspanne lang genug bzw. überschritten, 
dann wird die entsprechende Aktion durchgeführt.
1
unsigned long lastDone;
2
3
void loop()
4
{
5
  unsigned long now;
6
7
  now = millis();
8
  if( ( now - lastDone ) > Zeitspanne ) {
9
    lastDone = now;
10
11
    .... mache, was es jede Zeitspanne zu tun gibt
12
  }
13
}

um diese Zeitspanne erneut laufen bzw. erneut bei 0 beginnen zu lassen, 
genügt es lastDone auf den Wert von now zu setzen (auf den aktuellen 
Wert von millis()).

Zum Beispiel so, dass dieses Zurücksetzen solange macht, solange ein 
Taster gedrückt ist. Erst mit dem loslassen des Tasters unterbleibt das 
Zurücksetzen und die (beispielweise) 10 Sekunden beginnen zu laufen nach 
deren Ablauf dann irgendwas passiert.
1
unsigned long lastDone;
2
3
void loop()
4
{
5
  unsigned long now;
6
7
  now = millis();
8
  if( ( now - lastDone ) > 10000 ) {
9
    lastDone = now;
10
11
    .... mache, was es alle 10 Sekunden zu tun gibt
12
  }
13
14
  if( digitalRead( Taster ) == LOW )
15
    lastDone = now;    // sorge dafür, dass die 10 Sekunden erst ab jetzt zu
16
                       // laufen beginnen.
17
  }
18
}

Oder auch, wenn es sich um eine Einmalaktion handelt, mit beispielweise 
einem Flag, ob eine Aktion erfolgen soll
1
unsigned long lastDone;
2
unigned char doAction = false;
3
4
void loop()
5
{
6
  unsigned long now;
7
8
  now = millis();
9
  if( doAction && ( now - lastDone ) > 10000 ) {
10
    doAction = false;
11
    lastDone = now;
12
13
    .... mache, was es 10 Sekunden nach loslassen der Taste zu tun gibt
14
  }
15
16
  if( digitalRead( Taster ) == LOW ) {
17
    doAction = true;
18
    lastDone = now;    // sorge dafür, dass die 10 Sekunden erst ab jetzt zu
19
                       // laufen beginnen.
20
  }
21
}


Schleife gibt es da in dem von ihm zu schreibenden Code genau gar keine. 
Daher ist auch ein break irrelevant.
Oder um beim Beispiel zu bleiben: Eine gute Beratung geht darauf ein, 
dass man nicht von Nürnberg nach Frankfurt über Moskau fährt und sich 
daher die Frage nach dem Visum gar nicht stellt. Eine gute Beratung 
deckt auf, dass der übliche Weg darin besteht, die A3 zu nehmen und gut 
ists. Eine gute Beratung berücksichtigt, dass der Fragesteller komplett 
auf dem Holzweg ist und lenkt ihn erst mal in die richtige Richtung.

von Wolf W. (pansensuppe)


Lesenswert?

Mensch Karl Heinz, du gibst wieder alles, Voller Respekt!

Da der TO aber sehr, sehr sparsam ist mit Informationen, würde ich 
spontan einfach mal vermuten, er sucht so etwas wie ein trivialer 
Funktionsaufruf.
Da wird ja auch 'gesprungen', hin und sogar wieder zurück :)

von Jonas G. (jstjst)


Lesenswert?

Da kann ich mich nur anschließen. Sowas liest man viel zu selten hier.

Jst

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.