▷ Encender y apagar led utilizando caracteres, números o strings (Arduino)

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

0/Post a Comment/Comments