Haberler:

Eposta uyarılarını yanıtlamayınız ( ! ) https://bit.ly/2J7yi0d

Ana Menü

şifreli kapı kilidi

Başlatan tauf1, 11 Mart 2014, 19:42:02

tauf1

arkadaşlar şifreli kapı kilidini yaptım çok güzel çalışıyor, fakat odanın içindeki kişinin çıkması için a0 butonuna basıp kapıyı içerden direk açamıyorum yardım edebilecek arkadaşlara şimdiden teşekkürler.

#include        <16f877A.h>
 #fuses          XT,NOWDT,NOPROTECT
 #use            delay(clock=4000000)
 #include        <lcd.c>
 #use            fast_io(c)  
 #use            fast_io(b)             
 #use            fast_io(a)   

 #define         sut1 pin_B4                                       
 #define         sut2 pin_B5                      
 #define         sut3 pin_B6  
 #define         sut4 pin_B7  
 
 #define         sat1 pin_B0
 #define         sat2 pin_B1                
 #define         sat3 pin_B2                    
 #define         sat4 pin_B3  

 
 #define         buzzer      pin_c0   
 #define use_portd_lcd TRUE
            
 
  unsigned int8  a,b,tus,c,d,e,k,l,m,n=0;
  unsigned int16 sifre=0;

 void tus_al()// yazılım bu fonksiyona geldiğinde buradan bir
 {            // tus değeri almadan bu fonksiyondan çıkmaz
 don:
 output_low(sut1);output_high(sut2);output_high(sut3);output_high(sut4);
 if(input(sat1)==0){tus=1;goto brk;}
 if(input(sat2)==0){tus=4;goto brk;}
 if(input(sat3)==0){tus=7;goto brk;}
 if(input(sat4)==0){tus=15;goto brk;}

 output_high(sut1);output_low(sut2);output_high(sut3);output_high(sut4);
 if(input(sat1)==0){tus=2;goto brk;}
 if(input(sat2)==0){tus=5;goto brk;}
 if(input(sat3)==0){tus=8;goto brk;}
 if(input(sat4)==0){tus=0;goto brk;}                        

 output_high(sut1);output_high(sut2);output_low(sut3);output_high(sut4);
 if(input(sat1)==0){tus=3;goto brk;}
 if(input(sat2)==0){tus=6;goto brk;}
 if(input(sat3)==0){tus=9;goto brk;}      
 if(input(sat4)==0){tus=14;goto brk;}
 
 output_high(sut1);output_high(sut2);output_high(sut3);output_low(sut4);
 if(input(sat1)==0){tus=10;goto brk;}
 if(input(sat2)==0){tus=11;goto brk;}
 if(input(sat3)==0){tus=12;goto brk;}
 if(input(sat4)==0){tus=13;goto brk;}
 goto don;  
 brk:
 while(!input(sat1));
 while(!input(sat2));          
 while(!input(sat3));
 while(!input(sat4));                           
 output_high(buzzer);delay_ms(100);output_low(buzzer); 
 }   

 void   tarama()// Yazılım bu fonksiyona geldiğinde herhangi bir tuşa                
 {              // basılmış diye bakar ve beklemeden fonksiyondan çıkar.                              
 
 output_low(sut1);output_high(sut2);output_high(sut3);output_high(sut4);        
 if(input(sat1)==0){tus=1;goto brk;}
 if(input(sat2)==0){tus=4;goto brk;}
 if(input(sat3)==0){tus=7;goto brk;}
 if(input(sat4)==0){tus=15;goto brk;}

 output_high(sut1);output_low(sut2);output_high(sut3);output_high(sut4);
 
 if(input(sat1)==0){tus=2;goto brk;}
 if(input(sat2)==0){tus=5;goto brk;}
 if(input(sat3)==0){tus=8;goto brk;} 
 if(input(sat4)==0){tus=0;goto brk;}

 output_high(sut1);output_high(sut2);output_low(sut3);output_high(sut4);
 if(input(sat1)==0){tus=3;goto brk;}
 if(input(sat2)==0){tus=6;goto brk;}
 if(input(sat3)==0){tus=9;goto brk;}
 if(input(sat4)==0){tus=14;goto brk;}
 
 output_high(sut1);output_high(sut2);output_high(sut3);output_low(sut4);
 if(input(sat1)==0){tus=10;goto brk;}
 if(input(sat2)==0){tus=11;goto brk;}
 if(input(sat3)==0){tus=12;goto brk;}
 if(input(sat4)==0){tus=13;goto brk;}
 brk:
 while(!input(sat1));                        
 while(!input(sat2));
 while(!input(sat3));            
 while(!input(sat4));    
 }
 
 void _eeprom() 
 {


  printf(lcd_putc,"\fy1sifre:");
  delay_ms(500);
   
  all:
   
  tus_al();
  k=tus;
  write_eeprom(0,k);
  lcd_gotoxy(9,1);
  printf(lcd_putc,"%u",tus);
  if(tus==10||tus==11||tus==12||tus==13||tus==14||tus==15) {goto all;}
  delay_ms(300);
 
  tus_al();
  l=tus;
  write_eeprom(1,l);
  lcd_gotoxy(10,1);printf(lcd_putc,"%u",tus);
  if(tus==10||tus==11||tus==12||tus==13||tus==14||tus==15) {goto all;}
  delay_ms(300);
 
  tus_al();
  m=tus;
  write_eeprom(2,m);
  lcd_gotoxy(11,1);printf(lcd_putc,"%u",tus);
  if(tus==10||tus==11||tus==12||tus==13||tus==14||tus==15) {goto all;}
  delay_ms(300);
  
  tus_al();
  n=tus;
  write_eeprom(3,n); 
  lcd_gotoxy(12,1);
  printf(lcd_putc,"%u",tus);
  if(tus==10||tus==11||tus==12||tus==13||tus==14||tus==15) {goto all;}
  delay_ms(300);
 
  tus_al();
  e=tus;
  if(tus==10||tus==11||tus==12||tus==13||tus==15) {goto all;}
  delay_ms(300);
 

  sifre=((k*1000)+(l*100)+(m*10)+(n*1));
 
 
 }

 void main()
 {            
  set_tris_b(0b00001111);//keypad baglı    
 set_tris_c(0b00000000); 
 set_tris_a(0b00000001); 
 
 set_tris_d(0b00000000);
 port_b_pullups(true);
 output_a(0x00);                            
 output_b(0x00); 
 output_c(0x00); 





  lcd_init();   // LCD hazırlanıyor

 basla:

 printf(lcd_putc,"\fsifre:");
 delay_ms(500);






 tus_al();
 a=tus;
 lcd_gotoxy(9,1);
 printf(lcd_putc,"X");
 if(tus==10||tus==11||tus==12||tus==13||tus==14||tus==15) {goto basla;}
 delay_ms(300);
 
 tus_al();
 b=tus;
 lcd_gotoxy(10,1); 
 printf(lcd_putc,"X");
 if(tus==10||tus==11||tus==12||tus==13||tus==14||tus==15) {goto basla;}
 delay_ms(300);
 
 tus_al();
 c=tus;
 lcd_gotoxy(11,1); 
 printf(lcd_putc,"X");
 if(tus==10||tus==11||tus==12||tus==13||tus==14||tus==15) {goto basla;}
 delay_ms(300);
  
 tus_al();
 d=tus;
 lcd_gotoxy(12,1);
 printf(lcd_putc,"X");
 if(tus==10||tus==11||tus==12||tus==13||tus==14||tus==15) {goto basla;}
 delay_ms(300);
 
 tus_al();
 e=tus;

 if(tus==10||tus==11||tus==12||tus==13||tus==15) {goto basla;}
 delay_ms(300);
  
 
 sifre=((a*1000)+(b*100)+(c*10)+(d*1));

 if(sifre==2143 && e==14)
 {
 _eeprom();
 delay_ms(900);

 }

  if(sifre==((read_eeprom(0)*1000)+(read_eeprom(1)*100)+(read_eeprom(2)*10)+(read_eeprom(3)*1))&&e==14)
 
  {
   lcd_gotoxy(1,1);
  printf(lcd_putc,"\f   DOGRU SIFRE");
  printf(lcd_putc,"\n   HOSGELDINIZ");
  delay_ms(300);
    
  output_high(pin_c3);
  delay_ms(5000);
  
  output_low(pin_c3);
  
  goto basla; 
  }
  
  else
  {
  
   lcd_gotoxy(1,1);
  printf(lcd_putc,"\f  YANLIS SIFRE");
  printf(lcd_putc,"\nTEKRAR DENEYINIZ");
  delay_ms(3000);
 

  goto basla;
  }
  
 

  }

