Bir Buton İle Birden Çok Fonksiyon Kullanmak !

Başlatan HeCToR, 03 Ağustos 2015, 12:14:08

HeCToR

Merhaba Arkadaşlar CCS'de Bir buton ile her bastığımda toplam 5 fonksiyon olmak üzere kontrol sağlamak istiyorum en uygun yöntem nasıl olmalıdır teşekkürler
Bilginin Efendisi Olmak İçin Çalışmanın Kölesi Olmak Gerekir

alexsi

#1
Yapmayi planladiginiz tam olarak nedir?
http://www.kontrolarge.com/ Bildiklerimiz öğrendiklerimiz kadardır. Ya bilmediklerimiz ..?

HeCToR

Basit Bir Örnek Vereyim 5 Adet Ledimiz olsun her bir kere butona bastığımızda bu ledleri sırayla yakalım
Bilginin Efendisi Olmak İçin Çalışmanın Kölesi Olmak Gerekir

Karamel

#3
if(button)
{
   Led1(); delay();
   Led2(); delay();
   Led3(); delay();
   Led4(); delay();
   Led5(); delay();
}

mesaj birleştirme:: 03 Ağustos 2015, 12:53:04

Hocam yorum yazdim ama herhalde sorunuz bu kadar basit olmamali? :-\

mesaj birleştirme:: 03 Ağustos 2015, 12:53:32

Birde telefondan C code u yazdim   8)

HeCToR

#4
 ;D Teşekkürler Karamel ancak bir defa bastığında değil her bir defa bastığında bir led yanacak bastım L1 YANDI birdada Bastım L2 yandı bu şekilde
Bilginin Efendisi Olmak İçin Çalışmanın Kölesi Olmak Gerekir

Klein

#5
Fonksiyon işaretçilerine bir göz at.

Ya da switch-case

Karamel

char a;

if(button)
{
    if(a ==6) a=1;

    if(a ==1) Led1();
    if(a ==2) Led2();
    if(a ==3) Led3();
    if(a ==4) Led4();
    if(a ==5) Led5();
    a++;

}

mesaj birleştirme:: 03 Ağustos 2015, 13:05:43

Hocam yenide  soruyorum  :P soru bukadar kolay olmamali?

t2

if(button)
{
say++;

switch (say) {
        case  1:
        Led1();
        break;

        case  2:
        Led2();
        break;
         ...


        case  10:
        say=0;
        break;

     }
}

mufitsozen

#8
Alıntı yapılan: CORTEX - 03 Ağustos 2015, 12:37:16
Basit Bir Örnek Vereyim 5 Adet Ledimiz olsun her bir kere butona bastığımızda bu ledleri sırayla yakalım

Alıntı Yap

    buton=0;
    while(1){
        LedYak(buton);

        ButonBekle();
        LedSondur(buton++);

        buton %=  5;
    }



Aptalca bir soru yoktur ve hiç kimse soru sormayı bırakana kadar aptal olmaz.

Karamel

#9
Mufit hocam. Sanirim su code button++%=5;  mod5 e gore bir arttir? Yada bur arttir mod5 ini al?

Eger tezim dogruysa, bu muhtesem birsey.  ::) Bir kerede birsuru islemi yapiyor.

mesaj birleştirme:: 03 Ağustos 2015, 13:19:35

Hocam bu arada cok basitte olsa(mesela 4 islem) sizin yazdiginiz code lar agizimi acik biraktiriyor. Kucucuk bir islem dahi olsa bircok yeni sey ogreniyorum :) size cok tesekkur ederim hocam ::)

mufitsozen

#10
Alıntı yapılan: Karamel - 03 Ağustos 2015, 13:17:40
Mufit hocam. Sanirim su code button++%=5;  mod5 e gore bir arttir? Yada bur arttir mod5 ini al?

Eger tezim dogruysa, bu muhtesem birsey.  ::) Bir kerede birsuru islemi yapiyor.

maalesef derleme denememde "button++%=5; ( mod5 e gore bir arttir) veya "++button%=5;"? hata veriyor, bende buton++'i bir onceki satira cektim.

