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.

    31 Gedanken zu „Digital Out“

    1. 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

    2. 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.

    3. 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)

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

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

      }

    6. 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

    7. 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

    8. 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

    9. 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.

    10. 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);
      }

    Die Kommentarfunktion ist deaktiviert.