Objetivos
- Hacer un contador de tiempo entre dos interrupciones.
- Contar tiempos en una carrera de robot
Material requerido
|
|
|
|
|
|
|
|
|
Carrera de robots y contador de tiempos.
En esta entrada vamos a mezclar la utilización dos de los sensores vistos anteriormente, el display de 7 segmentos y 4 dígitos y el sensor de distancia.
Para ello lo vamos a hacer es poner el contador a cero cuando el robot se encuentre a menos de 20 centímetros del sensor (este dato lo puedes cambiar) y empezar a contar en cuanto salga de nuestro alcance. Cuando el robot vuelva a su posición de inicio pararemos el contador, obteniendo el tiempo transcurrido:
El esquema.
Hay que unir los dos esquemas vistos en las entradas:
El programa:
#include <TM1637.h>
#define CLK 3
#define DIO 2
#define trigPin 13
#define echoPin 12
#define led 4
TM1637 display1(CLK, DIO);
int8_t digitos[] = {3, 2, 1, 2} ;
int conta = 0;
void setup() {
// el display
display1.set();
display1.init();
// el sensor de distancia y el led
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(led, OUTPUT);
}
void loop() {
// put your main code here, to run repeatedly:
int limite = 20;
long duracion, distancia;
boolean carrera = false;
digitalWrite(trigPin, LOW); // trigger desactivado
delayMicroseconds(2);
digitalWrite(trigPin, HIGH); // Activamos el pulso
delayMicroseconds(10); // Esperamos 10µs.
digitalWrite(trigPin, LOW); // Cortamos el pulso
duracion = pulseIn(echoPin, HIGH) ;
distancia = duracion * 0.017 ;
if ( distancia < limite){
// si esta a menos de 20 cm encendemos led y poner el contador a cero
digitalWrite ( led , HIGH);
conta=0;
}
else{
digitalWrite( led , LOW) ;
conta++;
calculaDigitos(conta);
carrera=true;
}
delay (500) ; // Para limitar el número de mediciones
}
void calculaDigitos(int num){
int8_t digit0 = num % 10 ;
int8_t digit1 = (num % 100) / 10 ;
int8_t digit2 = (num % 1000) / 100 ;
int8_t digit3 = num / 1000 ;
digitos[3] = digit0 ;
digitos[2] = digit1 ;
digitos[1] = digit2 ;
digitos[0] = digit3 ;
display1.display(digitos);
}