CCS C Buton uygulaması

yayha70

Üye
Katılım
25 Eki 2009
Mesajlar
36
Puanları
1
Merhabalar.

CCS C ile bir buton uygulaması yapmak istiyorum. Senaryo şu şekilde ;
4 adet yön butonu var (ileri,geri,sağ,sol).
4 adet farklı led var. Her buton bir ledi yakacak. Bu butonları tek analog pinden herbirine farklı değerler atayarak hangi butona basıldığını okuyabiliyorum. (Pinlerden tasarruf etmek için analog okuyorum). Ancak benim yapmak istediğim; bu yön tuşlarını sırayla kaydedip, 5. bir start butonuna basıldığı zaman sırayla basılan butonların karşılığı olan ledleri yakıp söndürmek.

Örneğin ;
Sağ,ileri,ileri,sol,geri,sol butonlarına basıldığını nasıl sırasıyla kaydedebilirim?
Start butonuna basıldığında sırasıyla bu ledleri yakıp söndürecek.
Butonları okuyabiliyorum ancak basılan butonları sıralayıpta ledleri yakamıyorum?
Umarım derdimi anlatabilmişimdir.
Bu konuda bilgisi, fikri ve önerisi olan hocalarımın desteğini bekliyorum.

Hazır kod istemiyorum, sadece hangi yolu izlemeliyim bi fikir istiyorum.
 
Bir kaydet/durdur butonu ve ledi ekleyin.
En fazla kaç hareket kaydeceksiniz,
buna karar verin. Bu uzunlukta bir dizi
oluşturun. Butonlara ve bitişe karşılık
gelecek sayıları bu diziye kaydedin.
Durdur ile veya dizi sonuna kadar kaydınızı
yapın. Başlat butonu ile diziyi okuyup
ledleri yakın.
 
Kardeşim uzun zamandır CCS kullanmadım mantık hepsinde aynı. Sana bi arduino kodu yazıyorum komutların yanındaki //--commentleri oku sana bi fikir verecektir. Her butona bastığında değeri kaydedecek ve çıkış butonuna bastığında son 4 butona uygun ledi yakacak. Deneyip çalıştırmadım ama çalışcaktır muhtemelen.
Kod:
int son_okunan = 0;
int butonlar[4];
int buton_index =0;
int buton_notr = 0;
void setup() {

}

void loop() {

  analogDeger = analogRead(analogInPin); //Basılan butonu oku
  if(analogDeger != son_okunan && analogDeger != buton_notr){          //Eğer aynı buton basılı değilse veya nötr pozisyonda değilse
    butonlar[buton_index%4]=analogDeger;  //butonun değerini diziye kaydet
    buton_index++;                     
    son_okunan = analogDeger;           
  }
  if(digitalRead(cikis_butonu){           //Eğer çıkış butonuna basılırsa
    for(int k=0;k<3<k++){                 //Diziden basılmış son 4 butonun analog değerini al
      switch(butonlar[k])                   //Hangi butonun analog değeri olduğunu bul ve ilgili ledi yak
        case buton1_analog_deger:        
          digitalWrite(led1,1);     
          break;
        case buton2_analog_deger:
          digitalWrite(led22,1);
          break;
        case buton3_analog_deger:
          digitalWrite(led3,1);
          break;
        case buton4_analog_deger:
          digitalWrite(led4,1);
          break;
        deafult:
          break;
     }
     delay(1000);                      //Her led arasına 1 sn bekle      
    }
   
  }

}
 
Moderatör tarafında düzenlendi:
Teşekkür ederim cevap verdiğiniz için. Deneyeceğim.
Teşekkür ederim. Bu komutta diziye max kaç komut kayıt edebileceğim? En az 30 komut kayıt etmeliyim.
 
Son düzenleme:
int butonlar[4] => int butonlar[30]

butonlar[buton_index%4] => butonlar[buton_index%30]

(int k=0;k<3<k++) => (int k=0;k<30<k++)

değişikliklerini yap
 
Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için onları kabul etmelisiniz. Daha fazla bilgi edin…