Tengo este código:
#include <LiquidCrystal.h> //Incluimos la libreria que contiene las funciones del display LCD
const int trigger=8;
const int echo=9;
float distance;
////////////////
int m, mu=0,md=0; //Declaramos las variables que vamos a usar
int s, su=0,sd=0;
int l, lu=0,ld=0,lc=0;
int pulsador;
int antes;
int despues;
int tiempo;
int velocidad;
int inicio;
////////////
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); //Configuramos las Entradas/Salidas a las que esta conectado el LCD
////////////////////////////////////////////////
void setup() {
Serial.begin(9600);
pinMode(trigger,OUTPUT);
pinMode(echo,INPUT);
lcd.begin(16,2);
//////////////////////////
lcd.setCursor(0,0);
lcd.print("D:");
lcd.setCursor(8,0);
lcd.print("V:");
/////////////////////
pinMode(6, INPUT); //Ponemos el pin 6 como entrada para el Sensor START/STOP
pinMode(7, INPUT); //Ponemos el pin 7 como entrada para el Pulsador RESET
pinMode(10,OUTPUT); //Ponemos el pin 10 como salida para mandar la señal al zumbador
antes=HIGH; //Ponemos la variable antes a HIGH
despues=HIGH; //Ponemos la variable despues a HIGH
}
/////////////
void loop() {
if(digitalRead(7)==LOW){ //Si el pin 7 esta LOW
analogWrite(10,100); //Mandamos una señal PWM con valor 100 al pin 10 (zumbador)
lcd.setCursor(4, 4); //Nos ponemos en el LCD en la segunda linea caracter 5
lcd.print("00:00:000"); //Escribimos 00:00:000 (Ponemos el cronometro a 0)
delay(200); //Establecemos un retardo de 200ms
lcd.setCursor(2,0);
lcd.print("0.00");
delay(200);
analogWrite(10,0); //Apagamos el zumbador
}
despues=digitalRead(6); //Guardamos en la variable despues el valor del pin6 (sensor start/stop)
if(despues==LOW&&antes==HIGH){ //Si el valor que tenia era LOW y ahora tiene HIGH sera porque lo hemos activado
analogWrite(10,100); //Mandamos una señal PWM con valor 100 al pin 10 (zumbador)
inicio=millis(); //Guardamos en inicio el tiempo que se lleva ejecutando el programa hasta que
//se activa el sensor start/stop
antes=despues; //cambiamos el valor de la variable antes al que tiene la variable despues
pulsador=0; //Ponemos la variable pulsador a 0
delay(200); //Establecemos un retardo de 200ms
while(pulsador==0){ //Cuando la variable pulsador sea 0
tiempo=millis()-inicio; //Calculamos el tiempo que paso desde que se activo el sensor start/stop
m=(tiempo/1000)/60; //Calculamos los minutos
mu=m%10; //Descomponemos los minutos y sacamos el valor de las unidades
md=(m-mu)/10; //Descomponemos los minutos y sacamos el valor de las decenas
s=(tiempo/1000)%60; //Calculamos los segundos
su=s%10; //Descomponemos los segundos y sacamos el valor de las unidades
sd=(s-su)/10; //Descomponemos los segundos y sacamos el valor de las decenas
l=(tiempo%1000); //Calculamos las milesimas de segundo
lu=l%10; //Descomponemos las milesimas y sacamos el valor de las unidades
ld=((l-lu)/10)%10; //Descomponemos las milesimas y sacamos el valor de las decenas
lc=(l-(ld*10)-lu)/100; //Descomponemos las milesimas y sacamos el valor de las centenas
lcd.setCursor(4, 4); //Ponemos el cursor en la linea 2 y el caracter 5
lcd.print(md); //Imprimimos los valores en el display
lcd.print(mu);
lcd.print(":");
lcd.print(sd);
lcd.print(su);
lcd.print(":");
lcd.print(lc);
lcd.print(ld);
lcd.print(lu);
{
//Inicializamos el sensor
digitalWrite(trigger,LOW);
delayMicroseconds(5);
// Comenzamos las mediciones
// Enviamos una señal activando la salida trigger durante 10 microsegundos
digitalWrite(trigger,HIGH);
delayMicroseconds(10);
digitalWrite(trigger,LOW);
// Adquirimos los datos y convertimos la medida a metros
distance=pulseIn(echo,HIGH); // Medimos el ancho del pulso
// (Cuando la lectura del pin sea HIGH medira
// el tiempo que transcurre hasta que sea LOW
distance=distance*0.0001657;
// Enviamos los datos medidos a traves del puerto serie y al display LCD
Serial.println(distance);
lcd.setCursor(2,0);
lcd.print(distance);
delay(500);
lcd.setCursor(6,0);
lcd.print("m");
}
despues=digitalRead(6); //Guardamos en la variable despues el valor del pin6 (sensor start/stop)
analogWrite(10,0); //Apagamos el zumbador
if(despues==LOW&&antes==HIGH){ //Si el valor que tenia era HIGH y ahora tiene LOW sera porque hemos activado
//el sensor
analogWrite(10,100); //Mandamos una señal PWM con valor 100 al pin 10 (zumbador)
antes=despues; //cambiamos el valor de la variable antes al que tiene la variable después
pulsador=1; //Ponemos la variable pulsador a 1
delay(200); //Establecemos un retardo de 200ms
analogWrite(10,0); //Apagamos el zumbador
}
antes=despues; //cambiamos el valor de la variable antes al que tiene la variable despues
}
}
antes=despues; //cambiamos el valor de la variable antes al que tiene la variable despues
}
Su objetivo es calcular velocidad.
Tiene un sensor ultrasónico que me calcula la distancia y también cuenta con un cronometro para el tiempo ambos valores (distancia y tiempo) me los imprime en un lcd 16x2.
Tanto el ultrasónico y el cronometro inicia, se pausan y se resetean con pulsadores.
Ahora solo me falta el último paso para aplicar la formula y me dé la velocidad solo que no sé cómo ya intente de varias formas y no da nada ejemplo:
Velocidad=distance/tiempo;
pero no imprime ningún valor
Me podrán ayudar para hacer esto es lo único que falta para terminar
nota: anteriormente publique un problema que tenía porque cuando iniciaba el cronómetro el sensor se detenía pero eso ya quedo solucionado.