Haberler:

Eposta uyarılarını yanıtlamayınız ( ! ) https://bit.ly/2J7yi0d

Ana Menü

Döngü Sorunu

Başlatan dragonfly, 08 Şubat 2015, 19:37:25

dragonfly

#15
Alıntı YapArkdadaşım, aşağıda videoda görüldüğü gibi bir düzenleme yaptım.Döngüden çıkabilmen için döngüde dönen kodların sonuna gelmesi  gerekir.Döngüde dönen programdan çıkabilmen için butona basılı tutman gerekir.Düzenlediğim kodlarıda gönderiyorum.Olmayan ya da anlaşılmayan bir yer varsa bana tekrar bildir.Elimden geldiğince yardımcı olurum.

Sayın Recep hocam. Sizin gönderdiğiniz kodda döngüden çıkmak istediğimizde sizinde belirttiğiniz gibi butona uzun basmak gerekiyor. Böyle olunca da bastığımız butonun fonksiyonu bazen devreye girebiliyor. Daha stabil bir kod yazılabilir mi?

Sayın Recep Hocam ve forum üyeleri illa bu kodlar olması şart değil. Daha başka metotla bu devreyi çalıştırabilir miyiz?

Recep METE

#16
Arkadaşım döngüler tek butonda olursa daha stabil olur. Butona her basista baska donguye girebilir.

mesaj birleştirme:: 17 Şubat 2015, 21:10:58

Yeni bir kod yazıp göndereceğim.
printf(lcd_putc,"\f  Ne kadar okursan oku, bilgine, yakışır şekilde davranmıyorsan cahilsin demektir.  \n   semfero");d

Recep METE

#17
Akadaşım kodların yeniden düzenlenmiş eskisine göre daha stabil çalışan kodlar.
1-Artık b4-b5-b6 butonları ile girilen döngüden çıkmak için çok uzun süre butona basmaya gerek yok.
2-Eski kodlarda döngünün sonunda ancak döngüden çıkabiliyordun.Yeni düzenlemede döngünün ortasında  olsanda döngüden çıkabiliyorsun.
3- Farklı butonlara basıldığında da döngüden çıkılabiliyor.
4-Basılan veya basılı tutulan butonun fonksiyonu artık devreye girmiyor.
5- İşin en güzel yanı döngü olan kodlarda döngünün başında bile döngüden çıkabilmen.
6-Bende bu sorunu çözmek için bayağı bir uğraştım ama kendimi geliştirmeme yardım etti.


include <main.h>

#fuses XT,NOWDT,NOPROTECT,NOPUT// Denetleyici konfigürasyon ayarları
#use delay(clock=4000000)
#use fast_io(a) // Port yönlendirme komutları A portu için geçerli
#use fast_io(b) // Port yönlendirme komutları B portu için geçerli

