Holaaa necesito ayuda. Estoy haciendo un programa, consiste en detectar velocidades de animales con infrarrojos en secuencia, el problema es que mi código solo arroga resultados cuando son velocidades muy bajas y cuando mi animal pasa demasiado rápido no arroja resultados, ¿Que estoy haciendo mal? Sería de gran ayuda sus consejos. :’)
Este es mi código:
#include <LiquidCrystal.h>
#include <Wire.h>
//#include <avr/wdt.h> //libreria del watchdog
//Declarar LCD y pines
LiquidCrystal lcd(7,6,5,4,3,2);
const int sensorPin = 13;
const int sensorPin2 = 10;
const int sensorPin3 = 11;
const int sensorPin4 = 9;
const int sensorPin5 = 12;
const int sensorPin6 = 8;
//const int sensorPin = 8;
/*const int sensorPin = 8;
const int sensorPin2 = 12;
const int sensorPin3 = 9;
const int sensorPin4 = 11;
const int sensorPin5 = 10;
const int sensorPin6 = 13;*/
int cont=0;
unsigned long myTime;
float v1,v2,v3,v4,v5,vprom,myt1=0,myt2=0,myt3=0,myt4=0,myt5=0,myt6=0,t1=0;
int f1=1,fo=1,f2=1,f3=1,f4=1,f5=1;
int value = 0;
int value2 = 0;
int value3 = 0;
int value4 = 0;
int value5 = 0;
int value6 = 0;
int boton;
int contprom=0;
void setup() {
Serial.begin(9600); //iniciar puerto serie
pinMode(sensorPin , INPUT); //definir pin como entrada
pinMode(sensorPin2 , INPUT); //definir pin como entrada
pinMode(sensorPin3 , INPUT); //definir pin como entrada
pinMode(sensorPin4 , INPUT); //definir pin como entrada
pinMode(sensorPin5 , INPUT); //definir pin como entrada
pinMode(sensorPin6 , INPUT); //definir pin como entrada
//Definir las dimensiones del LCD (16x2)
lcd.clear();
lcd.begin(16,2);
lcd.setCursor(3,0);
lcd.print("LISTO PARA");
lcd.setCursor(2,1);
lcd.print("INICIAR TEST");
}
void loop(){
value = digitalRead(sensorPin); //lectura digital de pin
value2 = digitalRead(sensorPin2); //lectura digital de pin
value3 = digitalRead(sensorPin3);
value4 = digitalRead(sensorPin4); //lectura digital de pin
value5 = digitalRead(sensorPin5); //lectura digital de pin
value6 = digitalRead(sensorPin6);
myTime = millis();
detecta();
prom();
}
void detecta()
{
if(value==HIGH && fo==1)
{
lcd.setCursor(3,0);
lcd.print("LISTO PARA");
lcd.setCursor(2,1);
lcd.print("INICIAR TEST");
delay(1000);
lcd.clear();
}
if (value == LOW && fo==1) {
Serial.println("Se inicio el test");
myt1=(myTime); //10 cm
fo=0;
}
if(value2==LOW && f1==1){
Serial.println("30cm detectados");
myt2=millis();
t1=myt2-myt1;
t1=t1/1000;
Serial.println(myt2);
v1=0.200/(t1); // 20cm de velocidad
f1=0;
}
if(value3==LOW && f2==1){
Serial.println("50cm detectados");
myt3=millis();
t1=myt3-myt2;
t1=t1/1000;
Serial.println(myt3);
v2=0.200/(t1); // 20cm de velocidad
f2=0;
Serial.println(v2);
}
if(value4==LOW && f3==1){
Serial.println("70cm detectados");
myt4=millis();
t1=myt4-myt3;
t1=t1/1000;
Serial.println(myt4);
v3=0.200/(t1); // 20cm de velocidad
f3=0;
Serial.println(v3);
}
if(value5==LOW && f4==1){
Serial.println("90cm detectados");
myt5=millis();
t1=myt5-myt4;
t1=t1/1000;
Serial.println(myt5);
v4=0.200/(t1); // 20cm de velocidad
f4=0;
Serial.println(v4);
}
if(value6==LOW && f5==1){
Serial.println("110cm detectados");
myt6=millis();
t1=myt6-myt5;
t1=t1/1000;
Serial.println(myt6);
contprom=1;
v5=0.200/(t1); // 20cm de velocidad
f5=0;
Serial.println(v5);
}
if(contprom==1)
{
cont=1;
vprom=((v1+v2+v3+v4+v5)/5);
}
}
void prom()
{
if(cont==1)
{
Serial.println("primer valor");
// aqui vale 1 y se ha presionado una vez
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Vel 1:");
lcd.setCursor(7,0);
lcd.print(v1,3);
lcd.setCursor(12,0);
lcd.print("m/s");
delay(2500);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Vel 2:");
lcd.setCursor(7,0);
lcd.print(v2,3);
lcd.setCursor(12,0);
lcd.print("m/s");
delay(2200);
Serial.println("segundo on");
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Vel 3:");
lcd.setCursor(7,0);
lcd.print(v3,3);
lcd.setCursor(12,0);
lcd.print("m/s");
delay(2200);
Serial.println("tres 3 on");
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Vel 4:");
lcd.setCursor(7,0);
lcd.print(v4,3);
lcd.setCursor(12,0);
lcd.print("m/s");
delay(2200);
Serial.println("cuatro");
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Vel 5:");
lcd.setCursor(7,0);
lcd.print(v5,3);
lcd.setCursor(12,0);
lcd.print("m/s");
delay(2200);
Serial.println("prom");
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Vel Prm:");
lcd.setCursor(8,0);
lcd.print(vprom,3);
lcd.setCursor(13,0);
lcd.print("m/s");
delay(2200);
}
}