hi leute wisst ihr op und wie man in einem Arduinoprogramm springen kann???
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.
Ulrich F. schrieb: > Unter der Arduino IDE? In der IDE wird gar nicht gesprungen, weder in der Arduino noch in einer anderen ....
setjmp() und longjmp() - wenn der Code so richtig s******e sein soll.
Was willst du erreichen? Bzw. warum reichen dir die empfohlenen Mechanismen aus der Strukturierten Programmierung nicht aus?
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....
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?
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?
Sieht eher so aus, als müsstest du dich da in Timer und Interrups einarbeiten. http://playground.arduino.cc/Deutsch/HalloWeltMitInterruptUndTimerlibrary
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.
.... > 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.
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 :)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.