| Arbeitsmaterial |
|
| Aufgaben |
|
Schaltskizze
Das Programm „Taster_LED“
// ********************************************************
// ESP Board : ESP32-S3-WROOM
// Aufgabe : Ein/Aus Taster für LED
// Betriebsspannung: 3,3 V
// ********************************************************
#define PIN_LED 2
#define PIN_BUTTON 15
void setup() {
pinMode(PIN_LED, OUTPUT);
pinMode(PIN_BUTTON, INPUT);
}
void loop() {
if (digitalRead(PIN_BUTTON) == LOW) { // wenn T1 gedrückt
digitalWrite(PIN_LED,HIGH); // LED -> HIGH
}else{
// sonst
digitalWrite(PIN_LED,LOW); // LED -> LOW
}
}
Hinweise und Bemerkungen zur Versuchsdurchführung
Sollte die LED nach dem Start des Sketches bei Tastendruck nicht leuchten, kann dies verschiedene Gründe haben:
1. Ist die Schaltung so aufgebaut, wie in der Schaltskizze festgelegt?
2. Sind Controller Board und Computer via USB-Kabel miteinander verbunden?
3. Haben sich Schreibfehler in das Programm eingeschlichen (z.B. Groß- /Kleinschreibung, Semikolon am Zeilenende, ...)?
Wie funktioniert die Schaltung?
Die LED ist mit dem Ausgang GPIO2, der Taster T1 mit dem Eingang GPIO15 des ESP32-Boards verbunden.
Im Programm wird mit
digitalRead(PIN_BUTTON) der Pegelzustand am Eingang von GPIO15 abgefragt und mit
digitalWrite(PIN_LED) der Zustand am Ausgang zur LED eingestellt.
Erweiterungsaufgabe
Versuche jetzt das Programm so umzuschreiben, dass die LED aufleuchtet und erleuchtet bleibt, sobald du einmal auf den Taster T1 gedrückt hast und erst erlischt, wenn du ein zweites mal den Taster drückst. T1 arbeitet wie ein Umschalter.
Schreibe dazu ein Programm "Lampenschaltung" und speichere es ab. Der Schaltungsaufbau aus Abb. 1 ändert sich nicht, nur das Programm muß verändert werden.
Programm „Lampenschaltung“
// ************************************************
// ESP32 Board : ESP32-S3-WROOM
// Aufgabe : Lampenschaltung für LED
// Betriebsspg. : 3v3
// ************************************************
#define PIN_LED 2
#define PIN_BUTTON 15
void setup() {
pinMode(PIN_LED, OUTPUT);
pinMode(PIN_BUTTON, INPUT);
}
void loop() {
if (digitalRead(PIN_BUTTON) == LOW) {
delay(30);
if (digitalRead(PIN_BUTTON) == LOW) {
reverseGPIO(PIN_LED);
}
while (digitalRead(PIN_BUTTON) == LOW);
delay(30);
}
}
void reverseGPIO(int pin) {
digitalWrite(pin, !digitalRead(pin));
}
Wie funktioniert die Schaltung?
Mit dem Befehl delay(30) wird das Kontaktprellen, das unweigerlich bei jedem Tastendruck auftritt, überbrückt, bevor der nächste Befehl ausgeführt wird.
Die Funktion reverseGPIO(int pin) kehrt den Schaltzustand am Ausgang GPIO2 um.
In dieser Übung wird ein Lauflicht "Knight Rider" auf einem LED Bar Baustein (s. Abb. 2) mit 10 einzelnen LEDs programmiert.
| Arbeitsmaterial |
|
| Aufgaben |
|
Schaltskizze
Das Programm "KnightRider"
// Die benutzten Pinanschlüsse (LED) werden in einem Byte-Array
// LED_pins abgelegt. Adressiert werden die Pins über die Po-
// sition des jeweiligen GPIO im Array; angefangen bei 0
// *************************************************************
byte LED_pins[] = {48, 47, 21, 41, 40, 39, 38, 42, 2, 1};
int LED_zaehler;
void setup() {
// sizeof bestimmt die Anzahl der Bytes im Array LED_pins
LED_zaehler = sizeof(LED_pins);
// Alle LED_pins -> OUTPUT
for (int i = 0; i < LED_zaehler; i++) {
pinMode(LED_pins[i], OUTPUT);
}
}
void loop() {
// LED Lauflicht von außen nach innen
for (int i = 0; i < LED_zaehler-6; i++) {
digitalWrite(LED_pins[i], HIGH); // LED(i) -> 1
digitalWrite(LED_pins[10-i], HIGH); // LED(10-i) -> 1
delay(100);
digitalWrite(LED_pins[i], LOW); // LED(i) -> 0
digitalWrite(LED_pins[10-i], LOW); // LED(10-i) -> 0
}
// LED Lauflicht von innen nach außen
for (int i = LED_zaehler-5; i > 1; i--) {
digitalWrite(LED_pins[i], HIGH);
digitalWrite(LED_pins[10-i], HIGH);
delay(100);
digitalWrite(LED_pins[10-i], LOW);
}
}