Zeige Quelltext
Übersetzungen dieser Seite:

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

 

arduino/tutorial/sprechen-sie-arduino/fertige-funktionen/digitale-ein--und-ausgaenge.txt · Zuletzt geändert: 2018/11/04 11:51 (Externe Bearbeitung)
CC Attribution-Share Alike 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0