Digital Out

LED im GND und dem Digital 13

Digital Out digitalOut(); ist eine Funktion, bei der ein digitaler Kanal des Arduino-Boards, das als Output deklariert ist, ein oder ausgeschaltet werden kann. Ein- oder Aus ist in diesem Fall eigentlich nicht ganz korrekt, denn der Kanal kann je nach Anweisung entweder ein 5V+ oder ein GND (Minus-Pol) sein.

Für das erste Beispiel benötigt man ein Arduino-Board und eine LED. Die LED wird mit dem kürzeren Beinchen (Kathode) in den GND-Pin (also den Minus-Pol), mit dem längeren Beinchen (Anode) in den Pin Digital 13 gesteckt.

In der Arduino-Software öffnet man das Beispiel Digital Blink (File > Examples > Digital > Blink).

Entfernt man die Kommentare, also alles, was in /* */ geschrieben ist, bleibt:

In der ersten Zeile wird eine ganzzahlige Variable (int) mit dem Namen ledPin angelegt und ihr wird der Wert 13 zugewiesen. Pin bedeutet in diesem Fall Anschluss oder Kanal. Der Befehl pinMode(ledPin, OUTPUT) setzt den digitalen Kanal 13 auf dem Arduino-Board als Output.

Er setzt sich aus dem Methoden-Aufruf pinMode(); und der Übergabe von zwei Parametern zusammen. Parameter 1 ist die Nummer des digitalen Kanals – in diesem Fall ledPin, Parameter 2 seine Funktion OUTPUT.

In der loop-Methode stehen vier Befehle:

Dieser Befehl schaltet den ledPin auf 5V+ (HIGH);

Dieser Befehl hält das Programm für 1000 Millisekunden an (also 1 Sekunde).

Dieser Befehl schaltet den ledPin auf GND (LOW);

Dieser Befehl hält das Programm noch einmal für 1000 Millisekunden an.

Um das Programm auf das Arduino-Board zu laden klickt man auf das Upload Symbol und der Upload beginnt. Nun sollte die LED am Pin 13 im Takt von 2 Sekunden blinken.

