Autor Tema: Problemas 2 sensores ultrasonido  (Leído 1000 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado sirslaps

  • PIC10
  • *
  • Mensajes: 3
Problemas 2 sensores ultrasonido
« en: 11 de Julio de 2016, 11:51:45 »
Buen día

me encuentro programando 2 sensores de ultrasonido hy-srf05  en simultaneo, utilizando un  pic 16f877a donde necesito enviar, las 2 distancias en una cadena de caracteres por puerto serial; sin embargo solo me esta tomando un dato y el otro no lo mide siempre me muestra un 0;  en otras palabras solo esta operando un sensor, les enseño el código para que me recomiende y evalúen a ver si es que me falta algo o esta mal hecho, muchas gracias.

Código: CSS
  1. #include <16f877a.h>
  2. #fuses XT,NOWDT,NOPROTECT,NOLVP,NOWRT,NOBROWNOUT
  3. #use delay(clock=4000000)
  4. #USE RS232(BAUD=9600,BITS=8,PARITY=N, XMIT=PIN_C6, RCV=PIN_C7, STREAM=COM_A)
  5. #byte port_a=5
  6. #byte port_b=6
  7. #byte port_d=8
  8. #define trigD pin_A0
  9. #define echoD input(pin_A1)
  10. #define trigI pin_B0
  11. #define echoI input(pin_B1)
  12. #include <stdlib.h>
  13. int16 EnviaDerecho;
  14. int16 EnviaIzquierdo;
  15.  
  16. char c;
  17. int d;
  18.  
  19. int16 SensorDerecho(void){
  20.    int16 centimetrosD=0;
  21.    output_high(trigD);
  22.    delay_us(50);
  23.    output_low(trigD);
  24.    while(echoD==0);
  25.    while(echoD==1){
  26.       if (centimetrosD < 80){
  27.          centimetrosD++;
  28.          delay_us(58);
  29.       }
  30.    }  
  31.    delay_ms(50);
  32.    return(centimetrosD);
  33. }
  34.  
  35. int16 SensorIzquierdo(void){
  36.    int16 centimetrosI=0;
  37.    output_high(trigI);
  38.    delay_us(50);
  39.    output_low(trigI);
  40.    while(echoI==0);
  41.    while(echoI==1){
  42.       if (centimetrosI < 80){
  43.          centimetrosI++;
  44.          delay_us(58);
  45.       }
  46.    }  
  47.    delay_ms(50);
  48.    return(centimetrosI);
  49. }
  50.  
  51.  
  52.  
  53. void main (){
  54.    
  55.    SET_TRIS_A( 0x02 );
  56.    SET_TRIS_B( 0x02 );
  57.    set_tris_d(0x00);
  58.    setup_ccp1(CCP_PWM);   // Primero se configura el PWM a utilizar
  59.    setup_ccp2(CCP_PWM);   // Primero se configura el PWM a utilizar
  60.    setup_timer_1(T1_INTERNAL|T1_DIV_BY_1);
  61.    setup_timer_2(T2_DIV_BY_16,255,1);  // El periodo de la señal PWM
  62.    set_pwm1_duty(0);
  63.    set_pwm2_duty(0);
  64.    Delay_ms(200);
  65.  
  66.    while (true)
  67.    {
  68.  
  69.       c = getc(COM_A);
  70.       d= atoi(c);
  71.  
  72.          EnviaIzquierdo=SensorIzquierdo();
  73.          EnviaDerecho=SensorDerecho();
  74.          printf("%Lu cm %LU cm",EnviaDerecho,EnviaIzquierdo);
  75.      
  76.  
  77.      
  78.     }
  79. }


 

anything