void main()
{
   set_tris_a(0x00);    // RA0 ucu giriş olarak ayarlandı.
   set_tris_b(0x1F);    // RB0 portu tümüyle çıkış olarak ayarlandı.
   
   output_a(0x00);

   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);

  while(TRUE)
  
  
  {
         if(input(pin_b0))
         {delay_ms(5);
         
         output_toggle(pin_a0);
         output_low(pin_a1);
         output_low(pin_a2);
         output_low(pin_a3);
         delay_ms(20);}
 
 
         if(input(pin_b1))
         {delay_ms(5);
        
         output_toggle(pin_a1);
         output_low(pin_a0);
         output_low(pin_a2);
         output_low(pin_a3);
         delay_ms(20);}
 
 
         if(input(pin_b2))
         {delay_ms(5);
        
         output_toggle(pin_a2);
         output_low(pin_a0);
         output_low(pin_a1);
         output_low(pin_a3);
         delay_ms(20);}
 
 
         if(input(pin_b3))
         {delay_ms(5);
         
         output_toggle(pin_a3);
         output_low(pin_a0);
         output_low(pin_a1);
         output_low(pin_a2);
         delay_ms(20);}



//********************************************************************************************************

       if(input(pin_b4))
         {delay_ms(5);while(input(pin_b4));
         while(TRUE){
         output_high(pin_a0);
         delay_ms(500);
         output_low(pin_a0);
         delay_ms(500);
         if(input(pin_b0)||input(pin_b1)||input(pin_b2)||input(pin_b3)||input(pin_b4)||input(pin_b5)||input(pin_b6) )
         {break;} 
         output_high(pin_a1);
         delay_ms(500);
         output_low(pin_a1);
         delay_ms(500);
         if(input(pin_b0)||input(pin_b1)||input(pin_b2)||input(pin_b3)||input(pin_b4)||input(pin_b5)||input(pin_b6) )
         {break;} 
         output_high(pin_a2);
         delay_ms(500);
         output_low(pin_a2);
         delay_ms(500);
         if(input(pin_b0)||input(pin_b1)||input(pin_b2)||input(pin_b3)||input(pin_b4)||input(pin_b5)||input(pin_b6) )
         {break;}
         output_high(pin_a3);
         delay_ms(500);
         output_low(pin_a3);
         delay_ms(500);
         if(input(pin_b0)||input(pin_b1)||input(pin_b2)||input(pin_b3)||input(pin_b4)||input(pin_b5)||input(pin_b6))
         {break;}}}
   
    //*******************************************************************************************************   
       
           
       if(input(pin_b5))
         {delay_ms(5);
         while(input(pin_b5));
         while(TRUE){
         output_high(pin_a0);
         delay_ms(1000);
         output_low(pin_a0);
         delay_ms(500);
         if(input(pin_b0)||input(pin_b1)||input(pin_b2)||input(pin_b3)||input(pin_b4)||input(pin_b5)||input(pin_b6) )
         {break;}
         output_high(pin_a1);
         delay_ms(1000);
         output_low(pin_a1);
         delay_ms(500);
         if(input(pin_b0)||input(pin_b1)||input(pin_b2)||input(pin_b3)||input(pin_b4)||input(pin_b5)||input(pin_b6) )
         {break;}
         output_high(pin_a2);
         delay_ms(1000);
         output_low(pin_a2);
         delay_ms(500);
         if(input(pin_b0)||input(pin_b1)||input(pin_b2)||input(pin_b3)||input(pin_b4)||input(pin_b5)||input(pin_b6) )
         {break;}
         output_high(pin_a3);
         delay_ms(1000);
         output_low(pin_a3);
         delay_ms(500);
         if(input(pin_b0)||input(pin_b1)||input(pin_b2)||input(pin_b3)||input(pin_b4)||input(pin_b6) )
         {break;}}}
      //**************************************************************************************************   
       
       if(input(pin_b6))
         {delay_ms(5);while(input(pin_b6));
         while(TRUE){
         output_high(pin_a0);
         delay_ms(1500);
         output_low(pin_a0);
         delay_ms(500);
         if(input(pin_b0)||input(pin_b1)||input(pin_b2)||input(pin_b3)||input(pin_b4)||input(pin_b5)||input(pin_b6))
         {break;}
         output_high(pin_a1);
         delay_ms(1500);
         output_low(pin_a1);
         delay_ms(500);
         if(input(pin_b0)||input(pin_b1)||input(pin_b2)||input(pin_b3)||input(pin_b4)||input(pin_b5)||input(pin_b6))
         {break;}
         output_high(pin_a2);
         delay_ms(1500);
         output_low(pin_a2);
         delay_ms(500);
         if(input(pin_b0)||input(pin_b1)||input(pin_b2)||input(pin_b3)||input(pin_b4)||input(pin_b5)||input(pin_b6))
         {break;}
         output_high(pin_a3);
         delay_ms(1500);
         output_low(pin_a3);
         delay_ms(500);
         if(input(pin_b0)||input(pin_b1)||input(pin_b2)||input(pin_b3)||input(pin_b4)||input(pin_b5)||input(pin_b6))
         {break;}
         }}}}
         