Alıntı YapHocam bu arada cok basitte olsa(mesela 4 islem) sizin yazdiginiz code lar agizimi acik biraktiriyor. Kucucuk bir islem dahi olsa bircok yeni sey ogreniyorum :) size cok tesekkur ederim hocam ::)
Hepimiz birbirimizden birseyler ogreniyoruz. Nazik yorumun icin ben sana tesekkur ederim.

Aslinda biraz dusununce daha okunakli olmasi acisindan soyle bir kod daha dogru gozuktu gozume:
Alıntı Yap
    buton=0;
    while(1){
        buton %=  5;
        LedYak(buton);

        ButonBekle();
        LedSondur(buton);

        buton++;
    }

yada:
Alıntı Yap
    buton=0;
    while(1){
        LedYak(buton);

        ButonBekle();
        LedSondur(buton);

        buton++;
        buton %= 5;
    }
Aptalca bir soru yoktur ve hiç kimse soru sormayı bırakana kadar aptal olmaz.

tekosis

hocam bu durumlarda ben şöyle bir uygulama yapıyorum. şöyleki;
cihaz butona basılmasını bekliyor, butona basılıyor, butona basma sayısı bir kayıtçıya saklanır. iki saniye boyunca butona basılmazsa  artık basılmayacak kabul edilir. kayıtçıdaki değere göre istenilen fonksiyona yönlenilir.
İlim ilim bilmektir, ilim kendin bilmektir, sen kendin bilmezsin, bu nice okumaktır.

HeCToR

Bilginin Efendisi Olmak İçin Çalışmanın Kölesi Olmak Gerekir

fatih6761

#13
@mufitsozen hocam bildiğiniz gibi derleyici ifadeleri içten dışa çözümlüyor.
Derlenmeme sebebi button++ nın referans değil değer döndürmesi.
Yazdığınız ifadeden derleyicinin anladığı şey şu oluyor:
(button++) = (button++) % 5
Burada sıkıntı sol taraftaki button++'nın stack veya register'a sabit bir değer döndürmesi.
Bu dönen değere atama yapmak istediğinizden hata veriyordur. Tabi ifadenin prefix veya postfix olması dönen değerin sabit bir kopya olduğunu değiştirmiyor.
Düzeltme = prefix işlem C++'ta referans döndürüyor ancak C de geçerli değil. postfix ortak olarak değer döndürüyor.

Dolayısıyla;
++button %= 5;
kodu C++'ta (g++) geçerliyken C'de(gcc) geçerli değil.

Ancak C++'ta sınıfların post ve pre increment operatörleri yazılırken dönen değer (this) referans olduğundan C++ ta işlemler arka arkaya sıranabiliyor.
Tabi bu, denediğiniz işlemin yapılabileceği anlamına gelmemekle birlikte bunun yapılabileceği bir sınıf yazılabilir.

mufitsozen

Alıntı yapılan: fatih6761 - 03 Ağustos 2015, 20:31:48
@mufitsozen hocam bildiğiniz gibi derleyici ifadeleri içten dışa çözümlüyor.
Derlenmeme sebebi button++ nın referans değil değer döndürmesi.
Yazdığınız ifadeden derleyicinin anladığı şey şu oluyor:
(button++) = (button++) % 5
Burada sıkıntı sol taraftaki button++'nın stack veya register'a sabit bir değer döndürmesi.
Bu dönen değere atama yapmak istediğinizden hata veriyordur. Tabi ifadenin prefix veya postfix olması dönen değerin sabit bir kopya olduğunu değiştirmiyor.
Düzeltme = prefix işlem C++'ta referans döndürüyor ancak C de geçerli değil. postfix ortak olarak değer döndürüyor.

Dolayısıyla;
++button %= 5;
kodu C++'ta (g++) geçerliyken C'de(gcc) geçerli değil.

Ancak C++'ta sınıfların post ve pre increment operatörleri yazılırken dönen değer (this) referans olduğundan C++ ta işlemler arka arkaya sıranabiliyor.
Tabi bu, denediğiniz işlemin yapılabileceği anlamına gelmemekle birlikte bunun yapılabileceği bir sınıf yazılabilir.

YASA!

Cok guzel ve aciklayici olmus, tesekkurler.
Aptalca bir soru yoktur ve hiç kimse soru sormayı bırakana kadar aptal olmaz.