Hola amigos, por aca les traigo un codigo en picbasic, se trata de calcular distancias por ultrasonidos, es la primera vez que me compro un sensor de este tipo, el HC-SR04, tengo un PIC16F877A que uso para el caso de la medicion, bueno la cosa es que ya tengo el programa pero no entiendo, cuando el PIC inicia el programa me envia a la LCD 44 cm sin estar apuntando a algun objeto cercano, el sensor tiene un alcance de hasta 450 cm, veo que muestra un error cuando empieza a detectar algun objeto, le acerco la mano a unos 30cm de distancia y me da lecturas de 4cm, como puedo corregir el error? Le he tratado de modificar la ecuacion que dice "MEDIDA = MEDIDA / 54" MEDIDA es una variable de peso WORD. Denme una mano para ver como puedo corregir el error.
define OSC 4
TRISB = 0
TRISC = %00000010
DISPARO VAR PORTC.0 'PIN USADO PARA EL PULSO DE DISPARO
ECO VAR PORTC.1 'PIN USADO PARA EL ECO
MEDIDA VAR Word 'VARIABLE de 16 bits PARA ALMACENAR LA MEDIDA
Define LCD_DREG PORTB 'bit de datos del LCD empezando
Define LCD_DBIT 4 'por B.4 ,B.5, B.6 y B.7
Define LCD_RSREG PORTB 'bit de registro del LCD conectar
Define LCD_RSBIT 3 'en el puerto B.3
Define LCD_EREG PORTB 'bit de Enable conectar en el
Define LCD_EBIT 2 '"puerto B.2
PAUSE 500
LCDOUT $FE,1
;*******************************************************************************
PROCESO:
pause 10
disparo = 0 'Inicializa el valor de DISPARO
PulsOut DISPARO,5 'Manda un pùlso de disparo para empezar a medir
GoSub LEER_ECO 'Llamada a funcion para leer el ancho del eco recibido
GoTo proceso 'Vuelve e iniciar cuando se ha leido el eco
;*******************************************************************************
LEER_ECO:
Select Case eco 'si hay eco no manda pulso de disparo
Case 1 'Si no nay eco
GoTo proceso 'Vuelve a iniciar el proceso
Case 0 'Si hay eco 'Funcion de leer el eco
PulsIn ECO,1,MEDIDA 'Lee el acho del pulso de eco y lo guarda en medida
medida = MEDIDA/54 'para convertir en cm
Lcdout $fe, 1, "DISTANCIA:", #medida, " cm" 'Muestra el valor medido en el LCD
If medida <10 Then
lcdout $FE, $C0
Lcdout "Cuidado" 'Aviso
EndIf
GoTo proceso 'Vuelve a lanzar el proceso 'Vuelve a lanzar el proceso
End Select
End