...
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 |
---|
language | java |
---|
title | Lösung Aufgabe 1 |
---|
collapse | true |
---|
|
#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 |
---|
language | java |
---|
title | Lösung Aufgabe 2 |
---|
collapse | true |
---|
|
#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 |
---|
language | java |
---|
title | Lösung Aufgabe 3 |
---|
collapse | true |
---|
|
#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);
}
} |