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

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

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

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

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

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

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

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

    16. @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 :)

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

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

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

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

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

    Die Kommentarfunktion ist deaktiviert.