Campamento de Programación – Parte 3: Controlar un LED

Vamos aprender a controlar el LED azul de la parte delantera del ODROID-GO realizando pequeños ajustes en el LED con un simple GPIO de encendido/apagado, así como regular el brillo de 256 grados con PWM. Antes de empezar, asegúrate de haber leído las dos primeras guías en  https://wiki.odroid.com/odroid_go/arduino/01_arduino_setup y https://wiki.odroid.com/odroid_go/arduino/02_hello_world. Además, la guía original la puedes encontrar en la página de la wiki de ODROID-GO en https://wiki.odroid.com/odroid_go/arduino/03_blue_led_and_pwm.

Hacer parpadear del LED azul

Figure 01 - Blinking the blue LED
Figura 01 - El LED azul parpadeando

Vamos a hacer que el LED parpadee continuamente. Primero, abrimos un nuevo esquema presionando el atajo CTRL-N. Controlar el LED es muy fácil, el número de pin para el LED es 2, así que vamos a definirlo con un preprocesador. A continuación, tenemos que fijar el pin en modo salida. Usa la función pinMode () para hacer esto.

#define PIN_BLUE_LED 2

void setup() {
// put your setup code here, to run once:

pinMode(PIN_BLUE_LED, OUTPUT);
}

void loop() {
// put your main code here, to run repeatedly:
}
Ahora el pin está listo para ser utilizado. Puedes ajustar el nivel de la señal del pin utilizando la función digitalWrite (). Esta función tiene que estar en loop () para que se ejecute una y otra vez. La función delay() se utiliza para bajar la velocidad del parpadeo.
#define PIN_BLUE_LED 2

void setup() {
// put your setup code here, to run once:

pinMode(PIN_BLUE_LED, OUTPUT);
}

void loop() {
// put your main code here, to run repeatedly:

digitalWrite(PIN_BLUE_LED, HIGH);
delay(500);
digitalWrite(PIN_BLUE_LED, LOW);
delay(500);
}
Presione CTRL-U para compilar y cargar el esquema. Luego, podrás ver el LED azul parpadeando.

Dar al LED un efecto progresivo

Figure 02 - the LED ‘breathing’
Figura 02 - el LED iluminándose progresivamente

Ajustando el valor de salida analógico, podemos hacer que el LED se ilumine de forma progresiva simulado el efecto de la “respiración”. Esta técnica se conoce como PWM. Arduino nos ofrece soluciones que pueden ayudar a controlar los pines GPIO, así como las características PWM. Por lo general, estas funciones PWM son analogRead () y analogWrite (), pero todavía no están disponibles en ESP32, de modo que debemos usar las funciones ledcRead () y ledcWrite () para controlar los LED.

La forma de controlar los valores PWM en un ESP32 es diferente a otras placas Arduino. Estas funciones utilizan la función de hardware LED PWM de ESP32 que se encuentra en ledc.h, cabecera de la función de control LED. En ESP32, el LED PWM está compuesto por 16 canales independientes, y podemos configurarlos con un ciclo de trabajo partiendo de un periodo de onda y resolución.

Primero, debemos elegir un canal para conectar el LED. Los canales del 0 al 7 están disponibles, usaremos el canal 1 en este ejemplo. Define el canal y el LED azul a través de una macro Preprocesador.

#define PIN_BLUE_LED 2
#define PWM_CHANNEL 1

void setup() {
// put your setup code here, to run once:
}

void loop() {
// put your main code here, to run repeatedly:
}
Set the pin mode of the LED to output:
#define PIN_BLUE_LED 2
#define PWM_CHANNEL 1

void setup() {
// put your setup code here, to run once:
pinMode(PIN_BLUE_LED, OUTPUT);
}

void loop() {
// put your main code here, to run repeatedly:
}
Conecta el pin LED al canal que henos definido. A continuación, configura el canal para que funcione a 12 kHz con una resolución de 8 bits.
#define PIN_BLUE_LED 2
#define PWM_CHANNEL 1

void setup() {
// put your setup code here, to run once:
pinMode(PIN_BLUE_LED, OUTPUT);
ledcSetup(PWM_CHANNEL, 12000, 8);
}

void loop() {
// put your main code here, to run repeatedly:
}
Por último, añade el código del efecto “respiración” a la función loop(). Definimos una variable llamada pinVal como una variable global para evitar la repetida asignación de nueva memoria en la función loop (). El carácter pinVal no tiene firma, ya que el valor de PWM sólo abarca desde 0 a 255.
#define PIN_BLUE_LED 2
#define PWM_CHANNEL 1

unsigned char pinVal = 0;

void setup() {
// put your setup code here, to run once:

pinMode(PIN_BLUE_LED, OUTPUT);
digitalWrite(PIN_BLUE_LED, HIGH);

ledcAttachPin(PIN_BLUE_LED, PWM_CHANNEL);
ledcSetup(PWM_CHANNEL, 12000, 8);
}

void loop() {
// put your main code here, to run repeatedly:

for (; pinVal > 0; pinVal--) {
ledcWrite(PWM_CHANNEL, pinVal);
delay(3);
}
for (; pinVal < 255; pinVal++) {
ledcWrite(PWM_CHANNEL, pinVal);
delay(3);
}
}
Presiona CTRL-U para compilar y cargar el esquema, luego podrás ver cómo el LED azul se va iluminado de forma progresiva.

Un ejemplo completo

Se puede cargar un ejemplo completo en el IDE de Arduino haciendo clic en el menú Files → Examples → ODROID-GO → LED or LED_PWM para importar y presionar CTRL-U para compilar y cargar.

Figure 03 - loaded completed example in arduino IDE
Figura 03 - Ejemplo completo cargado en IDE Arduino

Información Adicional

Para obtener información adicional y ayuda, utiliza los siguientes recursos o pregunta en los foros de ODROID:

  • Consulta los documentos oficiales de Arduino. Estos proporcionan funciones habituales muy útiles con excelentes instrucciones.
  • Consulta la guía de programación oficial de ESP32. La mayoría de las funciones específicas de ESP32 están incluidas en este artículo

Be the first to comment

Leave a Reply