Butona Bas Ledi Yak, Aynı butona tekrar bas Ledi söndür.

Başlatan izleyici42, 22 Nisan 2015, 01:09:06

izleyici42

Butona bas ledi yak, aynı butona tekrar bas Ledi söndür..

Arkadaşlar bu işlemi yapabilmem hangi kodları kullanmam gerekir nasıl yapabilirim... Yardım edebilir misiniz ?

izleyici42

Sorumun cevabını yine kendim buldum :)
CcsC için örnek program;


//--------------------------------------------------------
//pin_c0 da buton, pin_b0 da led var
void main()
{

while(TRUE) //sonsuz döngü
{

while( input(pin_c0) ) //BUTON DURUM DEĞİŞTİRDİ Mİ? (Değiştirene kadar sonsuz döngüden ötürü tekrar kontrol eder)
{ //EVET
output_toggle(pin_b0); //ledi toggle et
delay_ms(20); //buton arkı beklemesi debounce
while( input(pin_c0) ); //BUTON DURUM DEĞİŞTİRDİ Mİ? (Değiştirene kadar tekrar kontrol eder)
// (Elin butondan çekilmesini kontrol ediyoruz)
delay_ms(20); //EVET buton arkı beklemesi debounce

} //
}
}

a4tech33


mehmet

Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr
https://creativecommons.org/licenses/by/4.0/deed.tr "CC BY"

izleyici42

bu durumda 3 buton var gayet sağlıklı çalışıyor.
 while(1){
   

   if(input(pin_b0)==1){
   
   putc(0b01010101);
   putc('X');
   putc('A');
   }
while( input(pin_b0) )
{
output_toggle(pin_a0); 
delay_ms(20); 
while( input(pin_b0) );
delay_ms(20); 
} 
 
   
if(input(pin_b1)==1){
putc(0b01010101);
putc('X');   
putc('B');
}
while( input(pin_b1) )
{
output_toggle(pin_a1); 
delay_ms(20); 
while( input(pin_b1) );
delay_ms(20); 
}

if(input(pin_b2)==1){
putc(0b01010101);
putc('X');   
putc('C');
  }
  while( input(pin_b2) )
{
output_toggle(pin_a3); 
delay_ms(20); 
while( input(pin_b2) );
delay_ms(20); 
}
 }
 
 
}

argeman

mahsuru yoksa devre şemasını paylaşmanız mümkün mü?tek butonla on-off yapan sağlam bir devre arıyorum,8 buton kullanacağım.

izleyici42

buyur kardeşim RA2 ucunu görmezden gel sen boş bırak. Ben Burada verici olarak kullanmıştım.
8 buton için daha fazla port sayısı olan bir pic kullanman gerekecek



kiok1

Alıntı yapılan: argeman - 22 Nisan 2015, 15:08:18
mahsuru yoksa devre şemasını paylaşmanız mümkün mü?tek butonla on-off yapan sağlam bir devre arıyorum,8 buton kullanacağım.

argecisin ya bizi deniyorsun değil mi? nasıl da yakışıyor bu rumuz sana :) sen bir şema çizsene biz de senin yeteneklerini görelim :) yada rumuzunu değiştir olmaz mı?

JOKERAS

Selam,
İlk olarak bende bu yöntemle başlamıştım,sağolsun "Erol" nickli bir arkadaş bana o zamanlar mantığını anlatmış ve yardımcı olmuştu.

MCU'nun bir portunu giriş olarak ayarlayın, o portu 10k gibi bir dirençle pullup yapın.
Bir ayağı şaseye(-) bağlanmış bir butonun diğer ucunu bu hatta bağlayın.
Butona bastığınızda pullup yaptığınız hat lojik 0 olacak.Şema bu.

Kodu şöyle olabilir.

void main(void) {

        while(1) {

                  if(ButonPort == 0) {                 //Butona  basılmışsa bloğa girer,yoksa atlar.
                       __delay_us(100);                //Botun arkı için.
                       LEDPORT = !LEDPORT;       //Portun değili 1 ise 0, 0 ise 1. şöylede olur LEDPORT ^= 1;
                }while(ButonPort == 0);            //Burada pgm akışı kilitlenir taaki siz butonu bırakana yani buton hattı lojik 0 olana kdr
        } //while.
} //main.

Bu işin daha iyisi port change kesmesi veya external kesme ile daha süper olur.
Siz ilk olarak bunu yapın olayı çözün derim.




uzmandr.

üstadım devrenin aynısını kodların aynısını plakete döküp yaptım bir türlü olmadı.bir yardımcı olurmusunuz?

izleyici42

while(1){
   

   if(input(pin_b0)==1)
{
  while( input(pin_b0) )
{
output_toggle(pin_a0); 
delay_ms(20); 
while( input(pin_b0) );
delay_ms(20); 
}
}

uzmandr.

üstad baskı devre ve tüm kodları paylaşırmısınız acaba hatam nerde diye bir kontrol etsem bu arada siz plaket veya bread boardda yaptınızmı devreyi.

izleyici42


PORTA Pinlerine bağlı 5 buton + pull down dirençler (10k)
PORTB Pinlerine bağlı 5 Led + dirençlerin 220-390 ohm arası olmasına dikkat et.

DEVRE ŞEMASI VE KOD

#include <16f84a.h>
#fuses XT, NOPROTECT, NOWDT, PUT
#byte porta=5
#byte portb=6
#use delay(clock=4000000)


void main(){
set_tris_b(0x00);
output_b(0x00);
set_tris_a(0xff);


while(1){
   

   if(input(pin_a0)==1)
{
  while( input(pin_a0))
{
output_toggle(pin_b0); 
delay_ms(20); 
while( input(pin_a0));
delay_ms(20); 
}
}
  if(input(pin_a1)==1)
{
  while( input(pin_a1))
{
output_toggle(pin_b1); 
delay_ms(20); 
while( input(pin_a1));
delay_ms(20); 
}
}
  if(input(pin_a2)==1)
{
  while( input(pin_a2))
{
output_toggle(pin_b2); 
delay_ms(20); 
while( input(pin_a2));
delay_ms(20); 
}
}

  if(input(pin_a3)==1)
{
  while( input(pin_a3))
{
output_toggle(pin_b3); 
delay_ms(20); 
while( input(pin_a3));
delay_ms(20);
}
}

  if(input(pin_a4)==1)
{
  while( input(pin_a4))
{
output_toggle(pin_b4); 
delay_ms(20); 
while( input(pin_a4));
delay_ms(20); 
}
}
}
}





uzmandr.

baskı devresi varmı ve diğer 2 buton ne işe yarıyor

uzmandr.

ayrıca isiste çalıştırdım hepsi bastığında yanıyo geri bastığında söndürüyor.bana ilk butona bastığımda led yanacak tekrar bastığımda sönecek ikinci butona bastığımda led yanacak bıraktığımda sönecek üçüncü butona bastığımda led 1 saniye yanacak sonra sönecek . lütfen bana bunların kodunu yazarmısınız veya varsa verirmisiniz.