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

Herkese hayırlı akşamlar. Değerli forum üyeleri. Benim bir sorum olacaktı.
Şemasını ve kodlarını verdiğim devrede BTN1'e  bastığımda D1 ledi yanmakta, butona tekrar bastığımda D1 ledi sönmekte. Bu ilişki BTN2-LED2, BTN3-LED3,BTN4-LED4 içinde geçerlidir. Benim yapamadıgım olay ise BTN5' e bastığımda ledler 1'er sn arayla yanıp sönmesi. Onuda yaptım. Ama butona tekrar bütün ledlerin sönmesi. Ben bir türlü B5 çıkışını durduracak çaareyi bulamdım. İnşallah derdimi anlatabilmişimdir. Bu konuda yardımcı olursanız sevinirim. Herkese iyi akşamlar.

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


output_a(0x00);
basla:
output_high(pin_a0);
delay_ms(500);
output_low(pin_a0);
delay_ms(500);

output_high(pin_a1);
delay_ms(500);
output_low(pin_a1);
delay_ms(500);

output_high(pin_a2);
delay_ms(500);
output_low(pin_a2);
delay_ms(500);

output_high(pin_a3);
delay_ms(500);
output_low(pin_a3);
delay_ms(500);        
goto basla;
         
         
}    
}
}

mir_as82

Hocam bir tane değişken tanımla(Bool da olabilir int te). İlk basışta o değişkene "1" yükle, ikinci basışta "0" yükle. Bu değişkeni döngü içinde kontrol et. Eğer 1 ise döngün dönsün, bu değişken "0 " ise döngüyü kırıp çıksın.

dragonfly

#2
Sayın @mir_as82 hocam. Sorun şu ki ccs c de acemiyim. Sizin söylediğinizi yapmaya çalışacağım. Örnek verecek arkadaşlar varsa sevinirim.

mesaj birleştirme:: 08 Şubat 2015, 22:03:59

Hocam malesef başaramadım. Tıkandım kaldım. Lütfen yardımlarınızı bekliyorum.

mehmet

Butonlar için birer değişken tanımlayınız. Yakma söndürme
işleminden önce buton kontrolü yapılmalı. Hangi buton
basılı sürece hangisi toggle  çalışacak buradan ayarlanabilir.
Basitçe;
// ccs c için tekrar düzenlenebilir.
while(1)
{
      port_oku = PORTB; 
     switch(port_oku)
    {
      case 32:              // toogle button (5 nolu buton)
           buton5++;
           if(button5 > 1) buton5 = 0;
           break;
       case 64:             // toogle button
           buton6++;
           if(buton6  > 1) buton6 = 0;
           break;
       default;             // diğerleri momentary
            break;
      }
      
      // diğerleri momentary oldugunu dusunelim

     if(buton5 == 1) //buton5 low olması için butona bir kere daha basılması gerekli
     {
         //yapılacaklar
      }
     if(buton6 == 1) //buton6 low olması için butona bir kere daha basılması gerekli
     {
           //yapılacaklar
      }
     
      //......
     if(input(pin_b2)==1)
     {
        //yapılacaklar
      }
}

gibi düşünülebilir....
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr

dragonfly

Sayın @mehmet hocam. Cevabınız için teşekkür ederim. Ccs c'ye yeni başladığım için verdiğiniz örneği ne yazıkki uyarlayamadım. Yardım edebilirmisiniz bu konuda. Saygılarımla

Gökhan BEKEN

Yukarıdaki kodun anlaşılması için ccs c değil daha çok C dili bilgisi gerekir. Siz C dilini ccs c ile öğreniyorsunuz sanırım. Bunun yerine bilgisayarda işletim sistemi üzerinde çalışmanız yerinde olur. DevC++ IDE ile C dilinde program yazabilirsiniz internette dersler var, bir de kitap almanız iyi olur. Sonra geçersiniz mikrodenetleyicilere.
Özel mesaj okumuyorum, lütfen göndermeyin.

selvi

#6
         if(input(pin_b4)==1)
         {delay_ms(5);
         while(input(pin_b4)==1);


output_a(0x00);
basla:
output_high(pin_a0);
delay_ms(500);
output_low(pin_a0);
delay_ms(500);

output_high(pin_a1);
delay_ms(500);
output_low(pin_a1);
delay_ms(500);

output_high(pin_a2);
delay_ms(500);
output_low(pin_a2);
delay_ms(500);

output_high(pin_a3);
delay_ms(500);
output_low(pin_a3);
delay_ms(500);        
goto basla;
/code]

5.butona basildiginda program basla dongusune giriyor.diger butonlarda bu donguye girmediginde soyledigin gibi calisiyor.5.butona basildiginda program "basla"  dongusune giriyor.bu donguyu kaldirman gerekiyor.yoksa surekli belli surelerle ledler surekli yanip soner.
Yaşam anlamlandırıldıkça kutsaldır....

dragonfly

Alıntı YapYukarıdaki kodun anlaşılması için ccs c değil daha çok C dili bilgisi gerekir. Siz C dilini ccs c ile öğreniyorsunuz sanırım. Bunun yerine bilgisayarda işletim sistemi üzerinde çalışmanız yerinde olur. DevC++ IDE ile C dilinde program yazabilirsiniz internette dersler var, bir de kitap almanız iyi olur. Sonra geçersiniz mikrodenetleyicilere.

