Go Down

Topic: Zwei LEDs unabhängig voneinander steuern (Read 784 times) previous topic - next topic

Clemi

Hallo zusammen,

ich habe heute meinen Arduino Uno bekommen und bin schon den ganzen Nachmittag am Experimentieren. Für den Modellbau wollte ich nun einen einfachen Effekt programmieren, jedoch bekomme ich es nicht hin.
Ich möchte zwei LEDs betreiben, welche jeweils blinken sollen. Die erste LED ist 200ms an und 200ms aus. Die zweite LED ist 300ms an und 300ms aus. Sodass die erste LED etwas schneller blinkt als die zweite.
Bisher habe ich es nur geschafft, die LEDs nacheinander blinken zu lassen, also LED1 an -> LED1 aus -> LED2 an -> LED2 aus etc. Aber noch nicht, dass sie unabhängig voneinander blinken.

Kann mir da jemand weiter helfen?


Viele Grüße, Clemens

uwefed

Du darfst micht delay() verwenden sondern die Zeit durch millis() bestimmen.
Lies mal: http://playground.arduino.cc/Code/AvoidDelay
Grüße Uwe

Clemi

Hallo,
danke für die schnelle Antwort. Ich habe es mir alles durchgelesen, aber noch nicht so wirklich verstanden, da die Beispiele alle mit Buttons sind.

Ich schreibe hier mal, was ich nach "void loop() {" habe:

digitalWrite(led1, HIGH);
millis(400);
digitalWrite(led1, LOW);
digitalWrite(led2, HIGH);
millis(600);
digitalWrite(led2, LOW);
}

Wenn ich auf 'Überprüfen' klicke, markiert er mir immer die "millis(400);" und sag mir "at this point in file". Was bedeutet das? Ist mein Ansatz so schon richtig?

Tetris

#3
Jan 24, 2013, 10:19 pm Last Edit: Jan 24, 2013, 11:08 pm by Tetris Reason: 1

Hallo,
danke für die schnelle Antwort. Ich habe es mir alles durchgelesen, aber noch nicht so wirklich verstanden, da die Beispiele alle mit Buttons sind.

Ich schreibe hier mal, was ich nach "void loop() {" habe:

digitalWrite(led1, HIGH);
millis(400);
digitalWrite(led1, LOW);
digitalWrite(led2, HIGH);
millis(600);
digitalWrite(led2, LOW);
}

Wenn ich auf 'Überprüfen' klicke, markiert er mir immer die "millis(400);" und sag mir "at this point in file". Was bedeutet das? Ist mein Ansatz so schon richtig?


Guten Abend Clemi,

millis() ist eine Funktion und gibt einen Wert zurück. Am besten ist, du deklarierst eine Variable. Diese nimmt die Zeit auf die millis() zurückgibt. Mit dieser Zeit und etwas Rechnerei kannst du dann deine LEDs leuchten lassen.
Hier ist ein Link zu der Beschreibung von millis():

http://arduino.cc/en/Reference/Millis

Beispiel: unsigned long zeit;
           zeit = millis();

Dort ist nun deine Zeit seit Programmstart abgelegt.

Grüße

michael_x

#4
Jan 24, 2013, 10:24 pm Last Edit: Jan 24, 2013, 10:29 pm by michael_x Reason: 1
Das berühmte "Blink without delay" ( http://arduino.cc/en/Tutorial/BlinkWithoutDelay ) steuert zwar auch nur eine led, aber dafür verwendet es schonmal millis() richtig.

Der Schritt zu zwei Leds ist evtl. schwierig, bis du siehst warum es einfach ist, aber du hast mehr Spaß, wenn du es selbst rauskriegst.

P.S. tetris meint natürlich
zeit = millis();
;)

uwefed


Clemi

Vielen Dank, aber so richtig dahinter gestiegen bin ich immer noch nicht. Wahrscheinlich ist es schon zu spät und mich muss mich morgen noch mal dran setzen.
Ich weiß nicht wo ich meine "digitalWrite(led1...." einbringen soll.

Wäre es möglich, dass mir jemand mal ein ganzes Skript schreiben kann, damit ich sehe, was wie wo eingebracht wird? Da kann ich besser dahinter steigen.
Also eine LED an Port 13, eine an Port 12.
LED 1 soll 200ms an sein und 200ms aus sein, LED 2 soll 300ms an sein und 300ms aus sein.

Das wäre großartig, denn ich habe heute erst angefangen und bin noch nicht so weit.


EDIT: Vielen Dank an UWE, das scheint sehr gut zu sein. Das arbeite ich jetzt mal durch.


Viele Grüße, Clemens

Clemi

Danke, ich habe es geschafft. :)

Der Link von Uwe war wirklich hilfreich, nach ein wenig Probieren klappt es jetzt auch mit der zweiten LED.

Tetris


P.S. tetris meint natürlich
zeit = millis();
;)


Ups: Denglisch! Habe den Fehler korrigiert. Danke dir michael_x

Go Up