Bir veri aldıktan sonra yenisi gelene kadar başka veri almamak[Çözüldü]

Başlatan baran123, 15 Ağustos 2014, 22:41:18

baran123

İyi akşamlar, merak ettiğim bir nokta var bilgisayara seri kesmeden gelen karakterleri yolluyorum ama bir veri geldi mi örneğin 'a' bu sürekli gidiyor ben bunu a'nın sadece bir kere gitmesini istiyorum bunun için veriyi alıp işledikten sonra null mu yapmalı ?


t2

Şart değil. 3 de olur. Böylece sürekli 3gider.

Yani a gitmesini istemiyorsanız artık gondermezsiniz veya başka şey gönderirsiniz

baran123

@t2 hocam anlayamadım ileti eksik falan mı geldi ?

mesaj birleştirme:: 15 Ağustos 2014, 22:49:53

hocam kesme bluetooth modulune baglı aldıgı verıyı sureklı pc ye yolluyor 18F2550 kullanıyorum.PC de c# arayüzüde sürekli kontrol ediyor ve bir text box a yazıyor.O yüzden a ya basınca a gitsin bir kere sonra hiç gitmesin b ye basınca b bir kere gitsin daha gitmesin şeklinde

Kabil ATICI

bayrak kullan.
Yani normalde bayrak=0 yap

veri geldiği zaman bayrak=1 yap
eğer bayrak==1 ise
veriyi geri gönder
bayrak=0 yap.

böylece gelen veri sadece 1 kez geri gönderilmiş olur.
gerekli şartları istediğin gibi düzenle.
ambar7

baran123

bayrak denedim ama sürekli kesmeye giriyor galiba hc06 dan sürekli veri alıyor kodlara göz atabilir misiniz rica etsem ?

int bayrak = 0;
char gelen;
unsigned int8 paket[64];

#int_rda
void modul_kesmesi()
{ 
   disable_interrupts(int_rda);
   
   bayrak++; 
   
   if(bayrak == 1)
   {
      gelen = getch();   
   
      if(gelen == 'a')
      {
         output_high(pin_B6);
      }
      
      if(gelen == 's')
      {
         output_low(pin_B6);
      }
      bayrak = 0;
   }
}

void main(void)
{
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
   
   set_tris_b(0x00);
   output_b(0x00);
   set_tris_c(0x80);
   
   usb_init();                      
   usb_task();                    
   usb_wait_for_enumeration();
   
   output_high(pin_B7);
   enable_interrupts(GLOBAL);
   
   while(TRUE)
   {      
      while(usb_enumerated())
      {
         enable_interrupts(int_rda);
         
         if (usb_kbhit(1))
         {           
            usb_get_packet(UcNokta1, paket, 64);  
         }
         
         paket[1] = (int8)gelen;
         
         usb_put_packet(UcNokta1, paket, 64, USB_DTS_TOGGLE);
      }
   }
}


mesaj birleştirme:: 15 Ağustos 2014, 23:17:46

tamamdır usb ye göndermeyi kesme içinde yaptım bilgi gelince usb den tek sefere mağsus gönderiyor teşekkürler saygı değer hocalar :)

Kabil ATICI

if(bayrak==1)  ile ilgili bölüm  veriyi bilgisayarak gönderdiği yerde olması gerekir.

if(bayrak==1)
{
paket[1] = (int8)gelen;
usb_put_packet(UcNokta1, paket, 64, USB_DTS_TOGGLE); //belki emin değilim. işlem sonrası paket[1] siliniyorsa if dışı bırakılabilir.
bayrak=0;
}
gibi.
çünkü sen verileri bilgisayara  usb üzerinden geri gönderiyorsun. Ve bu işi bir döngü içinde yapıyorsun. Sadece veri geldiği zaman usb üzerinden geri gönderilmesi gerekir.


basitçe üzerinden geçersek;
bluetooth'dan veri geldi ise bayrak=1
..
..
..
ana döngü içinde;
bayrak==1 ise
gelen veriyi USB üzerinden geri gönder.
bayrak=0

olay bu.

bluetooth üzerinde sen bilgisayardan (veya kaynağın ne ise) veri göndermedikçe kendi kendine veri gelmemesi gerekir. Bunu kontrol edebilmen gerekir.
ambar7