Tengo un código que me imprime la distancia de un ultrasónico en una lcd de 16x2 mismo que también tiene un cronómetro que se activa y se pausa con un pulsador el problema es que al pulsar para que inicie el conteo del cronómetro el sensor ultrasónico se detiene solo queda la última distancia que calculo ya intente arreglar el problema pero no pude ya que lo que pensaba que era el problema no lo fue.
Les dejo el código a ver si me pueden decir cuál es el problema.
#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,antes,despues;
long int tiempo,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);
//////////////////////////
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
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 HIGH y ahora tiene LOW 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);
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
//////////////////////////////////////////////////////////////////////////////
{
//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(0,0);
lcd.print(distance);
delay(100);
}
}