Sayın @meftun hocam. Ccs c yeni başladım. Bir hocamın tavsiyesi ile ccs c den başladım. Kendi çapımda küçük şeyler yapmaya çalışıyorum. Başlarda basit şeyler kolay oluyordu. Ama ilerledikçe zor olmaya başladı. Sebebi de dediginiz gibi sanırım c bilmemek. Ben Serdar ÇİÇEK hocanın ve Pusula yayınlarının Herkes için CCS C ile PIC programlama kitaplarını aldım. Bu kaynaklardan yararlanıyorum. Sizinde tavsiye edeceğiniz Dev C++ ile ilgili kitap varsa çalışmak isterim.
Hocam birde burda olduğu gibi küçük biyerde takılıp kalıyorum. Mantık olarak cevap yazan arkaşlar gibi şöyle şöyle yapmalıyım diye düşünüyorum ama koda dökemiyorum. Formda da  araştırıyorum. Hocalarımızın yaptıklarına , bilgilerine bakıyorum. Maşallah üst seviye. Benim derdimin çarasi belki 2 satır code. Ama niye yardım etmezler anlıyamıyorum. Tabi şimdi diyeceklerdir haklı olarak. Biz balık tutmayı öğretiyoruz diye. Ne diyeyim taktir kendilerinidir.  Ama küçük yardımlarınızla bunu başaracağıma inanıyorum. Kusura bakmayın biraz uzun oldu. Sağlıcakla kalınız.

dragonfly

Alıntı Yap5.butona basildiginda program basla dongusune giriyor.diger butonlarda bu donguye girmediginde soyledigin gibi calisiyor.5.butona basildiginda program "basla"  dongusune giriyor.bu donguyu kaldirman gerekiyor.yoksa surekli belli surelerle ledler surekli yanip soner.

Sayı @selvi hocam. Cevabınız için teşekkürler. Bende farkettim bunu. Ama döngüyü kaldırınca ledleri sıralı yakıp sömdürmüyor. Dögü oluncada diger butonlar çalışmıyor. Artık ne yapacağımıda bende bilemedim. LÜtfen yardım ederseniz çok sevineceğim. Saygılarımla

mehmet

Butona basılınca yapılacak işleri yapmadan önce; butonların
toggle/momentary ayrımı yapılmalı, toogle olanlar bir
değişkende durumları tutulmalı.
Zaten buton özellikleri çıktıktan sonra alt yordamlar ile
yapılacak işlere yönlendirilebilir.
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr

selvi

  dongu kaldirilinca tam olarak nasil calisiyor.birde butona basilinca programin ne yapmasini istiyorsun.belli zaman peryoduyla ledler yanip sonecek mi?yoksa farkli bir sey mi?
Yaşam anlamlandırıldıkça kutsaldır....

Recep METE

Arkadaşım şunun isisini yukler misin? Çizmeye eriniyorum. Deneme yaparsam sorunu nu çözer,  gonderirim.
printf(lcd_putc,"\f  Ne kadar okursan oku, bilgine, yakışır şekilde davranmıyorsan cahilsin demektir.  \n   semfero");d

dragonfly

Alıntı yapılan: semfero - 11 Şubat 2015, 11:05:04
Arkadaşım şunun isisini yukler misin? Çizmeye eriniyorum. Deneme yaparsam sorunu nu çözer,  gonderirim.

Sayın @semfero hocam. Forum da dosya yüklenecek yeri bulamadım. Nerden yükleniyor dosyalar acaba. Size mail atmak istedim mail adresinizide göremedim.

dragonfly

#13
Alıntı yapılan: semfero - 11 Şubat 2015, 11:05:04
Arkadaşım şunun isisini yukler misin? Çizmeye eriniyorum. Deneme yaparsam sorunu nu çözer,  gonderirim.

http://www.dosya.tc/server38/sMKGEb/1.rar.html

Hocam inşallah yükleyebilmişimdir. Buton 1-2-3-4 de butona bastığımızda yanıp tekrar bastığımızda sönüyor. Buton 5-6-7 de bastığımızda ledleri sıralı yakıp söndürecek . butona tekrar bastığımda ledleri söndürecek. İnşallah anlatabilmişimdir. İlginiz için çok teşekkür ederim.

mesaj birleştirme:: 11 Şubat 2015, 21:20:57

Alıntı yapılan: selvi - 11 Şubat 2015, 10:32:09
  dongu kaldirilinca tam olarak nasil calisiyor.birde butona basilinca programin ne yapmasini istiyorsun.belli zaman peryoduyla ledler yanip sonecek mi?yoksa farkli bir sey mi?

Sayın @selvi hocam link verdim ordan bakarsanız anlamanız biraz daha kolay olur. Gögüyü kaldırınca ledler haliyle sıralı olarak yanmıyor.

Recep METE

Arkdadaşı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.

http://youtu.be/qLL2ryb5QQY

http://s3.dosya.tc/server31/3htiam/recepmete-samsun.rar.html
printf(lcd_putc,"\f  Ne kadar okursan oku, bilgine, yakışır şekilde davranmıyorsan cahilsin demektir.  \n   semfero");d