arduino uno board mehrere ausgänge gleichzeitig

OP #3628696
Lesenswert?

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.
Gast #3628703
Lesenswert?

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?
#3628722
Lesenswert?

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. :-)
Gast #3628755
Lesenswert?

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.
#3628764
Lesenswert?

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.
Gast #3628795
Lesenswert?

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 :-)
#3628810
Lesenswert?

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.
#3628895
Lesenswert?

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
}
Angehängte Dateien:
OP #3629062
Lesenswert?

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?

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