Butona Basıldığında Bir Kez Çıkış Alamıyorum

Başlatan semih, 04 Mayıs 2014, 19:34:38

semih

İyi akşamlar arkadaşlar. Uzun süre sonra tekrar aranızdayım. :)
Kodları aşağıda da vereceğim. Başlıkta da belirttiğim gibi butona bir kez basıldığında veya basılı tutulsa bile sadece bir kez çıkış almak istiyorum. Çeşitli kodlar denedim ama bir yerde hata çıktı. Aşağıdaki kod da butona bir kez bastığımda bir kez çıkış veriyor. Fakat ikinci kez bastığımda çıkış vermiyor. çıkış vermesi için üçüncü kez basmam gerekiyor.
   while(1)
   {
   while(input(pin_a3)==1)
   {
       delay_ms(15);
       output_high(pin_b1);
       output_high(pin_b2);
       delay_ms(500);
       if(input(pin_a3)==0 )
       {
         while(input(pin_a3)==0 )
         {
            output_b(0x00);
         }
         while(input(pin_a3)==1 )
         {
            output_b(0x00);
         }
       }
        if(input(pin_a3)==1 )
       {
         while(input(pin_a3)==0 )
         {
            output_b(0x00);
         }
         while(input(pin_a3)==1 )
         {
            output_b(0x00);
         }
       }
       
   } 
   }



Kodları bu şekilde değiştirdiğimde ise ilk üç basımda çıkış alıyorum fakat sonra üç kez art arda bastıktaın sonra çıkış veriyor.
    while(1)
   {
   while(input(pin_a3)==1)
   {
       delay_ms(15);
       output_high(pin_b1);
       output_high(pin_b2);
       delay_ms(500);
       while(input(pin_a3)==0 || input(pin_a3)==1)
       {
         output_b(0x00);
       }
     }
     }


Çözümü bir türlü göremedim. Başka nasıl yaklaşabilirim? Yardımlarınız için şimdiden teşekkürler.

Kabil ATICI

#1
Sorununla isteriğini birbirine karıştırmışsın!

Butonun işlemci bacağı ve gnd arasına bağlı olduğunu düşünürsek.
şöyle bir şey

bayrak diye bir değişken tanımla.

bayrak=0;

while(1)
   {
if(input(pin_a3)==0 )
{
if (bayrak==0)
{
bayrak=1;
output_high(pin_b1);
output_high(pin_b2);
}
}
else
{
output_b(0x00);
}
}
ambar7

semih

Dediğiniz gibi olmadı. Sorunla istediğini birbirine karıştırmışsın derken ne demek istediniz anlayamadım? Tuşa yirmi saniye de basılsa bir saniye de basılsa sadece bir kez çıkış versin istiyorum

ErsinErce

butondaki durumu inceleyen bir bayrak oluştur 200ms aynı pozisyonu korursa o pozisyona geçsin. bayrağın pozisyonuna göre çıkış verirsin.

tabi tekrar tekrar kullanmak istiyorum diyorsan.

yada enerji kesilmeden eski konuma dönmesin diyorsan;

while(input(pin_a3)==0);
output_high(pin_b1);
output_high(pin_b2)
while(1);


kavram karmaşı buradan kaynaklanıyor çıkış konumu bir daha değişecek mi değişmeyecek mi?

Kabil ATICI

bayrak=0;

while(1)
   {
if(input(pin_a3)==0 )
{
if (bayrak==0)
{
bayrak=1;
output_high(pin_b1);
output_high(pin_b2);
delay_ms(15);   //<<<< delay süreni istediğin gibi ayarla.
output_b(0x00);
}
}
else
{
bayrak=0;
}
}
ambar7

semih

Yardımlarınız için teşekkür ederim. Ufak bir değişiklik yaptım ve düzeldi.

while(input(pin_a3)==1 || input(pin_a3)==0 )


yerine

while(input(pin_a3) )


kodunu kullandım.