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.