Hallo Leute, Ich habe mir für mein Projekt ein arduino uno board geholt. Ich muss 8 leds als lauflicht, 1 led als schwerlich, 1 led Als Blitzlicht realisieren und das alles gleichzeitig. Jetzt Meine Frage ist das überhaupt möglich und wenn ja wie weil alles getrennt funktioniert aber nicht zusammen, ich weiß auch daß das mit delay() nicht klappt. Hat Jemand irgendwie eine Idee, danke im voraus.
Meine Idee ist, in das Tutorial zu schauben, sihe Links links oben. Z.B. http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Interruptgesteuerter_Programmablauf
Der Arduino Uno hat genug Digitalausgänge. Evtl muss man einen Treiber dazwischen schalten, falls die LED mehr Strom zieht. Programmieren sollte man schon können. Dann geht auch alles gleichzeitig. Timer-Interrupts sind möglich. Darauf aufbauend eine (mehrere) State Machines. Damit sollte es zu schaffen sein. Die Frage ist mehr, wie z.B. das Blitzlicht gesteuert wird. Gibt es da noch Inputs / Ereignisse von aussen?
Die Frage ist ja schon mal, wie gleichzeitig soll es sein? Wenn du in Arduino programmierst, da kann man sicher auch einen ganzen Port ansprechen, steht aber in den Büchern die bei so einem Kit dabei sind, nicht dabei. Du kannst die Teile auch in C programmieren und sogar die IDE. Wenn du anfängst, dann doch gleich in C. Dazu kann ich dir ein wirklich gutes Buch empfehlen: AVR - Mikrocontroller-Kochbuch, von Franzis. Dazu kaufst du dir noch von Helmut Erlenkötter das " C Programmieren von Anfang an" und du bist gut gerüstet. Benutze ruhig die Arduino IDE, denn schon nach sehr kurzer Zeit wirst du sowieso das Atmel Studio benutzen und deine Hardware selbst bsuen. Wenn ich dich nicht überzeugen kann, dann frag mal meine hochgeschätzen Freund "cyblord", der bekehrt dich ganz sicher. :-)
F. Fo schrieb: > Wenn ich dich nicht überzeugen kann, dann frag mal meine hochgeschätzen > Freund "cyblord", der bekehrt dich ganz sicher. :-) Da seine Vorschlaege genauso wenig zur Loesung beitragen, wie deine, wird das wohl nichts werden. Das "Problem" laesst sich ohne Timer mit 3 klitzekleinen Statemachines loesen und ueber die Systemzeit getaktet werden. Einfach mal die 3 Anforderungen einzeln implementieren, danach nachdenken, wie man die zusammen bekommen koennte. Aber dafuer haette man wahrscheinlich im Unterricht aufpassen muessen. Aber hier hat es genuegend Hausaufgabenhelfer, die dem OT bestimmt die Arbeit abnehmen.
Christian H. schrieb: > ich weiß auch daß das mit delay() nicht klappt. Kann man so generell nicht sagen. Was nicht geht ist, daß jede Task ihre eigenen Delays macht. Man kann aber einfach in der Mainloop ein 10ms Delay machen und danach alle zeitgesteuerten Tasks aufrufen. Und diese zählen dann einfach in 10ms Schritten einen Zähler und machen ihr Ding, wenn der Zähler den gewünschten Wert erreicht hat, also die gewünschte Zeit verstrichen ist.
Christian H. schrieb: > Ich muss 8 leds als lauflicht, 1 led als schwerlich, 1 led > Als Blitzlicht realisieren und das alles gleichzeitig. Wer sagt das? Dein Lehrer? Nix für ungut, aber Hausaufgaben werden hier nicht gelöst.... Hier im Board gibt es genügend Tutorials. Also, selbst ist der Mann :-)
Quack schrieb: > > Da seine Vorschlaege genauso wenig zur Loesung beitragen, wie deine, > wird das wohl nichts werden. > > Das "Problem" laesst sich ohne Timer mit 3 klitzekleinen Statemachines > loesen und ueber die Systemzeit getaktet werden. > Aber dafuer haette man wahrscheinlich im Unterricht aufpassen muessen. > Aber hier hat es genuegend Hausaufgabenhelfer, die dem OT bestimmt die > Arbeit abnehmen. Bei dem "Problem" hilft es sicher nicht und hätte er schon ein Arduino Buch durchgearbeitet, würde er dieses "Problem" hier jetzt nicht posten, denn das steht es schon nach wenigen Seiten drin, wie man so was macht. Genau weil ich daraus schließe, dass er noch ganz am Anfang steht, wollte ich ihm einen besseren Weg aufzeigen. Er kann natürlich auch irgend ein fertiges Arduino Script nehmen und sich zurecht biegen. Doch aus meiner Sicht führt das in eine Sackgasse.
Hier mal das Prinzip für parallele zeitgesteuerte Tasks:
1 | #define F_CPU 1e6 // 1MHz
|
2 | #include <util/delay.h> |
3 | #include "sbit.h" |
4 | |
5 | #define LED0 PORT_B0
|
6 | #define LED0_oe DDR_B0
|
7 | #define LED1 PORT_B1
|
8 | #define LED1_oe DDR_B1
|
9 | |
10 | void statemachine0() |
11 | {
|
12 | static int state = 0; |
13 | |
14 | switch( ++state ){ |
15 | case 150: LED0 = 1; |
16 | break; |
17 | case 300: LED0 = 0; |
18 | state = 0; |
19 | break; |
20 | }
|
21 | }
|
22 | |
23 | void statemachine1() |
24 | {
|
25 | static int state = 0; |
26 | |
27 | switch( ++state ){ |
28 | case 400: LED1 = 1; |
29 | break; |
30 | case 800: LED1 = 0; |
31 | state = 0; |
32 | break; |
33 | }
|
34 | }
|
35 | |
36 | int main() |
37 | {
|
38 | LED0_oe = 1; // output |
39 | LED1_oe = 1; // output |
40 | for(;;){ |
41 | _delay_us( 1000 ); // 1ms time base |
42 | |
43 | statemachine0(); |
44 | statemachine1(); |
45 | }
|
46 | }
|
Die C't hacks hatte mal so einen 'Multithread fürs Arduino'-Artikel: https://www.heise.de/artikel-archiv/ch/2013/04/152_Multitasking-mit-Arduino Ich hoffe das hilft weiter…
Erst mal vielen Dank für die schnelle Hilfe, Ja ich bin erst am Anfang mit der Programmierung, also lauflicht analoge ausgänge und so das bekomme ich schon ganz gut hin. Ich werde mir wohl auch noch das ein oder andere Buch noch zu legen, danke für den Tipp. Danke auch für die links und Beispiel Code. Noch so ne kleine Idee hätte ich da. Kann ich alles in verschiedenen Funktionen schreiben und die quasi gleichzeitig aufrufen, würde. Das funktionieren?
@ Christian H. (chris_hei) >ich da. Kann ich alles in verschiedenen Funktionen schreiben und die >quasi gleichzeitig aufrufen, würde. Das funktionieren? Lies den Artikel Multitasking, dort steht (fast) alles drin.
Ok dann erstmal vielen Dank, werde ich mir heute abend mal anschauen.
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.