Mail to Code: Tutorial

Lernt, wie man den Code für Rechenknechte schreibt.

English version English Version

GPIOs als Ausgang - Blinkende LEDs

Schaltplan

PC versus microcontroller
Abbildung 1:
Für die Programmierbeispielein diesem Kapitel werden 8 LEDs, jede mit einem 1kΩ Reihenwiderstand zwischen die GPIOs Nummer 22 - 29 und Masse an dem ATmega 2560 Board geschaltet.
Achtung: LEDs dürfen nicht direkt an einen GPIO angeschlossen werden! Es muss immer ein Reihenwiderstand von etwa 1kΩ verwendet werden! Ferner ist die korrekte Polung einer LED zu beachten. Die Kathode (kurzer Pin, abgeflachte Stelle am Gehäuse) muss an Masse, die Anode (langer Pin) muss an den Reihenwiderstand und das zweite Ende dieses Widerstands an den betreffenden GPIO angeschlossen werden.

Eine LED blinken lassen

Das erste Codebeispiel lässt die mit Pin Nummer 22 verbundene LED blinken:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
void setup() {
  // put your setup code here, to run once:
  pinMode(22, OUTPUT); // Set pin 22 to output
}
 
void loop() {
  // put your main code here, to run repeatedly:
 
  digitalWrite(22, HIGH);  // Turn on GPIO number 22
  delay(400); // do nothing for 400 milliseconds (0.4s)
 
  digitalWrite(22, LOW);  // Turn off GPIO number 22
  delay(600); // do nothing for 600 milliseconds (0.6s)
}
    

In dem setup() Block wird GPIO Nummer 22 in Zeile 3 als Ausgang definiert. Nur so kann mit dem Befehl digitalWrite() die Spannung an diesem Pin entweder auf die Logikspannung (5V oder 3.3V) oder eben auf 0V gesetzt werden. Standardmäßig sind alle Pins als Eingang geschaltet und dann bewirkt der Befehl digitalWrite() keine Änderung der Ausgangsspannung!
Standard ist auch, dass ein Pin, der auf Ausgang geschaltet wird, anschließend 0V Ausgangsspannung liefert.
Nachdem Pin 22 als Ausgang geschaltet ist, wird in dem Codeblock loop() in Zeile 9 mit digitalWrite(22, HIGH) die Logikspannung ausgegeben. Beim ATmega2560 sind das +5V zwischen diesem Pin und Masse (GND). Die LED beginnt zu leuchten. Eine alternative Schreibweise ist digitalWrite(22, 1). Beide Schreibweisen bewirken exakt das Gleiche, nämlich dass der Ausgang auf logisch "1" gesetzt wird.
In Zeile 10 wird mit dem Befehl delay(400) eine Pause von 400 Millisekunden (= 0.4 Sekunden) eingelegt. In dieser Zeit macht der Mikrocontroller nichts, außer zu warten, bis diese Zeitspanne verstrichen ist.
In Zeile 12 wird Pin 22 wieder auf LOW gesetzt und ab diesem Zeitpunkt liegen wieder 0V zwischen diesem Pin und Masse an. Eine alternative Schreibweise ist digitalWrite(22, 0).
Erneut wartet der Mikrocontroller, wie in Zeile 13 vorgegeben, nun allerdings 600 Millisekunden, bevor mit der Abarbeitung des Programms fortgefahren wird.
Mit dieser Zeile ist der Codeblock in loop() beendet. Wie der Name dieses Blocks vermuten lässt, wird dieser in einer Endlosschleife durchlaufen. Der Mikrocontroller springt also an den Anfang von loop() und schaltet somit in Zeile 9 die LED wieder ein.
Die LED an Pin Nummer 22 blinkt einmal pro Sekunde (400 Millisekunden EIN, 600 Millisekunden AUS).





Du findest diese Seite klasse?

Gummibärchen als Nervennahrung beim Programmieren und der Betrieb dieses Servers verschlingen mein Geld.
Helft mit einer Motivationsspritze, dieses Projekt am Laufen zu halten.

Klick hier oder scan den QR Code, um eine Spende zu überweisen.



Vielen Dank!

Fragen? Anregungen? Fehler gefunden?
Kontakt per E-mail: question@h1i1.de