31 Comments

  1. Atalanttore

    Haben LEDs die keinen Vorwiderstand benötigen diesen schon eingebaut oder brauchen sie wegen einer anderen Bauart generell keinen Vorwiderstand?

  2. Knut

    LEDs benötigen immer einen Vorwiderstand, es gibt aber tatsächlich welche mit einem eingebauten Widerstand. Meistens sind das LEDs für den direkten Betrieb an 12V.

  3. In diesem Fall ist im Arduino-Board ein Vorwiderstand am Digital Out 13 integriert, weshalb hier eine LED direkt verbunden werden kann.

  4. Ed

    Stefan, das trifft leider für diese rote LED die in der Anschlußleiste steckt nicht zu. Diese Darstellung ist ohne Zweifel fehlerhaft. Für die kleine gelbe SMD-LED(L)die ebenfalls an diesem Pin liegt trifft das allerdings zu. Man benötigt die rote LED also überhaupt nicht! (Abgesehen davon ist nach dieser Darstellung die rote LED auch noch mit einer Wahrscheinlichkeit von über 90% falsch gepolt.
    Der „Kelch“ ist überwiegend die Kathode)

  5. @Ed: Ja, eigentlich benötigen wir die LED nicht. Andererseits ist es doch ein super Erlebnis, die erste eigene LED leuchten zu lassen. :)

  6. Jakob

    Hallo!
    Da ich beim programmieren meines Boards (Arduino UNO) wieder mal nichts
    anstendiges selbst programmieren kann bitte ich euch um hilfe

    Aufgabe:
    Solle eigendlich easy sein …
    Ich will alles Ausgänge auf HIGH (5V) schalten ohne jeden Ausgang
    einzeln mit pinMode ( 2, OUTPUT); zu deklarieren
    das müsste mit einen Befehl auch gehen oder ?
    lg danke ;-)

  7. Stefan

    Ich kenn die ATmega sachen mit der bezeichnung PB0-7 usw. So kann man ja dort die Pins schalten. Wie aber wie weiß Ich bei welchem Board z.B. PB5 = 13 im Arduino PRG entspricht ?

  8. @Stefan: Darüber brauchst du dir keine Sorgen machen, da du ja zum programmieren die Arduino-Umgebung benutzt. Alles weitere findest du aber im Datenblatt des Arduino, bzw. in den Schematics. Von Board zu Board ist die Beschaltung übrigens gleich. Liebe Grüße :)

  9. Marvin

    Danke!
    Mit den Erklärungen zu +5V und GND / HIGH und LOW habt ihr mir echt geholfen, da ich nie wusste, wie denn der Stromkreis jetzt zu legen ist.

  10. Lothar

    Hallo Stefan, danke für diese Tutorial.
    Ich stehe ganz am Anfang und möchte gerne die Beispiele in Fritzing mit der Arduino Software ausprobieren. (Habe noch kein Starterkit und wollte erst einmal virtuell arbeiten). Was muß ich tun damit ich zum Beispiel den Blink Sketch verbinden kann mit dem Arduiono in Fritzing?
    Danke im Voraus
    Lothar

  11. Hi Lothar,

    ah, das bist Du leider in die Falle getappt. Fritzing ist keine Simulationssoftware. D.h. man kann das Fritzing-Arduino nicht programmieren. Fritzing ist für die Dokumentation und das Layouten von Leiterplatten. Das Feature ist zwar auf unserer Liste, aber relativ weit unten :-/

    In der Wirklichkeit macht das aber auch viel mehr Spaß.

    Liebe Grüße

    Stefan“

  12. Daniel Maiwald

    Hallo Stefan, ich habe eine kurze fragen, hab auf die schnelle nichts gefunden. Kann ich einen digitalen Pin am Arduino komplett ausschalten? Also mit einem Pin durch verpolung zwei Aktoren schalten?
    / Aus / + / – / ??? (Nur zur Info, ich bin blutiger Anfänger ;) )

    Vielen Dank und klasse Homepage! ;)

  13. Antonio

    Hallo guten tag,
    wenn ich 3 led in verschidene blinkfrequent
    zb. led1 an pin 10 1000ms, led 2 an pin 9 500ms
    und led 3 an pin 8 mit 200ms,
    wie mache ich es.
    danke in voraus.
    Antonio

  14. René

    Hallo Stefan,
    das hört sich alles so einfach an. Mein Leonardo blinkt beim
    Einschalten vor sich hin allerdings beim Programmieren anderer Blinkfrequenzen stellt er sich stur obwohl es keine
    Fehlermeldung gab.
    Das geht in meinen 64 Jährigen Schädel nicht rein.
    Gruß,
    René

  15. Torben

    Hallo Antonio,
    Ich habe mal zur Übung diesen Sketch, den du oben beschrieben hast geschrieben. Viel Spaß damit,
    Torben

    Sketch:

    /*
    Skript als Übung und zur
    Hilfe für Antonio auf der
    Website http://www.arduino-tutorial.de/2010/06/digital-out/
    */

    int led1 = 10;
    int led2 = 9;
    int led3 = 8;

    void setup() {
    pinMode(led1, OUTPUT);
    pinMode(led2, OUTPUT);
    pinMode(led3, OUTPUT);
    }

    void loop() {
    digitalWrite(led1, HIGH); //1 an
    digitalWrite(led2, HIGH); //2 an
    digitalWrite(led3, HIGH); //3 an
    delay(200);
    digitalWrite(led3, LOW); //3 aus
    delay(200);
    digitalWrite(led3, HIGH); //3 an
    delay(100);
    digitalWrite(led2, LOW); //2 aus
    delay(100);
    digitalWrite(led3, LOW); //3 aus
    delay(200);
    digitalWrite(led3, HIGH); //3 an
    delay(200);
    digitalWrite(led1, LOW); //1 aus
    digitalWrite(led2, HIGH); //2 an
    digitalWrite(led3, LOW); //3 aus
    delay(200);
    digitalWrite(led3, HIGH); //3 an
    delay(200);
    digitalWrite(led3, LOW); //3 aus
    delay(100);
    digitalWrite(led2, LOW); //2 aus
    delay(100);
    digitalWrite(led3, HIGH); //3 an
    delay(200);
    digitalWrite(led3, LOW); //3 aus
    delay(200);
    }

  16. Joachim Wilms

    Hi!
    Das Beispiel hier hat mir als Anfänger echt geholfen. Wenn ich statt blinken ein blitzen möchte, wie kriege ich das hin? Drehe ich die „delay on“-zeit runter, wirkt es nicht wie ein blitzen…
    Stufe 2:die gleiche LED soll mal heller, mal dunkler flashen. Wie geht das denn?

    Hintergrund: ich möchte ein Strobe-Light für ein Modelflugzeug bauen. Das blitzt im original: low, kurz pause, high, lange pause, low, kurz pause, dann wieder von vorne.

  17. Antonio

    Hallo Joachim,
    danke für deine Mail nur ich verstehe nicht ganz was du mir sagen möchtest, ich bin sehr neu in der Materien ich habe mehr mit Hardware zu tun und nicht mit Programmiere habe schnell verstanden das ohne Programm keine Faszination, ich bin für jede Befehl dankbar also wenn du welche hast bitte er da mit danke dir.
    Antonio

  18. Torben

    Hallo Antonio
    Ich bin selber Anfänger und habe nur kann dir leider nicht weiterhelfen. Beim Vorherigen konnte ich dir nur helfen weil ich diesen Artikel verstanden habe. Gucke dir am besten mal auf dieser Seite den Artikel „Analog Out“ an (http://www.arduino-tutorial.de/2010/06/analog-out/). Vielleicht hilft es dir ja.
    Viele Grüße,
    Torben

  19. Ralf

    Ich hätte eine Frage:
    ich möchte mit dem befehl „digitalWrite“
    ein ULN2003 ansteuern.

    Der Arduino wird über ein Multiswitch der Fernsteuerung mit Minus angesprochen.

    Kann ich zum auslesen des Eingangspins einen digitalen Pin verwenden? Wichtig ist dass der Ausgangspin auch wieder Minus schaltet, da die LEDs ein gemeinsamesPlus haben.

    Vielen Dank

    Gruß Ralf

  20. Janek

    Hallo Stefan, ich habe noch dienen Anweisungen gehandelt und bekomme folgenden fehler

    exit status 1
    a function-definition is not allowed here before ‚{‚ token

    mein script sieht so aus:
    void setup() {

    int ledPin = 13;

    void setup() {
    pinMode(ledPin, OUTPUT);

    }

    void loop()
    {
    digitalWrite(ledPin, HIGH);
    delay(1000);
    digitalWrite(ledPin, LOW);
    delay(1000);

    }

  21. Daniel

    Hier hatte mal jemand etwas wegen „LED’s blitzen lassen“ gefragt. Ich bin eher programmierer und habe daher einen Code zusammengestellt, welcher meiner Meinung nach recht effektiv ist. Man kann beliebig viele LED’s oder Bauteile mit solchem Code steuern, da es keine delay’s gibt, welche den Arduino einfrieren. Es wird nur die Zeit gemerkt, zu welcher das nächste mal die entsprechende LED umgeschaltet werden soll.

    const int PIN_LED_FLASH = 7;
    bool ledFlashOn = false; //Ist die LED an oder aus?
    long ledFlashNextSwitch = 0; //Wann wird das nächste mal umgeschaltet (an>aus oder aus>an)?

    void setup() {
    pinMode(PIN_LED_FLASH, OUTPUT);
    digitalWrite(PIN_LED_FLASH, LOW); //LED aus
    ledFlashOn = false; //LED ist aus
    ledFlashNextSwitch = millis() + 500; //in 500ms umschalten
    }

    void loop() {
    if(millis() >= ledFlashNextSwitch){ //ist es Zeit zum umschalten?
    ledFlashOn = !ledFlashOn; //Variable LED an/aus umschalten
    digitalWrite(PIN_LED_FLASH, ledFlashOn ? HIGH : LOW);//LED gemäß Variable an/aus schalten
    ledFlashNextSwitch = millis() + (ledFlashOn ? 100 : random(100, 2500));//von jetzt an (millis) schalten wir das nächste mal in 100ms um (LED ist an) oder in 100 bis 2500ms (LED ist aus)
    }
    }

  22. Peter

    Habe das Experiment nachgebaut und hat auch soweit geklappt. Ein Bekannter der sich besser damit auskennt hat mich aber daraufhin gewiesen, dass 5V für die LEDs schon viel zu viel ist und eine rote LED eher bei 2-3V betrieben werden sollte und man hier immer mit einem Widerstand 1K arbeiten sollte. Ist da was dran? Bei euch wird ja die LED direkt so angesteckt….
    (Auch fand ich die LED so sehr hell)

  23. Toddy73

    LED werden über den Strom definiert , die Spannung stellt sich dann automatisch ein.
    Zur Berechnung : Angenommen die LED ist mit 20mA und 1,2V angegeben

    5V Beriebsspannung – 1,2V LED Spannung =
    3,8V für den Wiederstand

    3,8V : 0,02A = 190 Ohm

    Bei Superhellen Geschichten kanns dann dem Wiederstand heiss werden , darum

    3,8V * 0,02A = 0,076W

    Hier reicht also ein normaler 1/4W Wiederstand , bei 24V und einer Superhellen LED kann das schon ganz anders aussehen.

    PS: Wenn nicht die Absolute Helligkeit gebraucht wird kann der Wiederstand gerne etwas grösser sein , das schont die LED. Die Standard LED ind Rot und Grün leuchten auch mit 500Ohm an 5V noch ganz normal.
    1KOhm dürfte dann aber dch etwas groß sein.
    Zum flashen würde ich die LED dann aber schon ausbelasten.

  24. Jochen

    —————————————————————————————————————————————————————————-nein nein nein nein!! 88

    —————————————————————————————————————————————————————————

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.