Actividad 7

 

Control de 1 LED por Puerto Serie

En este ejercicio, conectaremos el LED al pin 9 (podemos reutilizar alguno de los montajes anteriores).

Mediante el comando ‘Enciende LED’ se activará el pin 9 hasta recibir el comando ‘Apaga LED’.  En cada caso el Arduino enviará por puerto serie el estado del LED de la siguiente forma: ‘Estado del LED: On/Off’.

Para este ejercicio necesitaremos hacer uso de las estructuras de control switch() y el bucle while().

 

 

Como veremos al ejecutar el ejemplo, continuamente se nos envía un mensaje con el estado del LED. Si queremos que este mensaje se envíe, por ejemplo, solo cada segundo podríamos usar un delay. Pero eso pausaría toda la ejecución durante un segundo.

Existe otro método y consiste en almacenar el tiempo en cada ejecución con la función millis().

const int pin_led = 9;          // Definimos el pin donde conectamos el LED
// Para hacer la pausa usaremos la función millis(), para esto necesitaremos
// la siguiente variable donde guardaremos el valor de millis() después de
// imprimir cada mensaje
unsigned long tiempo_transcurrido = 0;

void setup() {

  Serial.begin(9600);           // Inicializamos la comunicación serial

  pinMode(pin_led, OUTPUT);     // Inicializamos el pin del LED como salida
  digitalWrite(pin_led, LOW);   // Apagamos el LED

}

void loop() {

  // Comprobamos que tengamos datos entrantes en el Serial
  if(Serial.available()) {

    String mensaje = Serial.readString(); // Leemos la cadena de texto

    // Comprobamos que nos ordenen encender el LED
    if(mensaje == "Enciende LED")
      digitalWrite(pin_led, HIGH);

    // Comprobamos que nos ordenen apagar el LED
    if(mensaje == "Apaga LED")
      digitalWrite(pin_led, LOW);

  }

  // Comprobamos que desde la última vez que se imprimió
  // el estado hayan pasado 1000ms = 1s
  if(millis() - tiempo_transcurrido > 1000) {

    // Imprimos el estado del LED
    Serial.print("Estado del LED: ");

    // Si está en ALTA enviamos On
    if(digitalRead(pin_led) == HIGH)
      Serial.println("On");

    // Si está en BAJA enviamos Off
    if(digitalRead(pin_led) == LOW)
      Serial.println("Off");

    // Guardamos el valor de millis() actual para esperar otros 1000ms = 1s
    tiempo_transcurrido = millis();

  }

}
Vistas
29 Número de vistas
29 Vistas de miembros
0 Vistas públicas
Acciones
0 Gustos
0 No me gusta
0 Comentarios
Compartir en redes sociales
Compartir enlace
Compartir por correo

Por favor iniciar sesión para compartir esto webpage por correo.