En este tutorial aprenderás a controlar el encendido y apagado de un LED utilizando diferentes tipos de entrada: caracteres, números o cadenas de texto (strings) en un proyecto de Arduino. Te mostraremos cómo recibir datos a través del puerto serie y procesarlos para que el LED responda según el valor enviado. Este enfoque te permitirá controlar el estado del LED mediante comandos personalizados, lo que es útil para aplicaciones interactivas y proyectos más complejos. Ideal para quienes desean ampliar sus conocimientos en comunicación serial y manejo de entradas en Arduino.
MATERIALES:
- Arduino uno
- Resistencia de 220 ohms
- Diodo LED
- Cables de conexión
DIAGRAMA DE CONEXIONES:
Encender/apagar led usando caracteres
Para encender el led usando caracteres utilizamos el siguiente código:
#define led 13 // Definimos el pin donde va conectado el led void setup() { Serial.begin(9600); // inicializamos el puerto serial pinMode(led, OUTPUT); // declaramos led como salida } void loop() { if (Serial.available() > 0) { // cuando nos llegue un dato a travez del monitor serial: char caracter = Serial.read(); // almacenamos el dato en la variable caracter if (caracter == 'A') { // Si el caracter es igual a A: digitalWrite(led, HIGH); // encendemos el led } else if (caracter == 'B') { // si es igual a B: digitalWrite(led, LOW); //apagamos el led } } }
Para poder utilizar este código en cualquier parte del programa, lo vamos a poner dentro de una función, de la siguiente manera:
#define led 13 void setup() { Serial.begin(9600); pinMode(led, OUTPUT); } void loop() { char caracter = lecturaMonitorSerial(); if (caracter == 'A') { digitalWrite(led, HIGH); } else if (caracter == 'B') { digitalWrite(led, LOW); } } char lecturaMonitorSerial() { if (Serial.available() > 0) { char caracter = Serial.read(); return caracter; } }
Encender/apagar led usando números de una o mas cifras
Para encender el led utilizando números tenemos que cambiar el método: Serial.read() por: Serial.parseInt() , al numero no lo tenemos que poner entre comillas y cambiamos el tipo de variables de char a int
#define led 13 void setup() { Serial.begin(9600); pinMode(led, OUTPUT); } void loop() { int numero = lecturaMonitorSerial(); if (numero == 12) {
digitalWrite(led, HIGH); } else if (numero == 13) {
digitalWrite(led, LOW); } } int lecturaMonitorSerial() { if (Serial.available() > 0) { int numero = Serial.parseInt();
return numero;
} }
Encender/apagar led usando strings
Para encender el led usando strings usamos el siguiente código:
#define led 13 // pin de conexión del led String stringDeEntrada = ""; // string donde se almacenaran los datos de entrada bool stringCompleto = false; // bandera para comprobar si la cadena de caracteres esta completa void setup() { Serial.begin(9600); // declaramos a led como salida pinMode(led, OUTPUT); // reservamos 200 bytes para el stringDeEntrada: stringDeEntrada.reserve(200); } void loop() { if (stringCompleto) { // le quitamos el ultimo valor al string de entrada stringDeEntrada.remove(stringDeEntrada.length() - 1); /* comprobamos: si el string de entada es igual a "encender" entonces, se enciende el led.Si el string de entada es igual a "apagar" entonces, el led se apaga */ if (stringDeEntrada.equals("encender")) { digitalWrite(led, HIGH); } else if (stringDeEntrada.equals("apagar")) { digitalWrite(led, LOW); } //limpiamos el string stringDeEntrada = ""; stringCompleto = false; } } /* SerialEvent ocurre cada vez que llega un nuevo dato en el hardware serial RX. Esta rutina se ejecuta cada vez que se ejecuta void loop(), por lo que el uso de pausas dentro del void loop puede retrasar la respuesta. Pueden estar disponibles varios bytes de datos. */ void serialEvent() { while (Serial.available()) { // obtenemos el nuevo byte: char caracterDeEntrada = (char)Serial.read(); // añadimos ese dato a stringDeEntrada: stringDeEntrada += caracterDeEntrada; /* si el carácter entrante es una nueva línea, establecemos una bandera para que el ciclo principal pueda hacer algo al respecto: */ if (caracterDeEntrada == '\n') { stringCompleto = true; } } }
Cabe aclarar que para las comparaciones de strings en este caso se toma en cuenta que sean exactamente iguales (case sensitive) es decir que deberemos respetar letras mayúsculas y minúsculas. Si queremos que sea indiferente a esto, simplemente cambiamos el método:
stringDeEntrada.equals("encender")por:
stringDeEntrada.equalsIgnoreCase("encender")
REFERENCIAS
▷https://docs.arduino.cc/built-in-examples/communication/SerialEvent▷http://www.incb.com.mx/index.php/articulos/78-microcontroladores-y-dsps/2537-practicas-y-codigo-ejemplo-para-cadena-de-texto-o-string-con-arduino-uno-parte-2-mic032s
Publicar un comentario