jueves, 13 de agosto de 2020

ARDUINO - C - ¿Encender led's de un circuito al pulsar teclas?

    En el código que detallo a continuación se encienden ciertos led's al pulsar la tecla que corresponde al puerto digital al que hemos conectado cada uno de los led. Por ejemplo si pulsamos el 0, se encenderá o se apagará el led conectado al puerto 10 digital de nuestro arduino. Y si pulsamos el 3, pues el led conectado al puerto 13.


   Este es nuestro código en C ...

 // Array del 0 al 3 para usar los puertos digitales del 10 al 13
bool   puerto[4];


// Variable que usaremos para capturar el teclado 
char   Captura;


// Para convertir el Char en String
String capturaS;


void setup()
{
  // Preparamos los puertos digitales del 10 al 13 para ser de salida
  for (int i = 10; i <= 13; i++)
  {
    pinMode(i, OUTPUT);
  }
  
  // Se abre la comunicación tipo Puerto Serie a 9600 baudios
  Serial.begin(9600);
}


void loop()
{
  // Vaciamos la tecla capturada
  Captura = ' ';
  capturaS = "";
  
  if (Serial.available() > 0) 
  { 
    // Si la librería Serial mediante available es mayor que 0, entonces es que está funcionando el puerto serie
    // Leemos el puerto Serie para ver si han pulsado algo
    Captura = Serial.read();
    
    // Convierto el char en String para luego poderlo convertir en entero
    capturaS = Captura; 


    // Avisamos si no ha pulsado la tecla correcta
    if (    (Captura != '0')
         && (Captura != '1')
         && (Captura != '2')
         && (Captura != '3') )
    {
      // Como tenemos la comunicación serial abierta con la terminal
      // presentamos mensaje de elección incorrecta
      Serial.println("No es correcto, elija entre 0-3");
    }
  }


  for (long i = 10; i <= 13; i++) // Recorro los puertos digitales del 10 al 13
  {
    if (
         // Convierto el valor de la tecla pulsada en entero
         // y le sumo 10 para ver a que puerto digital relaciono
         ((capturaS.toInt() + 10) == i) && 


         // El puerto serie nos puede devolver algo sin pulsar
         ((capturaS) != "" )
       )
    {
      // Guardamos el On/Off del puerto
      puerto[(i - 10)] = not puerto[(i - 10)];
      // Le decimos al puerto que se ponga en On o en Off
      digitalWrite(i, puerto[(i - 10)]);
    }
  } 
 
}

   Este sería el esquema del circuito que deberíamos de crear para que este código funcionara ...



No hay comentarios:

Publicar un comentario