Autor Tema: Abrir un porton con llamada celular "RING"  (Leído 1417 veces)

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

Desconectado mariacontenis

  • PIC16
  • ***
  • Mensajes: 114
Abrir un porton con llamada celular "RING"
« en: 24 de Marzo de 2014, 14:21:57 »
Saludos amigos del foro.

Pues resulta que ya termine el código funcional que había puesto en este post días pasados. Se trata para abrir un portón por medio de llamada celular y detectándose el RING que genera la llamada.
Con el RING activo una salida (pin_a0) durante 2 segundos para cerrar un relevador posteriormente. Para asegurarme de que no detecte otro RING, y cierre el relevador, realizo un retardo de 15 seg.
 ((:-))
Citar


         #include <18F4550.h>
         #fuses PLL1,CPUDIV1,USBDIV,XTPLL,NOFCMEN,NOIESO,PUT,NOBROWNOUT,VREGEN,NOWDT,NOPBADEN,MCLR,NOSTVREN,NOLVP,NODEBUG,PROTECT,NOSTVREN,NOCPB,NOWRT      
         #use delay(clock=48000000,RESTART_WDT)
         #include <lcd4x20.c>
         #use rs232(baud=9600, xmit=PIN_c6, rcv=PIN_c7, parity=N, bits=8,restart_wdt)
         #byte porta = 0xF80 #byte portb = 0xF81 #byte portc = 0xf82 #byte portd = 0xf83 #byte porte = 0xf84
         #priority rda      
        
         #define BUFFER_SIZE 60                          
         char buffer[BUFFER_SIZE];                      
         char b=0x00;                                    
         int  xbuff=0x00;
         unsigned int16 seg=0;
         int1 desborde=0,star=0;
        
         #INT_RTCC                                    
         void clock_isr()
         { set_timer0(19531); desborde=1; }
        
         #int_RDA
         RDA_isr() { if(kbhit()){ b=getc(); buffer[xbuff++]=b; } return 0; clear_interrupt(int_rda); }
        
         void inicbuff(void)
         { int i; for(i=0;i<buffer_size;i++){ buffer=0x00; restart_wdt(); } xbuff=0x00; }            
        
         void main()
         {
         lcd_init();        
         inicbuff();
         setup_timer_0(RTCC_INTERNAL | RTCC_DIV_256 );
         set_timer0(19531);        
         enable_interrupts(INT_RTCC);
         enable_interrupts(INT_RDA);
         enable_interrupts(GLOBAL);
         star=0; desborde=0;
        
         while (true)
         {
         lcd_gotoxy(2,1); printf(lcd_putc,"%02lu",seg);
         if (buffer[2]=='R' && buffer[3]=='I' && buffer[4]=='N' && buffer[5]=='G') { printf("AT+CHUP"); delay_ms(100); inicbuff(); star=1;}  
         if (star==1 && desborde==1) {desborde=0; seg++;}      
         if (seg>=1 && seg <=3) {output_high(pin_a0);}                                                              
         if (seg>=4 && seg<=15) {output_low(pin_a0);}
         if (seg==16) {seg=0; star=0;}                                                                        
         }        
         }
        


Lo que le quiero anexar es que se habrá solamente con el numero de llamada entrante, esto por que de vez en cuando las compañías celular hablan para ofrecer promocionales y quisiera evitar eso. Se que con el comando AT+CLIP=1  aparece el numero de llamada entrante. Solo que no se como capturar el numero y hacer la comparación para que el portón se habrá solo con ese numero celular.

Aquí pongo el código; espero me ayuden con su opinión o desarrollo para completar la parte que quiero anexar.
« Última modificación: 24 de Marzo de 2014, 14:25:00 por mariacontenis »


 

anything