printf(lcd_putc,"\f  Ne kadar okursan oku, bilgine, yakışır şekilde davranmıyorsan cahilsin demektir.  \n   semfero");d

ayhani

5.butonu B portuna bağlayıp Port B kesmesini niye kullanmıyorsunuz?
En iyi bildiğim şey hiçbir şey bilmediğimdir.

dragonfly

#19
Sayın Recep hocam. Yardımlarınız için çok teşekkür ederim. Sorun büyük ölçüde giderilmiş gözüküyor. Sayenizde bizde çok şeyler ögrendik.  Sağolasınız.

mesaj birleştirme:: 19 Şubat 2015, 05:29:17

Alıntı Yap5.butonu B portuna bağlayıp Port B kesmesini niye kullanmıyorsunuz?

Sayın @ayhani hocam. Ben daha fazla ileri gidemedim bu konuda. Sağolsun Recep METE hocam yardım yardım etti de bukadar ilerleyebildik. Söylediğinizi sizde bizimle paylaşabilirseniz bizde tecrübelerinizden faydalanmış oluruz. Saygılarımla.

Recep METE

Şöyle bir hata gördüm. Döngü çalıştıran butonlar(b4-b5-b6) butonlarına döngüyü durdurmak için bastığımızda döngü durmuyor başa dönüyor.Döngüden çıkmak için b0-b1-b2-b3 butonlarını kullanmak gerekiyor.
printf(lcd_putc,"\f  Ne kadar okursan oku, bilgine, yakışır şekilde davranmıyorsan cahilsin demektir.  \n   semfero");d

ayhani

#21
Alıntı yapılan: dragonfly - 19 Şubat 2015, 05:24:07
Sayın Recep hocam. Yardımlarınız için çok teşekkür ederim. Sorun büyük ölçüde giderilmiş gözüküyor. Sayenizde bizde çok şeyler ögrendik.  Sağolasınız.

mesaj birleştirme:: 19 Şubat 2015, 21:29:17

Sayın @ayhani hocam. Ben daha fazla ileri gidemedim bu konuda. Sağolsun Recep METE hocam yardım yardım etti de bukadar ilerleyebildik. Söylediğinizi sizde bizimle paylaşabilirseniz bizde tecrübelerinizden faydalanmış oluruz. Saygılarımla.

Hocam ben css c kullanmıyorum, yoksa örnek birşeyler kordum. Genel mantık olarak portb kesmesi ile bu sorun çözülebilir.

Kesme olayı karışık geliyorsa daha kolay bir yöntem söyleyeyim. Bir ledi yakıp 500 msn bekleyip söndürecekseniz burada direk 500 msn vermeyin. Delay olayını 10 msn yapın, sonra her döngüde say isimli bir değişkeni 1 arttırın. Say=50 ise ledi yak gibi bir kod kullanın. Döngü süreleri çok kısa olduğu için butona bastığınızda diğer işlemi yaptırabilirsiniz. Yani butona uzun basmanız gerekmez.
En iyi bildiğim şey hiçbir şey bilmediğimdir.

Recep METE

Zaten butona uzun basma nedenide delay surelerinin uzun olması. Örn 1500ms delay vb. Kısa olsa sorun yok.
printf(lcd_putc,"\f  Ne kadar okursan oku, bilgine, yakışır şekilde davranmıyorsan cahilsin demektir.  \n   semfero");d

ayhani

Alıntı yapılan: Recep METE - 19 Şubat 2015, 10:56:50
Zaten butona uzun basma nedenide delay surelerinin uzun olması. Örn 1500ms delay vb. Kısa olsa sorun yok.
Tamam hocam aynı şeyden bahsediyoruz. Bu gibi durumlarda delay=1500 msn demek yerine, delay=10msn deyip say değişkenini saydırdıktan sonra say=150 ile led yak gibi bir kod yazmak sorunu çözer.
En iyi bildiğim şey hiçbir şey bilmediğimdir.

