Project 13 Mini Lamp
1. Beschrijving
In dit project gaan we een lamp bedienen via Arduino UNO en een knop. Wanneer we de knop indrukken, verandert de status van de lamp (AAN of UIT).
2. Werkingsprincipe

Wanneer de knop wordt losgelaten, zorgt een spanning VCC die door R29 loopt voor een hoog niveau op de S-terminal. Wanneer de knop wordt ingedrukt, zijn pin 1 en 3, pin 2 en 4 verbonden en komt de spanning op S1 op GND als een laag niveau. Op dat moment voorkomt R29 een kortsluiting tussen VCC en GND.
3. Aansluitschema

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); //Stel de seriële baudrate in op 9600
pinMode(button, INPUT); //Verbind de knop met digitale poort 8 en stel deze in als input.
}
void loop()
{
value = digitalRead(button);//Lees de waarde van de knop
Serial.print("Key status:"); //Print "Key status:" op de seriële poort
Serial.println(value); //Print de knopvariabele op de seriële poort en ga naar de volgende regel
}
5. Testresultaat
Na het aansluiten van de bedrading en het uploaden van de code, open je de seriële monitor en stel je de baudrate in op 9600.
Wanneer we de knop indrukken, print de seriële poort “Key status: 0”; wanneer we loslaten, print de seriële poort “Key status: 1”.

6. Kennisuitbreiding
Vervolgens gaan we de LED bedienen via de status van de knoppen.
Stroomschema:

Aansluitschema:

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()
{
// initialiseer digitale pin PIN_LED als uitgang.
pinMode(led, OUTPUT);
pinMode(button, INPUT);
}
// de loop-functie draait continu oneindig door
void loop()
{
if (digitalRead(button) == LOW) { //Wanneer de knopwaarde voor het eerst 0 is, wordt knopdebouncing geactiveerd, dus wordt 20ms gewacht om te controleren of de knop nog steeds 0 is.
delay(20); //Wacht 20ms
if (digitalRead(button) == LOW) { //controleer of de knopwaarde 0 is
ledState = !ledState; //ledState wordt het tegenovergestelde van de oorspronkelijke waarde, wat gebruikt kan worden om de LED aan en uit te zetten
digitalWrite(led, ledState);
}
while (digitalRead(button) == LOW); //houd de knop ingedrukt in de while-lus, verlaat deze wanneer de knop wordt losgelaten
}
}
Testresultaat
Je kunt de rode LED aan- en uitzetten met de rode knop.