Haberler:

Forum kuralları güncellendi LÜTFEN  okuyunuz:  https://bit.ly/2IjR3ME

Ana Menü

CCS D çizgi izleyen

Başlatan bbs2006, 20 Mart 2009, 07:54:28

bbs2006

Merhaba
Bir çizgi izleyen robot yapmaya çalışıyorum. Robotta 2 adet cny70 sensörü kullandım. Bu sensörler beyazı algıladıgı zaman hareket etmektedir. ccs yazılımında deney setin yazılım çalışmaktadır. Ancak devreye pici  taktıgımız zaman  sensörlerden biri algılama yapıyor. digeri algılama yapmıyor
Yazılımda 1 if ifadesi ve  2. else ifadesi çalışıyor ama  3. if ifadesi çalışmıyor. 2. ifade ile 3. ifadeyi yerdegiştirdigimiz zaman  o zaman da 2. ifadedeki çalışıyor.

Bunu niçin yapmaktadır. Yardımcı olursanız sevinirim.



# include <16f628.h>     // Kullanılacak denetleyicinin başlık dosyası tanıtılıyor.
// Denetleyici konfigürasyon ayarları
#fuses XT,NOWDT,NOPROTECT

#use delay (clock=4000000) // Gecikme fonksiyonu için kullanılacak osilatör frekansı belirtiliyor.

#define a0  Pin_a0    // Sag Transistör
#define a1  Pin_a1    // Sol Transistör  
#define b2  Pin_b2    // sag sensör
#define b3  pin_b3   //  sol sensör
void main ( ) {
 output_Low(Pin_a2);
 output_Low(Pin_a3);
  while(true){


if((input(b2)& input(b3))) {
                             output_low(a0);
                             output_low(a1);  }
                             
    else  if((!input(b2)& input(b3))){
                             output_low(a1);
                             output_high(a0);
                          }
           
     else  if((input(b2)& !input(b3))){
                             output_low(a0);
                             output_High(a1);}
 
     else{
              output_low(a0);
              output_low(a1);
     
     
     
     } }}

ferdem

Sensörleri ayrı ayrı test etmiş miydiniz?
"else if" ler yerine sadece "if" kullanmanızın bir sakıncası var mı? Yani eğer yoksa "else" kullanmayın daha temiz olur.
if((input(b2)& input(b3))) {
output_low(a0);
output_low(a1); }

if((!input(b2)& input(b3))){
output_low(a1);
output_high(a0);
}

if((input(b2)& !input(b3))){
output_low(a0);
output_High(a1);}

else{
output_low(a0);
output_low(a1);



}

gibi. İyi çalışmalar.

cakotr

@ferdem'in dedigi gibi kodları biraz daha basitleştirebilirsin.ELSE ye gerek olmadan 3-4 if ile olayı halledersin.While-Do ilede denemeyi unutma ideale yaklaşmak önemli.
  Önerim mikrodenetleyiciyi soketine yerleştirmeden önce cny70 den çıkan voltaj değerlerine bakınız eğer sorun yoksa 2. adıma yani (eğer kullanıyorsanız) 74HC14 ICsinde çıkışlar referansa göre değişiyormu.Burda unutmaman gereken schmitt triger çıkışı terslendirerek verir.Yani; giriş, referans 2.5 voltun üstü ise çıkışa 0 volt verecektir.
  Eğer bu aşamalarda hiç bir sorun yok ise yazılımdan emin ol.Doğru olduğu kanaatinde isen mikrodenetleyicinizi değiştirin(küçük bir ihtimal de olsa).
  Tabi motor sürücüsü de önemli onada bir göz atın.