Autor Tema: Interrupción serial Bluetooth  (Leído 2238 veces)

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

Desconectado CorvoKenwayBTF

  • PIC10
  • *
  • Mensajes: 1
Interrupción serial Bluetooth
« en: 18 de Junio de 2019, 21:21:51 »
Hola!, muy buenas tardes a todos.

Estoy desarrollando un proyecto con el PIC 16F877a y con un módulo Bluetooth con el que quiero controlar un motor a pasos que de vuelta constantemente el código es el siguiente:
Código: C++
  1. #include <16F877A.h>
  2. #fuses XT,NOWDT,NOCPD,NOLVP,NOWRT,PUT,NODEBUG,NOPROTECT,NOBROWNOUT
  3. #use delay (clock = 4000000)
  4. #use fast_io(C)
  5. #use RS232 (BAUD=9600,BITS=8,PARITY=N,XMIT=PIN_C6,RCV=PIN_C7)
  6.  
  7. char valor;
  8.  
  9.  
  10. void main ()
  11. {
  12.   set_tris_d(0);
  13.  
  14.   output_d(0);
  15.  
  16.   while (TRUE)
  17.   {
  18.       valor = getc();
  19.  
  20.      if( valor == 'F')
  21.    {
  22.    do{
  23.       output_d(9);
  24.       delay_ms(5);
  25.       output_d(3);
  26.       delay_ms(5);
  27.       output_d(6);
  28.       delay_ms(5);
  29.       output_d(12);
  30.   delay_ms(5);
  31.    }while(valor == 'F');    
  32.    }
  33.      
  34.      if(valor == 'B')
  35.    {
  36.       output_d(12);
  37.       delay_ms(5);
  38.       output_d(6);
  39.       delay_ms(5);
  40.       output_d(3);
  41.       delay_ms(5);
  42.       output_d(9);
  43.       delay_ms(5);
  44.    }
  45.      if(valor == 'S')
  46.    {
  47.      output_d(0);
  48.    }
  49.   }
  50. }
El problema es el siguiente, obviamente hay un ciclo Do - While el cual mantiene el motor a pasos dando vuelta constantemente, este ciclo se activa al mandar la letra F al Bluetooth desde una App de Android, esta App es un control con flechas hacia adelante, atrás, lados y un botón central que funciona mandando S para detener el motor, mi problema llega cuando al mandar F se activa el ciclo pero no puedo interrumpir el ciclo mandando otra letra desde el control, o sea, el programa sólo funciona una vez porque se queda atorado en el ciclo, ¿podrían explicarme cómo puedo interrumpir el ciclo mandando otra letra desde el control?

como ya mencioné estoy usando un PIC 16F877A, un módulo Bluetooth HC-06 y la App la desarrollé en MIT App Inventor 2.

Gracias de antemano.
« Última modificación: 18 de Junio de 2019, 21:25:58 por CorvoKenwayBTF »

Desconectado planeta9999

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3520
    • Pinballsp
Re:Interrupción serial Bluetooth
« Respuesta #1 en: 18 de Junio de 2019, 22:55:23 »

Prueba así.


Código: C
  1. #include <16F877A.h>
  2. #fuses XT,NOWDT,NOCPD,NOLVP,NOWRT,PUT,NODEBUG,NOPROTECT,NOBROWNOUT
  3. #use delay (clock = 4000000)
  4. #use fast_io(C)
  5. #use RS232 (BAUD=9600,BITS=8,PARITY=N,XMIT=PIN_C6,RCV=PIN_C7)
  6.  
  7. void main ()
  8. {
  9.   set_tris_d(0);
  10.   output_d(0);
  11.   char valor;
  12.   int marcha=3;  
  13.  
  14.   while (1)
  15.   {
  16.      valor = getc();
  17.      if(valor=='S') marcha=0;
  18.       else if(valor=='F') marcha=1;
  19.        else if(valor=='B') marcha=2;
  20.  
  21.   switch(marcha)          
  22.     {
  23.      case '1'
  24.       output_d(9);
  25.       delay_ms(5);
  26.       output_d(3);
  27.       delay_ms(5);
  28.       output_d(6);
  29.       delay_ms(5);
  30.       output_d(12);
  31.       delay_ms(5);
  32.       break;
  33.      case '2'
  34.       output_d(12);
  35.       delay_ms(5);
  36.       output_d(6);
  37.       delay_ms(5);
  38.       output_d(3);
  39.       delay_ms(5);
  40.       output_d(9);
  41.       delay_ms(5);
  42.       break;
  43.      case '0'
  44.       output_d(0);
  45.       marcha=3;
  46.     }
  47.   }
  48. }
« Última modificación: 18 de Junio de 2019, 23:05:47 por planeta9999 »


 

anything