...
Unter digitalem Input versteht man Schaltungen, welche lediglich zwei Zustände kennen: EIN oder AUS. Im Falle des Arduino entspricht der Zustand EIN dabei einer elektrischen Spannung von 5V und AUS einer Spannung von 0V. Je nachdem ob man diese Zustände einliesst oder ausgibt spricht man von Input oder Output. Am Arduino verwenden wir vor allem die Digitalen PINs (D0-D13) für digitale Schaltungen. Es können jedoch auch die Analogen PINs verwendet werden, falls noch mehr Ein- bzw. Ausgänge benötigt werden.
Visualisierung
Funktion
Die entsprechende Funktion für das Einlesen lautet:
...
1. Nutzt den Taster um zwischen zwei LEDs hin- und her zu wechseln.
2. Programmiert den Code so, dass erst nach viermaligem drücken der Wechsel erfolgt.
3. Programmiert einen Papagei, welcher eine eingegebene Sequenz wiederholt.
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
#define BUTTON 2 // Button PIN definieren
#define LED_ONE 12 // LED 1 an PIN 12
#define LED_TWO 11 // LED 2 an PIN 11
boolean whichLed = false; // Hier speichern wir, welche LED angesteuert werden soll
boolean buttonState = false; // Hier speichern wir den momentanen Button Zustand
long debounceDelay = 200; // Diese Zeit bestimmt die Verzögerung beim Drücken des Buttons
long lastDebounceTime = 0; // Hier speichern wir den Zeitpunkt, an welchem der Button gedrückt wurde
void setup()
{
pinMode(BUTTON, INPUT); // PINs als Aus-/Eingänge setzen
pinMode(LED_ONE, OUTPUT); // ...
pinMode(LED_TWO, OUTPUT); // ...
}
void loop()
{
// Wenn der Button gedrückt wird und seit dem leten Mal die Zeit lastDebounceTime
// vergangen ist, dann akzeptiere den Tastendruck. buttonState verhindert das wiederholte
// Ausführen des Events.
if(digitalRead(BUTTON) == LOW && (millis()-lastDebounceTime)>debounceDelay && buttonState == false)
{
whichLed =! whichLed; // Die leuchtende LED wechseln
lastDebounceTime = millis(); // Den aktuellen Zeitpunkt speichern
buttonState = true; // buttonState auf true setzen
}
// Wenn der Button wieder losgelassen wird, kann buttonState wieder freigegeben werden
if(digitalRead(BUTTON) == HIGH)
{
buttonState = false; // buttonState auf false setzen
}
if(whichLed == true) // Erste LED anschalten, zweite aus
{
digitalWrite(LED_ONE, HIGH);
digitalWrite(LED_TWO, LOW);
Serial.println("Here");
}
else // Zweite LED anschalten, erste aus
{
digitalWrite(LED_ONE, LOW);
digitalWrite(LED_TWO, HIGH);
}
} |
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
#define BUTTON 2 // Button PIN definieren #define LED_ONE 12 // LED 1 an PIN 12 #define LED_TWO 11 // LED 2 an PIN 11 boolean whichLed = false; // Hier speichern wir, welche LED angesteuert werden soll boolean buttonState = false; // Hier speichern wir den momentanen Button Zustand long debounceDelay = 200; // Diese Zeit bestimmt die Verzögerung beim Drücken des Buttons long lastDebounceTime = 0; // Hier speichern wir den Zeitpunkt, an welchem der Button gedrückt wurde int counter = 0; // Dieser counter zählt, wie oft der Button gedrückt wurde void setup() { pinMode(BUTTON, INPUT); // PINs als Aus-/Eingänge setzen pinMode(LED_ONE, OUTPUT); // ... pinMode(LED_TWO, OUTPUT); // ... } void loop() { // Wenn der Button gedrückt wird und seit dem leten Mal die Zeit lastDebounceTime // vergangen ist, dann akzeptiere den Tastendruck. buttonState verhindert das wiederholte // Ausführen des Events. if(digitalRead(BUTTON) == LOW && (millis()-lastDebounceTime)>debounceDelay && buttonState == false) { counter++; // Den counter um 1 erhöhen lastDebounceTime = millis(); // Den aktuellen Zeitpunkt speichern buttonState = true; // buttonState auf true setzen } // Wenn der Button wieder losgelassen wird, kann buttonState wieder freigegeben werden if(digitalRead(BUTTON) == HIGH) { buttonState = false; // buttonState auf false setzen } // Wenn der counter auf 4 steht (der Button also 4 mal gedrückt wurde), wechsele die // LED und setze den counter wieder auf 0. if(counter == 4) { whichLed =! whichLed; // Die leuchtende LED wechseln counter = 0; } if(whichLed == true) // Erste LED anschalten, zweite aus { digitalWrite(LED_ONE, HIGH); digitalWrite(LED_TWO, LOW); } else // Zweite LED anschalten, erste aus { digitalWrite(LED_ONE, LOW); digitalWrite(LED_TWO, HIGH); } } |
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
#define BUTTON 2
#define LED_ONE 13
int buttonState [40];
long buttonTime [40];
int lastButtonState = HIGH;
long lastTimePressed = 0;
int timeOutDelay = 2000;
int counter = 0;
boolean replay = false;
int sequenceLenght = 0;
void setup()
{
pinMode(BUTTON, INPUT);
digitalWrite(BUTTON, HIGH);
pinMode(LED_ONE, OUTPUT);
}
void loop()
{
int reading = digitalRead(BUTTON);
if(reading != lastButtonState)
{
replay = false;
buttonState[counter] = reading;
buttonTime[counter] = millis();
lastTimePressed = millis();
lastButtonState = reading;
counter++;
}
if((millis() - lastTimePressed) > timeOutDelay)
{
sequenceLenght = counter;
counter = 0;
replay = true;
}
if(replay == true)
{
for(int i=0; i<sequenceLenght-1; i++)
{
digitalWrite(LED_ONE, !buttonState[i]);
delay(buttonTime[i+1]-buttonTime[i]);
}
replay = false;
digitalWrite(LED_ONE, LOW);
}
} |
Weitere Informationen
Arduino: DigitalPins - Referenz auf Arduino.cc
Tom Igoe: Digital Input & Output - Tom Igoe