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
¡Hola! Nos alegra mucho que hayas llegado hasta aquí y que estés leyendo este artículo en Edeptec.
Este formulario es un espacio abierto para ti: puedes dejar un comentario con tus dudas, sugerencias, experiencias o simplemente tu opinión sobre el tema tratado.
» ¿Te resultó útil la información?
» ¿Tienes alguna experiencia personal que quieras compartir?
» ¿Se te ocurre algún tema que te gustaría ver en próximos artículos?
Recuerda que este espacio es para aprender y compartir, por eso te animamos a participar de manera respetuosa y constructiva. Tus comentarios pueden ayudar a otros lectores que están en el mismo camino, ya sea en electrónica, programación, deportes o tecnología.
¡Gracias por ser parte de esta comunidad de aprendizaje! Tu participación es lo que hace crecer este proyecto.