Problemas con la LCD, velocimetro?

Buenas he estado haciendo un proyecto escolar, el cual debe calcular la velocidad media de un objeto, utilizando un sensor, consiste en tomar dos mediciones de distancia y tiempo para obtener la velocidad.
Tengo algunos problemas con la LCD, por favor si alguien le puede echar un ojo para ver si en algo estoy fallando o si quieren complementarlo se los agradeceria mucho.
Saludos.



Código:
//_________________________________________________________________________________ //
// programa que permite medir la velocidad media de un objeto utilizando un sensor  //
// por ultrasonido, el cual lo que hace es tomar dos mediciones de distancia y      //
// tiempo para calcular la velocidad media a la cual el objeto se esta moviendo     //
// y mostramos los datos en una LCD...                                              //
//                                                                                  //
// se utilizo un PIC 16F877A ya que es el que se tenia disponible y una lcd de 16*2 //
                                                                                //



#include <16F877A.h>

#use delay(clock=4000000)

#fuses NOCPD,NOWDT,BROWNOUT,PUT,XT,NOWRT,NOLVP,NODEBUG,NOPROTECT //0x3F71

#define use_portb_lcd TRUE //selecciono puerto b para el LCD

#include <lcd.c>

#define sw1 PIN_D0  //definimos el PIN_D0 para el activador

#define sensor PIN_D1 //definicmos el PIN_D1 para el sensor ultrasonido

float tiempo1, tiempo2, distancia1, distancia2, velocidadmedia; // variables a utilizar

void main(){

lcd_init(); //inicializa la LCD

port_b_pullups(true); //activanmos pull ups

enable_interrupts(global); //activamos las interrupciones

setup_timer_1(T1_INTERNAL | T1_DIV_BY_1); //prescaler 1:1 cada incremento= 1ms

delay_ms(1000);

//__________________________Inicio del programa principal____________________//

inicio:

set_tris_d(0x1); //configuramos el trisd

output_low(sensor); //garantizamos un nivel bajo en el sensor

delay_ms(100);

if (input(sw1)){ //si pulsador activo entonces medimos velocidad

   lcd_putc("\\fencendido\\n");

   delay_ms(1000);
   
//_____________________________primera Medicion________________________________//

   output_low(sensor);  // nivel bajo en sensor

   delay_ms(10); //retardo mietras se prepara

   output_high(sensor); // activamos el sensor 

   delay_ms(10); // retardo mientras se envia el pulso de ultrasonido

   set_tris_d(0xff); //cambiamos el trisd ahora como entrada

   for ( ; !input(sensor); );            // Espero el inicio del pulso del eco (flanco de subida)

   set_timer1(0);                                 // Cuando llegue pon a cero el Timer1

   for ( ; input(sensor); );              // Espero al final del pulso del eco (flanco de bajada)

   tiempo1 = get_timer1(); // capturo el primer intervalo de tiempo

   distancia1= tiempo1/58; //calculo la distancia1 del objeto

   delay_ms(1000); // retardo opcional solo para ver la variacion de distancia


//_____________________________segunda medicion________________________________//

   set_tris_d(0x1); // se reconfigura nuevamente el trisd

   output_low(sensor); // se garantiza un nivel bajo

   delay_ms(10); // retardo mientras se prepara

   output_high(sensor); // se activa el sensor

   delay_ms(10); // retardo mientras se envia el pulso

   set_tris_d(0xff); // ahora configuramos en pin como entrada

   for ( ; !input(sensor); );            // Espero el inicio del pulso del eco (flanco de subida)

   set_timer1(0);                                 // Cuando llegue pon a cero el Timer1

   for ( ; input(sensor); );              // Espero al final del pulso del eco (flanco de bajada)

   tiempo2 = get_timer1(); // capturo el primer intervalo de tiempo

   distancia2= tiempo2/58; //calculo la distancia2 del objeto

   delay_ms(50);

//______________________________________________________________________________//

// ahora con las variaciones de distancia y tiempo se calcula la velocidad media//

//________ velocidadmedia= (distancia2-distancia1)/(tiempo2-tiempo1) ___________//

//______________________________________________________________________________//

tiempo1=tiempo1/1000000; //llevamos tiempo1 a segundos

tiempo2=tiempo2/1000000 ;//llevamos tiempo2 a segundos

distancia1= distancia1/100 ;//llevamos distancia1 a metros

distancia2=distancia2/100  ;//llevamos distancia2 a metros

velocidadmedia=(distancia2-distancia1)/(tiempo2-tiempo1);//unidades metros/segundos

//__________________mostramos los datos en la LCD________________________________//


lcd_gotoxy(1,1);

printf(lcd_putc," %f m",distancia1);

lcd_gotoxy(1,2);

printf(lcd_putc," %f m",distancia2);

delay_ms(5000);

lcd_gotoxy(1,1);

printf(lcd_putc," %f seg",tiempo1);

lcd_gotoxy(1,2);

printf(lcd_putc," %f seg",tiempo2);

delay_ms(5000);

lcd_gotoxy(1,1);

lcd_putc("\\fVelocidad Media\\n");

lcd_gotoxy(1,2);

printf(lcd_putc," %f m/seg",velocidadmedia);

delay_ms(5000);

  goto inicio; // nos devolvemos al inicio

//_____________________________________________________________________________//

}
else { // si el pulsador es cero

set_tris_d(0x1); // garantizamos que el pin este como salida del sensor

output_low(sensor); // dejamos un nivel bajo por seguridad

lcd_putc("\\fapagado\\n"); // mostramos mensaje en la LCD

delay_us(10); // delay

goto inicio;
}
} ...
 
Última edición por un moderador:
Y cuál es el problema que tienes ??? Sería interesante que nos cuentes esto para poder orientarte. Saludos
 
Atrás
Arriba