Proyecto 13 Mini Lámpara

1. Descripción

En este proyecto, vamos a controlar una lámpara mediante Arduino UNO y un botón. Cuando presionamos el botón, el estado de la lámpara cambiará (ENCENDIDO o APAGADO).

2. Principio de Funcionamiento

Cuando el botón está liberado, un voltaje VCC que pasa a través de R29 proporciona un nivel alto para el terminal S. Cuando se presiona, los pines 1 y 3, y los pines 2 y 4 se conectan y el voltaje en S1 llega a GND como un nivel bajo. En este momento, R29 evita un cortocircuito entre VCC y GND.

3. Diagrama de Conexiones

4. Código de Prueba

/*
  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); //Establece la velocidad en baudios del puerto serial a 9600 
  pinMode(button, INPUT);  //Conecta el pin del botón al puerto digital 8 y configúralo en modo entrada.
}

void loop() 
{
  value = digitalRead(button);//Lee el valor del botón 
  Serial.print("Key status:"); //Imprime "Key status:" en el puerto serial 
  Serial.println(value); //Imprime la variable del botón en el puerto serial y hace salto de línea
}

5. Resultado de la Prueba

Después de conectar el cableado y subir el código, abre el monitor serial y configura la velocidad en baudios a 9600.
Cuando presionamos el botón, el puerto serial imprime “Key status: 0”; cuando lo soltamos, el puerto serial imprime “Key status: 1”.

6. Ampliación de Conocimientos

A continuación, controlaremos el LED mediante el estado de los botones.

  • Diagrama de Flujo:

  • Diagrama de Conexiones:

  • Código

/*
  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() 
{
  // inicializa el pin digital PIN_LED como salida.
  pinMode(led, OUTPUT);
  pinMode(button, INPUT);
}

// la función loop se ejecuta repetidamente para siempre
void loop() 
{
  if (digitalRead(button) == LOW) {    //Cuando el valor del botón es 0 por primera vez, se activa el rebote del botón, por lo que se retrasa 20ms para juzgar si el botón sigue siendo 0. 
    delay(20);                              //Retraso de 20ms
    if (digitalRead(button) == LOW) {   //juzga si el valor del botón es 0
      ledState = !ledState;                 //ledState es igual al inverso de su valor original, lo que permite encender y apagar el LED 
      digitalWrite(led, ledState);
    }
    while (digitalRead(button) == LOW);     //mantiene el botón presionado en el bucle while, sale cuando se suelta
  }
}
  • Resultado de la Prueba

Puedes controlar el encendido y apagado del LED rojo mediante el botón rojo.