sadogan

Button lara basarken koyduğun uzun delay lar yüzünden sorunlar yaşıyorsun.
örenek olması acısından bu kodu test edebilirsin.
#include <16f84a.h>       
#fuses XT,NOWDT,PUT,NOPROTECT
#use delay(clock=4000000)
#define led1 pin_A0
#define led2 pin_A1
#define led3 pin_A2
#define led4 pin_A3
#define led5 pin_A4
#define BUTTON1 PIN_B1
#define BUTTON2 PIN_B2
#define BUTTON3 PIN_B3
#define BUTTON4 PIN_B4
#define BUTTON5 PIN_B5
int1  button1_flag=0,button2_flag=0,button3_flag=0,button4_flag=0,button5_flag=1; 
int1  btn1_flg=0,btn2_flg=0,btn3_flg=0,btn4_flg=0,btn5_flg=0;
unsigned sayac=0,dly_sayac=0;

void main(void) 
{
   set_tris_a(0b00000000);
   set_tris_b(0b11111111);

   while(TRUE)
   {
      if(input(BUTTON5))
      {
         if(btn5_flg==0)
         {
            button5_flag ^=1;
            btn5_flg=1;
            button1_flag=0;
            button2_flag=0;
            button3_flag=0;
            button4_flag=0;
            dly_sayac=0;
            sayac=0;
         }
      }
      else
      {
         btn5_flg=0;
      }
      /////////////////////////
      if(button5_flag )
      {
      ///////////////////////////
      if(input(BUTTON1))
      {
         if(btn1_flg==0)
         {
             button1_flag ^=1;
             btn1_flg=1;
         }
      }
      else
      {
         btn1_flg=0;
      }

      ///////////////////////////
      if(input(BUTTON2))
      {
         if(btn2_flg==0)
         {
             button2_flag ^=1;
             btn2_flg=1;
         }
      }
      else
      {
         btn2_flg=0;
      }
 
      ///////////////////////////
      if(input(BUTTON3))
      {
         if(btn3_flg==0)
         {
             button3_flag ^=1;
             btn3_flg=1;
         }
      }
      else
      {
         btn3_flg=0;
      }

      ///////////////////////////
      if(input(BUTTON4))
      {
         if(btn4_flg==0)
         {
             button4_flag ^=1;
             btn4_flg=1;
         }
      }
      else
      {
         btn4_flg=0;
      }
     }
      else
      {
         delay_ms(4);
         dly_sayac++;
         if(dly_sayac>250){dly_sayac=0; sayac++;}
        
         if(sayac==0)
         {
            button1_flag=0;
            button2_flag=0;
            button3_flag=0;
            button4_flag=0;
         }
        else if(sayac==1)
         {
            button1_flag=1;
            button2_flag=0;
            button3_flag=0;
            button4_flag=0;
         }
         
        else  if(sayac==2)
         {
            button1_flag=0;
            button2_flag=1;
            button3_flag=0;
            button4_flag=0;
         } 
       else  if(sayac==3)
         {
            button1_flag=0;
            button2_flag=0;
            button3_flag=1;
            button4_flag=0;
         }  
        else if(sayac==4)
         {
            button1_flag=0;
            button2_flag=0;
            button3_flag=0;
            button4_flag=1;
         }
         else sayac=0;
         }
      /////////////////////////// 
       if(button1_flag)output_high(LED1);
      else output_low(LED1);      
       if(button2_flag)output_high(LED2);
      else output_low(LED2);     
       if(button3_flag)output_high(LED3);
      else output_low(LED3);      
       if(button4_flag)output_high(LED4);
      else output_low(LED4);
     
      
   }  
}