Unterrichts- und Lernmaterial für Mikrocontroller
Unterrichts- und Lernmaterial fürMikrocontroller

LED und Taster

Übung 1: LED und Taster

Arbeitsmaterial
  • 1x  ESP32 xxx Board
  • 1x  GPIO Extension Board (optional)
  • 1x  LED rot
  • 1x  Taster T1
  • 2x  Widerstand 10 kOhm  
  • 1x  Steckbrett
  • 1x  USB-Verbindungskabel  
Aufgaben
  • Baue die Schaltung nach Schaltungsvorlage (Abb. 1) auf dem Steckbrett auf. Der Taster arbeitet hier als Ein-/Ausschalter.
  • Übertrage das Programm „"Taster_LED" in den Arduino Editor und speichere es ab. Übrigens bezeichnet man Arduino-Programme auch als SKETCH.
  • Starte das Programm und beschreibe, wie die Schaltung arbeitet.
  • Beschreibe mit eigenen Worten für jede Programmzeile wie der Controller reagiert.
  • Ändere das Programm so ab, dass die LED mit Hilfe des Taster eingeschaltet und durch einen weiteren Tastendruck auch wieder ausgeschaltet werden kann (Umschalter); ähnlich einem Lampenschalter. Speichere dieses Programm unter „Lampenschalter“ ab.

Schaltskizze

Abb. 1 - Schaltungsaufbau mit LED und Taster T1

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.

  • Ist T1 nicht gedrückt, liegt am Eingang GPIO15 eine 1 oder HIGH
  • wird T1 gedrückt, liegt eine 0 oder LOW an. 

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.

Übung 2: Lampenschaltung

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.

Übung 3: LED Lauflicht "Knight Rider"

In dieser Übung wird ein Lauflicht "Knight Rider" auf einem LED Bar Baustein (s. Abb. 2) mit 10 einzelnen LEDs programmiert. 

 

 

 

 

 

Abb. 2

Ein LED-Bar Baustein mit 10 LEDs.

Arbeitsmaterial
  • 1x  ESP32 xxx Board
  • 1x  GPIO Extension Board (optional)
  • 1x  LED Bar
  • 10x  Widerstand 220 Ohm  
  • 1x  Steckbrett
  • Steckdraht
  • 1x  USB-Verbindungskabel  
Aufgaben
  • Baue die Schaltung nach Schaltskizze (Abb. 3) auf dem Steckbrett auf.
  • Übertrage das Programm „KnightRider" in den Arduino Editor und speichere es ab. 
  • Starte das Programm und beschreibe, wie die Schaltung arbeitet.
  • Beschreibe mit eigenen Worten für jede Programmzeile wie der Controller reagiert.
  • Zusatzaufgabe: Ändere das Programm so ab, dass die LEDs von links nach rechts nacheinander ein- bzw. ausgeschaltet werden und so ein Laufeffekt von links nach rechts entsteht.

Schaltskizze

 

 

 

 

 

 

 

 

 

 

 

Abb. 3

Durch Ausprobieren bekommt man

heraus, wo die Kathoden- und wo die Anodenanschlüsse am LED Bar Baustein herausgeführt sind.

Bei meinem Baustein befindet sich die Kathodenseite auf der Seite des Aufdrucks.

 

 

 

 

 

 

 

Abb. 2

Schaltungsaufbau mit 10x Widerstand 220 Ohm, LED Bar und ESP32-S3-WROOM mit ESP32 GPIO Extension Board.

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

Druckversion | Sitemap
© Reinhard Rahner - Gettorf