Contenido del curso

Actividad 14

 

Control de un cronómetro

Estás creando un cronómetro simple para una competencia de tiempos. En esta actividad, utilizaremos los dos pulsadores conectados en modo Pull-Up.

El primer pulsador se encargará de iniciar y detener el cronómetro. Al presionarlo por primera vez, el cronómetro comenzará a contar mientras se muestra el tiempo por el Monitor Serial, y al presionarlo nuevamente, se detendrá e indicará el momento en el que se ha detenido. El segundo pulsador tendrá la función de reiniciar el cronómetro, devolviendo el tiempo a cero para comenzar una nueva medición.

El reto aquí será programar los pulsadores para que detecten de manera precisa las transiciones entre inicio, parada y reinicio del cronómetro, asegurando que cada acción se ejecute en el momento correcto.


Recuerda que la extensión de MentorBit para mBlock incluye el siguiente bloque con el que podemos
elegir de qué pulsador tomar la medida:


Recuerda que para incluir una librería previamente instalada en nuestro programa, debemos utilizar
la sentencia siguiente:

#include <MentorBit.h>

En nuestro ejemplo incluiremos la librería MentorBit, que facilita el uso de los componentes básicos de la
placa.
Recuerda que la librería de MentorBit da acceso a las conexiones de los diferentes pulsadores
empleando las siguientes referencias:

- miObjetoMentorBit.PULSADOR_PULLUP_DIGITAL

- miObjetoMentorBit.PULSADOR_PULLUP_ANALOGICO
Para leer la señal de un pulsador, debemos realizar la lectura digital del pin donde se encuentre
conectado utilizando la siguiente función:

digitalRead(pin);

Donde pin es el número identificador del pin donde está conectado el pulsador. Cuando trabajamos
con pulsadores, combinamos el uso de la función anterior con un condicional para realizar una tarea
específica si dicho pulsador se ha accionado. Deberá compararse con el estado contrario al normal
debido a su configuración (un pulsador en Pull Down, normalmente estará en LOW, mientras uno en
Pull High estará por defecto en HIGH). Por ejemplo, para detectar la acción de un pulsador en Pull Down:

if(digitalRead(pin) == HIGH) {

    // Líneas a ejecutar

}
Para leer la señal de un pulsador, debemos realizar la lectura analógica del pin donde se encuentre
conectado utilizando la siguiente función:

analogRead(pin);

Donde pin es el número identificador del pin donde está conectado el pulsador. Cuando trabajamos
con pulsadores, combinamos el uso de la función anterior con un condicional para realizar una tarea
específica si dicho pulsador se ha accionado. Deberá compararse con el estado contrario al normal
debido a su configuración (un pulsador en Pull Down, normalmente estará en 0, mientras uno en
Pull High estará por defecto en 1023). Por ejemplo, para detectar la acción de un pulsador en Pull Down:

if(analogRead(pin) > 0) {

    // Líneas a ejecutar

}

También puedes trabajar los pines analógicos como si fueran pines digitales a la hora de leer sus estados
siempre que tengas conectado algún elemento simple que devuelve señales binarias (como los
pulsadores, que están abiertos o cerrados, sin más opciones intermedias).


Puedes descargar la solución pinchando en el siguiente icono:

 

#include <MentorBit.h>

// Declaración de instancia de la clase
MentorBit miMentorBit;

// Variable para llevar el control del cronómetro
bool crono_en_marcha = false;

// Variable para almacenar el tiempo transcurrido durante la medición
unsigned long tiempo_inicio = 0;
unsigned long tiempo_total = 0;

// Inicialización del sketch
void setup() {

    // Inicialización del Monitor Serial
    Serial.begin(9600);

}

// Bucle principal del sketch
void loop() {

    // Comprobar la lectura del pulsador Pull-Up digital (INICIO / PAUSA)
    if(digitalRead(miMentorBit.PULSADOR_PULLUP_DIGITAL) == LOW) {

        // Comprobamos que el cronómetro esté contando el tiempo en este momento
        if(crono_en_marcha) {

            // En este caso, pausamos el conteo de tiempo
            tiempo_total += millis() - tiempo_inicio;
            crono_en_marcha = false;
            // Mostramos el valor del cronómetro en el momento de la pausa
            Serial.print("Cronómetro detenido: ");
            Serial.print(tiempo_total);
            Serial.println(" ms");

        } else {

            // Iniciamos la cuenta del tiempo y lo indicamos por el Serial
            tiempo_inicio = millis();
            crono_en_marcha = true;
            Serial.println("Cronómetro iniciado.");

        }

        // Esperamos que se deje de accionar el pulsador
        while(digitalRead(miMentorBit.PULSADOR_PULLUP_DIGITAL) == LOW) {}

    }

    // Comprobar la lectura del pulsador Pull Down en pin digital (REINICIO)
    if(digitalRead(miMentorBit.PULSADOR_PULLUP_ANALOGICO) == LOW) {

        // Esperamos que se deje de accionar el pulsador
        while(digitalRead(miMentorBit.PULSADOR_PULLUP_ANALOGICO) == LOW) {}

        // Reiniciamos el cronómetro por completo
        tiempo_inicio = 0;
        tiempo_total = 0;
        crono_en_marcha = false;
        Serial.println("Cronómetro reiniciado a 0.");

    }

    // Mientras el cronómetro esté contando el tiempo mostramos por Serial la cuenta
    if(crono_en_marcha) {

        Serial.print("Tiempo actual: ");
        Serial.print(tiempo_total + (millis() - tiempo_inicio));
        Serial.println(" ms");
        delay(100);

    }

}

Puedes descargar la solución sin utilizar nuestra librería en el siguiente icono:

Vistas
13 Número de vistas
13 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.