Haberler:

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

Ana Menü

devreyi buton ile başlatamama

Başlatan bbs2006, 19 Mart 2016, 23:46:10

bbs2006

Merhaba
Çizgi izleyen robotta butona basmadığım zaman  robot gitmeyecek. butona bastığım zaman hareket etmesini istiyorum.  ancak basmadığım zaman işlem tamam ancak bastığım  zaman işlem gerçekleşmiyor. basit bir işlemi çözemedim. sorun nerde aradım bulamadım. yardımcı olursanız sevinirim.

void main(){               // Ana fonksiyon.
setup_ccp1(ccp_pwm);       //sag motor için kullanılacak
setup_ccp2(ccp_pwm);       //sol motor için kullanılacak
setup_timer_2(T2_DIV_BY_4,124,4);         //Timer2 ayarları yapılıyor.
                                          //zaman=0.0001  Fr=10 Khz.  
                                                                                    
output_high(stdby);        //motor sürücü entegresi stanby  HIGH olmalı.
 while(true){
 if(input(baslatma)){
 while(input(baslatma))
 output_c(0);


oku_sen=input_d();// d portundan sensör degerleri okunup oku_sen ata.
zemin_oku=input_e();
zemin_oku=0b0101&&zemin_oku;



switch(zemin_oku){
case 5:                                 //cny70 sen zemin 1(siyah) okudu.
       siyah_zemin(oku_sen);break;

case 0:                                 //cny70 sen zemin 0(beyaz) okudu.
       
       beyaz_zemin(oku_sen);break;}
         
}
else{

        
        output_c(0x01);
        motor_surme();
        set_pwm1_duty(0);
        set_pwm2_duty(0);
}
 }

}


programın yukarısında da  alt foksiyonlar var onları eklemedim. programa

vitruvius

Şöyle bir mantık kurun. Butona basıldığında bir bayrağı set edin. Programda da bu bayrağın durumunu kontrol edin. Aksi takdirde şu an sizin kodunuzda butona basılı tutmanız gerekir. Çünkü parmağınızı çektiğiniz anda if(input(baslatma)) şartı artık doğru olmayacaktır.

int flag_Baslat = 0;

while(1)
{
   if(input(baslatma))
   {
      delay_ms(20);
      while((input(baslatma));
      flag_Baslat = 1;
   }

   if(flag_Baslat)
   {
      // Islemler buraya
   }
}



dursuncemal

hocam bu buton basinca konumunu koruyan bir butaon mu ?elinizi cektiginizde eski konumuna donen bir buton mu?  birde pindeki direnciniz pull up mu pull down mu. eger alinizi cektiginizde eski konumuna donen bir buton ise calisirken tekrar basilirsa duracak mi?islemcide hangi pine bagi?
:=

erpay

Yükselen kenar yakalayan bir buton yazılımı işinizi görür.

bbs2006

#4
Kalıcı tip buton değil. 18f4550  nin a3 pinine baglı. Lojik 1 Verdiğimi, aman robot  çalışaçak . butona bastığımız zaman robot  çalışıp devam edecek.

dursuncemal

Hocam while(1) girmeden önce şunu deneyin while(input(!başlama))
:=

bbs2006

dün yapmıştım. ancak yine programım çalışmıyor.

dursuncemal

#7
hocam portu giris olarak ayarlamaya gerek var mi bilmiyorum ama calismsmsi imkansiz while(true) ya girmeden once 0 i arayacaksiniz sonra butona basinca program artik while(true) icine girecek ve birdaha reset yiyene kadar bu sorgu ile isi olamayacaktir.not direncimiz pulldown yani - de.

not /// burda sadece yazacaginiz yeri tariif ettim copy pate yapmayi sizin fonksiyonlarin alt parantezlerini silmedim

void main(){               // Ana fonksiyon.
setup_ccp1(ccp_pwm);       //sag motor için kullanılacak
setup_ccp2(ccp_pwm);       //sol motor için kullanılacak
setup_timer_2(T2_DIV_BY_4,124,4);         //Timer2 ayarları yapılıyor.
                                          //zaman=0.0001  Fr=10 Khz.  
                                                                                    
output_high(stdby);        //motor sürücü entegresi stanby  HIGH olmalı.

while(input(!baslama)){;}      veya        while(input(baslama) == 0){;} // ikliside ayni anlama geliyor buraya yazmalisiniz. baslama pinine + gelmeden program burdan cikmaz.

 while(true){


 output_c(0);


oku_sen=input_d();// d portundan sensör degerleri okunup oku_sen ata.
zemin_oku=input_e();
zemin_oku=0b0101&&zemin_oku;



switch(zemin_oku){
case 5:                                 //cny70 sen zemin 1(siyah) okudu.
       siyah_zemin(oku_sen);break;

case 0:                                 //cny70 sen zemin 0(beyaz) okudu.
       
       beyaz_zemin(oku_sen);break;}
         
}
else{

        
        output_c(0x01);
        motor_surme();
        set_pwm1_duty(0);
        set_pwm2_duty(0);
}
 }

}


programın yukarısında da  alt foksiyonlar var onları eklemedim. programa
:=