Buenas tardes, llevo dias programando un arduino para poder calcular la velocidad en funcion del tiempo, porque la distancia no varias, este resultado lo quiero mostrar en 3 displays de 7 segmentos, no soy en experto en programacion he ido leyendo foros y cogiendo el codigo que me interesaba para primero poder mostrar numeros en los displays ya que son 3 displays de 7 segmentos individuales, y estan conectados con los pines individualmente, no estan multiplexados, el caso es que esta parte creo que ya la tengo por la mano o al menos a mi el programa ya me muestra digitos.
La idea de lo que quiero hacer es que el arduino calcule el tiempo que hay entre 2 pulsos (triggers) y a partir de ahi que en los dosplays me muestre la velocidad, lo unico que varia es el tiempo, el problema que tengo es que el arduino no me calcula la velocidad, si que puedo ver el tiempo y lo cuenta bien, pero la velocidad no. Los 2 pulsos que he comentado arriba son muy seguidos y me han comentado que seria interesante tener interrupciones para que el arduino cogiera los 2 pulsos, pero no tengo mucha idea de como hacerlo, este es el codigo:
int analogPin=3;
float num=0;
int centisegundo=0;
float decisegundo=0;
float segundo=0;
int minuto=0;
int hora=0;
int pausa=0;
float multi=0;
const int pulsador1=53;
const int pulsador2=32;
float t=0, d=0, v=0;
int num_array[10][7] = { { 1,1,1,1,1,1,0 }, // 0
{ 0,1,1,0,0,0,0 }, // 1
{ 1,1,0,1,1,0,1 }, // 2
{ 1,1,1,1,0,0,1 }, // 3
{ 0,1,1,0,0,1,1 }, // 4
{ 1,0,1,1,0,1,1 }, // 5
{ 1,0,1,1,1,1,1 }, // 6
{ 1,1,1,0,0,0,0 }, // 7
{ 1,1,1,1,1,1,1 }, // 8
{ 1,1,1,0,0,1,1 }}; // 9
void setup()
{
pinMode(0, OUTPUT); // Asignación de las salidas display 1
pinMode(1, OUTPUT);
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(85, OUTPUT); // Asignación de las salidas display 2
pinMode(84, OUTPUT);
pinMode(83, OUTPUT);
pinMode(82, OUTPUT);
pinMode(81, OUTPUT);
pinMode(80, OUTPUT);
pinMode(79, OUTPUT);
pinMode(78, OUTPUT);
pinMode(77, OUTPUT); // Asignación de las salidas display 3
pinMode(76, OUTPUT);
pinMode(75, OUTPUT);
pinMode(74, OUTPUT);
pinMode(73, OUTPUT);
pinMode(72, OUTPUT);
pinMode(71, OUTPUT);
pinMode(pulsador1,INPUT);
pinMode(pulsador2,INPUT);
}
void loop()
{
{
if(digitalRead(pulsador1)==HIGH) //con este pulsador incrementamos
{
pausa=0;
}
if(digitalRead(pulsador2)==HIGH) //con este pulsador decrementamos
{
pausa=1;
}
if(pausa==0) //el reloj tiene que contar
{
decisegundo++;
delay(100);
if(decisegundo>10)
{
decisegundo=0;
segundo++;
if(segundo>59)
{
segundo=0;
minuto++;
if(minuto>59)
minuto=0;
}
}
}
}
multi=decisegundo/100;
t=segundo+multi;
d=2.5;
v=(d/t);
num = t*10;
{
Num_Write(num);
}
}
// Esta funcion escribe el valor en los displays.
void Num_Write(int num)
{
int x, y, z;
y = num/100;
z = (num - y*100)/10;
x = (num - y*100 - z*10);
int pin1= 0;
for (int j=0; j < 7; j++) {
digitalWrite(pin1, num_array[y][j]);
pin1++;
}
int pin2= 85;
for (int j=0; j < 7; j++) {
digitalWrite(pin2, num_array[z][j]);
pin2--;
}
int pin3= 77;
for (int j=0; j < 7; j++) {
digitalWrite(pin3, num_array[x][j]);
pin3--;
}
}
Ahora mismo el trigger es un boton, mientras lo mantengo pulsado el tiempo aumenta, pero el display no me muestra el resultado de v= que es d/t, alguien me podria echar un cable? Llevo 3 dias sin parar y no consigo hacer que funcione, de paso si alguien ve que hay cosas mal agradeceria que me lo comentara para poder mejorarlo ya que seguro que hay muchas cosas de novato.
Gracias por vuestro tiempo.
Saludos!!