digitale Ein- und Ausgänge
Die Funktionen für die digitale Ein-/Ausgabe sind einfach gehalten. Hier wird von der darunterliegenden Platform (dem ATMega Prozessor) recht stark abstrahiert. Es gibt keine Ports es gibt nur einzelne Leitungen.
Diese Anzahl ist sehr verschieden, je nach Board, aber Sie sind immer durchnummeriert von 0-x. der Dumilaneove hat derer 19. Einmal die auf dem Board aufgedruckten 0..13 und dann noch die A0..5. Das sind zwar analoge Eingänge, aber diese kann man auch digital benutzen. (Beides gleichzeitig natürlich nicht.) Digital sind es eben 14..19.
Wir haben hier 3 Funktionen
pinMode(Pin, Modus)
hiermit sagt man dem Arduino, ob ein Pin Eingang oder Ausgang sein soll. Pin ist eben die Nummer (0..19) und Modus kann einer von folgenden Konstanten sein: INPUT für Eingang, OUTPUT für Ausgang oder INPUT_PULLUP für einen Eingang mit Pullupwiderstand nach +V. (Das heist, der Eingang ist ohne Beschaltung immer logisch 1 und nur wenn man ihn gegen Masse zieht, wird er logisch 0)
digitalWrite(Pin, Wert)
Hiermit kann man einen Ausgang ein und ausschalten. 0 aus, 1 ein, HIGH ein, LOW aus, TRUE ein, FALSE aus…
digitalRead(Pin)
Hiermit kann man einen Eingang abfragen. 0 bedeutet der Eingang hat Massepotential, 1 ist Versorgungsspannung.
Ein Beispiel hatten wir ja schon am Anfang.
Aber noch eines kann ja nicht schaden. Wie wäres es mit einem Knightrider Lauflicht. Ziel: Ein Lauflicht, was hin und her läuft, und zwar auf Knopfdruck.
Man braucht dazu: 8 LED's und 8 Vorwiderstände. (Anschluss wie hier gezeigt.) Klar könnten wir auch 16 LED's ansteuern, aber leider nicht mehr so einfach direkt, denn der gesamte Strom muss über die Stromversorgungspins des Chips bereitgestellt werden und dort dürfen max. 200mA durch… Und wenn dann mal aus versehen alle LED's angehen, geht der Chip ganz schnell für immer aus.
Knightrider:
/* Knightrider Lauflicht mit 8 LED's an den Ausgängen D0..D7. 1 Taster zum Einschalten an D8. */ // das ist die aktuelle Position des Lichtes int pos = 4; boolean up = true; void setup() { // Alle LED's als OUTPUT Pins for (int i = 0; i <= 7; i++) { pinMode(i, OUTPUT); } pinMode(8, INPUT_PULLUP); } void loop() { if (digitalRead(8) == 0) { // Knopf gedrückt, jetzt geht's los if (up) { pos++; if (pos > 7) { // Richtung umkehren up = false; pos = 7; } }else { pos--; if (pos < 0) { // Richtung umkehren up = true; pos = 0; } } %%//%%jetzt die richtigen LED's anschalten for (int i = 0; i <= 7; i++) { // erstmal alles aus digitalWrite(i, LOW); // die richtige position muss immer leuchten if (i == pos) { digitalWrite(i, HIGH); } // Beim Hochlaufen soll auch die LED hinter der aktuellen leuchten if (up && (i == (pos - 1))) { digitalWrite(i, HIGH); } // Beim Runterlaufen soll auch die LED vor der aktuellen leuchten if (!up && (i == (pos + 1))) { digitalWrite(i, HIGH); } } delay(200); } else { // Knopf nicht gedrückt, alles aus machen for (int i = 0; i <= 7; i++) { digitalWrite(i, LOW); } // und damit er auch schön wieder in der Mitte anfängt pos = 4; up = true; } }