Zum Inhalt springen

Digital Out

    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, eine LED und einen 220 Ohm Widerstand (rot-rot-braun oder rot-rot-schwarz-schwarz). Die LED wird mit dem kürzeren Beinchen (Kathode) mit dem GND-Pin (also den Minus-Pol) des Arduinos verbunden, mit dem längeren Beinchen (Anode) über den Widerstand mit dem Pin Digital 13.

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


    Sieh dir jetzt meinen neuen Arduino-Videokurs an: Jetzt ansehen!


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

    // by David Cuartielles
    
    int ledPin = 13;
    
    void setup() {
      pinMode(ledPin, OUTPUT);
    }
    
    void loop() {
      digitalWrite(ledPin, HIGH);
      delay(1000);
      digitalWrite(ledPin, LOW);
      delay(1000);
    }

    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.

    pinMode(13, 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:

    digitalWrite(ledPin, HIGH);

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

    delay(1000);

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

    digitalWrite(ledPin, LOW);

    Dieser Befehl schaltet den ledPin auf GND (LOW);

    delay(1000);

    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.

    0 0 votes
    Article Rating
    30 Comments
    Newest
    Oldest Most Voted
    Inline Feedbacks
    Alle Kommentare anzeigen
    Leon Dick
    7 Jahre zuvor

    und das ist die fehler meldung
    Der Sketch verwendet 940 Bytes (2%) des Programmspeicherplatzes. Das Maximum sind 32.256 Bytes.
    Globale Variablen verwenden 9 Bytes (0%) des dynamischen Speichers, 2.039 Bytes für lokale Variablen verbleiben. Das Maximum sind 2.048 Bytes.
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x67
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0x67
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 3 of 10: not in sync: resp=0x67
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 4 of 10: not in sync: resp=0x67
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 5 of 10: not in sync: resp=0x67
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 6 of 10: not in sync: resp=0x67
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 7 of 10: not in sync: resp=0x67
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 8 of 10: not in sync: resp=0x67
    avrdude: stk500_recv(): programmer is not responding
    Problem beim Hochladen auf das Board. Hilfestellung dazu unter http://www.arduino.cc/en/Guide/Troubleshooting#upload.
    avrdude: stk500_getsync() attempt 9 of 10: not in sync: resp=0x67
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0x67

    Toddy73
    8 Jahre zuvor

    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.

    Peter
    8 Jahre zuvor

    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)

    Daniel
    8 Jahre zuvor

    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)
    }
    }

    Janek
    9 Jahre zuvor

    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);

    }

    Ralf
    9 Jahre zuvor

    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

    Torben
    9 Jahre zuvor

    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 (https://www.starthardware.org/2010/06/analog-out/). Vielleicht hilft es dir ja.
    Viele Grüße,
    Torben

    Antonio
    9 Jahre zuvor

    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

    Joachim Wilms
    9 Jahre zuvor

    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.

    Torben
    9 Jahre zuvor

    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 https://www.starthardware.org/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);
    }