Projekt 13 Mini Lampe
1. Beschreibung
In diesem Projekt steuern wir eine Lampe über Arduino UNO und einen Taster. Wenn wir den Taster drücken, ändert sich der Zustand der Lampe (AN oder AUS).
2. Funktionsprinzip

Wenn der Taster losgelassen wird, liefert eine Spannung VCC, die durch R29 fließt, ein High-Signal für den S-Anschluss. Beim Drücken werden Pin 1 und 3 sowie Pin 2 und 4 verbunden, und die Spannung an S1 wird auf GND gezogen, was ein Low-Signal darstellt. In diesem Moment verhindert R29 einen Kurzschluss zwischen VCC und GND.
3. Schaltplan

4. Testcode
/*
keyestudio ESP32 Inventor Learning Kit
Project 13.1 Mini Lamp
http://www.keyestudio.com
*/
int button = 15;
int value = 0;
void setup()
{
Serial.begin(9600); //Setze die serielle Baudrate auf 9600
pinMode(button, INPUT); //Verbinde den Taster-Pin mit dem digitalen Port 8 und setze ihn auf Eingabemodus.
}
void loop()
{
value = digitalRead(button);//Lese den Wert des Tasters aus
Serial.print("Key status:"); //Gibt "Key status:" auf dem seriellen Port aus
Serial.println(value); //Gibt die Taster-Variable auf dem seriellen Port aus und fügt einen Zeilenumbruch hinzu
}
5. Testergebnis
Nach dem Verbinden der Schaltung und Hochladen des Codes öffne den seriellen Monitor und stelle die Baudrate auf 9600 ein.
Wenn wir den Taster drücken, zeigt der serielle Port “Key status: 0” an; wenn wir ihn loslassen, zeigt der serielle Port “Key status: 1”.

6. Wissensvertiefung
Als Nächstes steuern wir die LED über den Zustand des Tasters.
Flussdiagramm:

Schaltplan:

Code
/*
keyestudio ESP32 Inventor Learning Kit
Project 13.2 Mini Lamp
http://www.keyestudio.com
*/
#define led 4
#define button 15
bool ledState = false;
void setup()
{
// initialisiere digitalen Pin PIN_LED als Ausgang.
pinMode(led, OUTPUT);
pinMode(button, INPUT);
}
// die loop-Funktion läuft unendlich oft
void loop()
{
if (digitalRead(button) == LOW) { //Wenn der Tasterwert zum ersten Mal 0 ist, wird Tasterprellen ausgelöst, daher wird 20 ms gewartet, um zu prüfen, ob der Taster weiterhin 0 ist.
delay(20); //20 ms Verzögerung
if (digitalRead(button) == LOW) { //prüfe, ob der Tasterwert 0 ist
ledState = !ledState; //ledState wird auf den invertierten Wert gesetzt, um die LED ein- und auszuschalten
digitalWrite(led, ledState);
}
while (digitalRead(button) == LOW); //halte die Schleife, solange der Taster gedrückt ist, verlasse sie beim Loslassen
}
}
Testergebnis
Du kannst die rote LED über den roten Taster ein- und ausschalten.