Recep METE

Hocam isis şemasını koyarsınız sorun çözüm çalışmasını  daha iyi yapabiliriz
printf(lcd_putc,"\f  Ne kadar okursan oku, bilgine, yakışır şekilde davranmıyorsan cahilsin demektir.  \n   semfero");d

tauf1

bord kullandığım için isis şemasını çizmedim fakat aresi gönderebilirm

elektronart

Doğru anlayabildiysem kodun
output_high(pin_c3);
delay_ms(5000);
output_low(pin_c3);

bölümü doğru şifre girildiğinde kapıyı açan bölüm. a0 butonu nedir, nereye bağlıdır, nasıl algılanıyor onu anlayamadım ama algılandığı yere bu bölümü ekleyip bir deneyebilirsin.
Açık Elektronik

tauf1

A0 butonuna basınca içerden direk açacak, dışardanda şifre girince açacak.  benim sorunum verdiğiniz kısmın nereye konulacağı,bu konuda yardım edebilirseniz sevinirim

elektronart

Bunun için semfero'nun belirttiği gibi bir şema görmek gerekli.
Açık Elektronik

cannpilot

Şema şart gibi gözüküyor :(((

tauf1

arkadaşlar neden kimse ilgilenmiyor

selimkoc

Yazılımda en temel yapılması gereken önce algoritmanın oluşturulmasıdır. Algoritma olsaydı herşey yerli yerine otururdu.

Öncelikle tavsiyem programın algoritmasını çıkar. Sonra kendin nereye konulacağını bulacaksın.

Kolay gelsin...


tauf1

kardeşim lütfen bulmama yardım et

xoom

C de goto komutu kullanılınca böyle karmakarışık bir yapı oluşuyor ve yazan haricinde başkasının algoritmayı çözmesi için epey zaman ayırması gerekiyor. Herneyse..
Sanırım c3 pininde Kapının açılmasını sağlayan her ne ise onu tetikliyorsun 5sn boyunca.. Kabaca bir baktım ama Basla: komutunun hemen altına.
if(input(pin_a0)==1) // Artık basınca butonu 0' mı 1'mi hangisine çekiyorsan onunla değiştirirsin.
{
output_hig(pin_c3);delay_ms(5000);Output_low(pin_c3);
}

bunu ekleyerek deneyebilirsin.

tauf1

olmadı kardeşim. öğlenden beri her ihtimali denedim teşekkürler

xoom

az önce verdiğim kodu programın sürekli döndüğü yere yaz ve sanırım tus_al() fonksiyonu gibi bu fonksiyonun içine başına yaz o zaman.. don: den sonra.

tauf1

kardeşim harikasın seni seviyorum.
öğlenden buyana uğraşıyordum.
teşekkürler.

tauf1

herşeyi tamam
#include        <16f877A.h>
 #fuses          XT,NOWDT,NOPROTECT
 #use            delay(clock=4000000)
 #include        <lcd.c>
 #use            fast_io(c)  
 #use            fast_io(b)             
 #use            fast_io(a)   

 #define         sut1 pin_B4                                       
 #define         sut2 pin_B5                      
 #define         sut3 pin_B6  
 #define         sut4 pin_B7  
 
 #define         sat1 pin_B0
 #define         sat2 pin_B1                
 #define         sat3 pin_B2                    
 #define         sat4 pin_B3  

 
 #define         buzzer      pin_c0   
 #define use_portd_lcd TRUE
            
 
  unsigned int8  a,b,tus,c,d,e,k,l,m,n=0;
  unsigned int16 sifre=0;

 void tus_al()// yazılım bu fonksiyona geldiğinde buradan bir
 {            // tus değeri almadan bu fonksiyondan çıkmaz
 don:if(input(pin_a0))
 {output_high(pin_c3);delay_ms(5000);output_low(pin_c3);goto don;}
 output_low(sut1);output_high(sut2);output_high(sut3);output_high(sut4);
 if(input(sat1)==0){tus=1;goto brk;}
 if(input(sat2)==0){tus=4;goto brk;}
 if(input(sat3)==0){tus=7;goto brk;}
 if(input(sat4)==0){tus=15;goto brk;}

 output_high(sut1);output_low(sut2);output_high(sut3);output_high(sut4);
 if(input(sat1)==0){tus=2;goto brk;}
 if(input(sat2)==0){tus=5;goto brk;}
 if(input(sat3)==0){tus=8;goto brk;}
 if(input(sat4)==0){tus=0;goto brk;}                        

 output_high(sut1);output_high(sut2);output_low(sut3);output_high(sut4);
 if(input(sat1)==0){tus=3;goto brk;}
 if(input(sat2)==0){tus=6;goto brk;}
 if(input(sat3)==0){tus=9;goto brk;}      
 if(input(sat4)==0){tus=14;goto brk;}
 
 output_high(sut1);output_high(sut2);output_high(sut3);output_low(sut4);
 if(input(sat1)==0){tus=10;goto brk;}
 if(input(sat2)==0){tus=11;goto brk;}
 if(input(sat3)==0){tus=12;goto brk;}
 if(input(sat4)==0){tus=13;goto brk;}
 goto don;  
 brk:
 while(!input(sat1));
 while(!input(sat2));          
 while(!input(sat3));
 while(!input(sat4));                           
 output_high(buzzer);delay_ms(100);output_low(buzzer); 
 }   

 void   tarama()// Yazılım bu fonksiyona geldiğinde herhangi bir tuşa                
 {              // basılmış diye bakar ve beklemeden fonksiyondan çıkar.                              
 
 output_low(sut1);output_high(sut2);output_high(sut3);output_high(sut4);        
 if(input(sat1)==0){tus=1;goto brk;}
 if(input(sat2)==0){tus=4;goto brk;}
 if(input(sat3)==0){tus=7;goto brk;}
 if(input(sat4)==0){tus=15;goto brk;}

 output_high(sut1);output_low(sut2);output_high(sut3);output_high(sut4);
 
 if(input(sat1)==0){tus=2;goto brk;}
 if(input(sat2)==0){tus=5;goto brk;}
 if(input(sat3)==0){tus=8;goto brk;} 
 if(input(sat4)==0){tus=0;goto brk;}

 output_high(sut1);output_high(sut2);output_low(sut3);output_high(sut4);
 if(input(sat1)==0){tus=3;goto brk;}
 if(input(sat2)==0){tus=6;goto brk;}
 if(input(sat3)==0){tus=9;goto brk;}
 if(input(sat4)==0){tus=14;goto brk;}
 
 output_high(sut1);output_high(sut2);output_high(sut3);output_low(sut4);
 if(input(sat1)==0){tus=10;goto brk;}
 if(input(sat2)==0){tus=11;goto brk;}
 if(input(sat3)==0){tus=12;goto brk;}
 if(input(sat4)==0){tus=13;goto brk;}
 brk:
 while(!input(sat1));                        
 while(!input(sat2));
 while(!input(sat3));            
 while(!input(sat4));    
 }
 
 void _eeprom() 
 {


  printf(lcd_putc,"\fy1sifre:");
  delay_ms(500);
   
  all:
   
  tus_al();
  k=tus;
  write_eeprom(0,k);
  lcd_gotoxy(9,1);
  printf(lcd_putc,"%u",tus);
  if(tus==10||tus==11||tus==12||tus==13||tus==14||tus==15) {goto all;}
  delay_ms(300);
 
  tus_al();
  l=tus;
  write_eeprom(1,l);
  lcd_gotoxy(10,1);printf(lcd_putc,"%u",tus);
  if(tus==10||tus==11||tus==12||tus==13||tus==14||tus==15) {goto all;}
  delay_ms(300);
 
  tus_al();
  m=tus;
  write_eeprom(2,m);
  lcd_gotoxy(11,1);printf(lcd_putc,"%u",tus);
  if(tus==10||tus==11||tus==12||tus==13||tus==14||tus==15) {goto all;}
  delay_ms(300);
  
  tus_al();
  n=tus;
  write_eeprom(3,n); 
  lcd_gotoxy(12,1);
  printf(lcd_putc,"%u",tus);
  if(tus==10||tus==11||tus==12||tus==13||tus==14||tus==15) {goto all;}
  delay_ms(300);
 
  tus_al();
  e=tus;
  if(tus==10||tus==11||tus==12||tus==13||tus==15) {goto all;}
  delay_ms(300);
 

  sifre=((k*1000)+(l*100)+(m*10)+(n*1));
 
 
 }

 void main()
 {            
  set_tris_b(0b00001111);//keypad baglı    
 set_tris_c(0b00000000); 
 set_tris_a(0b00000001); 
 set_tris_d(0b00000000);
 port_b_pullups(true);
 output_a(0x00);                            
 output_b(0x00); 
 output_c(0x00); 
 output_d(0x00);




  lcd_init();   // LCD hazırlanıyor
basla:

 



 printf(lcd_putc,"\fsifre:");
 delay_ms(500);






 tus_al();
 a=tus;
 lcd_gotoxy(9,1);
 printf(lcd_putc,"X");
 if(tus==10||tus==11||tus==12||tus==13||tus==14||tus==15) {goto basla;}
 delay_ms(300);
 
 tus_al();
 b=tus;
 lcd_gotoxy(10,1); 
 printf(lcd_putc,"X");
 if(tus==10||tus==11||tus==12||tus==13||tus==14||tus==15) {goto basla;}
 delay_ms(300);
 
 tus_al();
 c=tus;
 lcd_gotoxy(11,1); 
 printf(lcd_putc,"X");
 if(tus==10||tus==11||tus==12||tus==13||tus==14||tus==15) {goto basla;}
 delay_ms(300);
  
 tus_al();
 d=tus;
 lcd_gotoxy(12,1);
 printf(lcd_putc,"X");
 if(tus==10||tus==11||tus==12||tus==13||tus==14||tus==15) {goto basla;}
 delay_ms(300);
 
 tus_al();
 e=tus;

 if(tus==10||tus==11||tus==12||tus==13||tus==15) {goto basla;}
 delay_ms(300);
  
 
 sifre=((a*1000)+(b*100)+(c*10)+(d*1));

 if(sifre==2143 && e==14)
 {
 _eeprom();
 delay_ms(900);

 }

  if(sifre==((read_eeprom(0)*1000)+(read_eeprom(1)*100)+(read_eeprom(2)*10)+(read_eeprom(3)*1))&&e==14)
 
  {
   lcd_gotoxy(1,1);
  printf(lcd_putc,"\f   DOGRU SIFRE");
  printf(lcd_putc,"\n   HOSGELDINIZ");
  delay_ms(300);
    
  output_high(pin_c3);
  delay_ms(5000);
  
  output_low(pin_c3);
  
  goto basla; 
  }
  
  else
  {
  
   lcd_gotoxy(1,1);
  printf(lcd_putc,"\f  YANLIS SIFRE");
  printf(lcd_putc,"\nTEKRAR DENEYINIZ");
  delay_ms(3000);
 

  goto basla;
  }}