Tek buton ile iki değişik alarm ayarı yapmak.

Başlatan mechanicalengine, 08 Mayıs 2014, 00:41:14

mechanicalengine

Arkadaşlar;

Aşağıdaki şekilde bir buton ile alarm1 ayarını en son yaptığımda alarm1'i sıfıra eşitlediğimde lcdalarm1_2() ekranına gidebiliyorum.(butona her basışımda alarm1 değişkenini arttırıp saat dakika seçimini değiştirip ayarlıyorum) alarm1'i sıfır'a eşitlemediğim zaman lcdalarm1_2() ekranına gidemiyorum "alarm kaydediliyor" ekranda yazılı kalıyor.

Yapmak istediğim aynı buton'a basmaya devam ederek ikinci bir alarm ayarı yapmaya devam etmek, fakat alarm1'i sıfıra eşitlediğim ve while(alarm1==4)'e yükselemediğim için devam edemiyorum.

Nasıl bir yol izlemem gerekiyor?


int8 ayar2=0;

#separate
void lcdalarm1()
{
   lcd_gotoxy(1,1);
   printf(lcd_putc,"alarm1");  
   lcd_gotoxy(1,2);
   printf(lcd_putc,"%02d:%02d",ys1,yd1);
}

#separate
void lcdalarm1_2()
{
   lcd_gotoxy(1,1);
   printf(lcd_putc,"\falarm \ayarlandı");  
   lcd_gotoxy(11,2);
   printf(lcd_putc,"%02d:%02d",ys1,yd1);
}


#separate
void alarmayariyap()       
{
   if(input(pin_d3)==0){alarm1++;delay_ms(20);printf(lcd_putc,"\falarm \nayari");delay_ms(1000);printf(lcd_putc,"\f");
         
   while(alarm1==1){
   lcdalarm1();
   lcd_gotoxy(1,2);lcd_send_byte(0x01,0x0d);lcd_gotoxy(2,2);lcd_send_byte(0x02,0x0d);
   if(input(pin_d0)==0){ys1++;delay_ms(20);if(ys1==12){ys1=0;}while(input(pin_d0)==0);}
   if(input(pin_d1)==0){ys1--;delay_ms(20);if(ys1==-1){ys1=11;}while(input(pin_d1)==0);}
   if(input(pin_d3)==0){ayar2++;delay_ms(200);while(input(pin_d2)==0);}}
   
   while(alarm1==2){
   lcdalarm1();
   lcd_gotoxy(4,2);lcd_send_byte(0x04,0x0d);lcd_gotoxy(5,2);lcd_send_byte(0x05,0x0d);
   if(input(pin_d0)==0){yd1++;delay_ms(20);if(yd1==60){yd1=0;}while(input(pin_d0)==0);}
   if(input(pin_d1)==0){yd1--;delay_ms(20);if(yd1==-1){yd1=59;}while(input(pin_d1)==0);}
   if(input(pin_d3)==0){ayar2++;delay_ms(200);while(input(pin_d2)==0);}}
   
   while(alarm1==3){sa1=ys1;da1=yd1;lcd_gotoxy(1,1); 
   printf(lcd_putc,"\falarm \nkaydediliyor...");
   delay_ms(1000);printf(lcd_putc,"\f");
   alarm1==0;   [b]//bu şekilde kullandığım zaman ancak lcdalarm1_2(); ekranına gidebiliyorum?????[/b]
   lcdalarm1_2();
   printf(lcd_putc,"\f");
   }

mehmet

Alıntı yapılan: mechanicalengine - 08 Mayıs 2014, 00:41:14
   alarm1==0; 
   

Kodun hepsini incelemedim ancak "==" denklik sorgulamada kullanılmaz mı?

Bir de kodların anlaşılabilir olması açısından
void fonksiyon(void)
{
    if(sart == 0)
    {
        deger = 1;
        if(deger2 == 7)
        {
            son_deger = 0;
        }
    }
}
gibi yazarsanız uygun olur düşüncesindeyim...
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr

Recep METE

Hocam isis şeması ve kodları tam gönderirsen üzerinde çalışıp sana yardımcı olurum.Bu şekilde çok anlaşılır değil.
printf(lcd_putc,"\f  Ne kadar okursan oku, bilgine, yakışır şekilde davranmıyorsan cahilsin demektir.  \n   semfero");d

mechanicalengine

#3
@Mehmet hocam biraz daha düzenli yazdım sanırım bu sefer :). haklısınız alarm2=0 olması gerekiyor, orada bir hata yapmışım. Teşekkürler.

@semfero hocam bütün kodları aşağıda bulabilirsiniz. Amacım alarm1'i ayarladıktan sonra alarm2'ye aynı tuşla devam etmek fakat henüz başarılı olduğum söylenemez. Alarm1'i ayarladıktan sonra ayar2=0  yapmazsam alarm1_2() ekranına geçemiyorum. ayar2=0 yaptığım için de ayar2 değişkenini ayar2=4 yapamıyorum.

#include "alarm.h"
#include "DS1302.c"
#include "lcd.c"

#define use_portb_lcd TRUE

#use fast_io(b)
#use fast_io(c)
#use fast_io(d)
#use fast_io(e)

int8 saniye,dakika,saat,gun,ay,hafta,yil,ayar=0,ayar2=0,sa1,da1,as1,ad1,as2,ad2;
int1 bekle=false;
int i=1;

void lcd()
{
   lcd_gotoxy(1,1);
   printf(lcd_putc,"%02d/%02d/%02d",gun,ay,yil);  
   lcd_gotoxy(1,2);
   printf(lcd_putc,"%02d:%02d:%02d",saat,dakika,saniye);
   lcd_gotoxy(11,1);
   switch(hafta)  
      {                     
         case 1: printf(lcd_putc,"Pzts"); break; 
         case 2: printf(lcd_putc,"SALI"); break; 
         case 3: printf(lcd_putc,"CARS"); break; 
         case 4: printf(lcd_putc,"PERS"); break;
         case 5: printf(lcd_putc,"CUMA"); break; 
         case 6: printf(lcd_putc,"Cmts"); break; 
         case 7: printf(lcd_putc,"Pzar"); break; 
      }
}
#separate
void lcdalarm1()
{
   lcd_gotoxy(1,1);
   printf(lcd_putc,"alarm1");  
   lcd_gotoxy(1,2);
   printf(lcd_putc,"%02d:%02d",as1,ad1);
}
#separate
void lcdalarm1_2()
{
   lcd_gotoxy(1,1);
   printf(lcd_putc,"\falarm1 \nhazir");  
   lcd_gotoxy(11,2);
   printf(lcd_putc,"%02d:%02d",as1,ad1);
}
#separate
void lcdalarm2()
{
   lcd_gotoxy(1,1);
   printf(lcd_putc,"alarm2");  
   lcd_gotoxy(1,2);
   printf(lcd_putc,"%02d:%02d",as2,ad2);
}
#separate
void lcdalarm2_2()
{
   lcd_gotoxy(1,1);
   printf(lcd_putc,"\nalarm2 \nhazir");  
   lcd_gotoxy(11,2);
   printf(lcd_putc,"%02d:%02d",as2,ad2);
}

#int_ext
void kesme(void)
   {
   if ((i==4))
         {
         disable_interrupts(INT_EXT);
         disable_interrupts(GLOBAL);
         output_low(pin_b1);
         output_low(pin_b2);
         output_high(pin_b3);
         }
   else  { 
         bekle=true;
         }
         i++;
   }

#int_RB
void B_degisiklik()
         {
         if(input(pin_b4))
         {
         output_low(pin_b1);
         output_low(pin_b2);
         output_low(pin_b3);
         i=0;
         bekle=false;
         }
         }
#separate
void kaydedildiyazdir(){printf(lcd_putc,"\fayarlariniz\n   kaydedildi...");delay_ms(700);}

#separate
void baslangicekrani(){printf(lcd_putc,"\fmerhaba\n   HOSGELDINIZ...");delay_ms(700);printf(lcd_putc,"\f\n");}

#separate
void menu(){printf(lcd_putc,"\falarmi\nayarlayabilirsiniz..");delay_ms(700);}

#separate
void ayaryap()        
{
   if(input(pin_d2)==0){ayar++;delay_ms(20);printf(lcd_putc,"\f ayarlarinizi \n yapabilirsiniz");delay_ms(450);printf(lcd_putc,"\f");}

   while(ayar==1){
   lcd();lcd_gotoxy(1,1);lcd_send_byte(0x01,0x0d);lcd_gotoxy(2,1);lcd_send_byte(0x02,0x0d);   
   if(input(pin_d0)==0){gun++;delay_ms(20);if(gun==32){gun=1;}while(input(pin_d0)==0);}
   if(input(pin_d1)==0){gun--;delay_ms(20);if(gun==0){gun=31;}while(input(pin_d1)==0);}
   if(input(pin_d2)==0){ayar++;delay_ms(200);while(input(pin_d2)==0);}}
   
   while(ayar==2){
   lcd();lcd_gotoxy(4,1);lcd_send_byte(0x04,0x0d);lcd_gotoxy(5,1);lcd_send_byte(0x05,0x0d);
   if(input(pin_d0)==0){ay++;delay_ms(20);if(ay==13){ay=1;}while(input(pin_d0)==0);}
   if(input(pin_d1)==0){ay--;delay_ms(20);if(ay==0){ay=12;}while(input(pin_d1)==0);}
   if(input(pin_d2)==0){ayar++;delay_ms(200);while(input(pin_d2)==0);}}
    
   while(ayar==3){
   lcd();lcd_gotoxy(7,1);lcd_send_byte(0x07,0x0d);lcd_gotoxy(8,1);lcd_send_byte(0x08,0x0d);
   if(input(pin_d0)==0){yil++;delay_ms(20);while(input(pin_d0)==0);}
   if(input(pin_d1)==0){yil--;delay_ms(20);if(yil==-1)yil=99;while(input(pin_d1)==0);}
   if(input(pin_d2)==0){ayar++;delay_ms(200);while(input(pin_d2)==0);}}
   
   while(ayar==4){
   lcd_gotoxy(11,1);lcd_send_byte(0x11,0x0d);lcd();delay_us(5);
   if(input(pin_d0)==0){hafta++;delay_ms(20);if(hafta==8){hafta=1;}while(input(pin_d0)==0);}
   if(input(pin_d1)==0){hafta--;delay_ms(20);if(hafta==0){hafta=7;}while(input(pin_d1)==0);}
   if(input(pin_d2)==0){ayar++;delay_ms(200);while(input(pin_d2)==0);}}
   
   while(ayar==5){
   lcd_gotoxy(1,2);lcd_send_byte(0x40,0x0d);lcd_gotoxy(2,2);lcd_send_byte(0x41,0x0d);lcd();
   if(input(pin_d0)==0){saat++;delay_ms(20);if(saat==24){saat=0;}while(input(pin_d0)==0);}
   if(input(pin_d1)==0){saat--;delay_ms(20);if(saat==-1){saat=23;}while(input(pin_d1)==0);}
   if(input(pin_d2)==0){ayar++;delay_ms(200);while(input(pin_d2)==0);}}
   
   while(ayar==6){
   lcd_gotoxy(4,2);lcd_send_byte(0x43,0x0d);lcd_gotoxy(5,2);lcd_send_byte(0x44,0x0d);lcd();
   if(input(pin_d0)==0){dakika++;delay_ms(20);if(dakika==60){dakika=0;}while(input(pin_d0)==0);}
   if(input(pin_d1)==0){dakika--;delay_ms(20);if(dakika==-1){dakika=59;}while(input(pin_d1)==0);}
   if(input(pin_d2)==0){ayar++;delay_ms(200);while(input(pin_d2)==0);}}
   
      
   while(ayar==7){rtc_set_datetime(gun,ay,yil,hafta,saat,dakika);    
   delay_ms(20);
   kaydedildiyazdir();
   //printf(lcd_putc,"\f    AYARLAR\n   YUKLENIYOR");
   delay_ms(1000);printf(lcd_putc,"\f");
   ayar=0;
}
   }
#separate
 void yemayariyap()       
{
   if(input(pin_d3)==0){ayar2++;delay_ms(20);printf(lcd_putc,"\falarmi \nayarlayabilirsiniz");delay_ms(1000);printf(lcd_putc,"\f");
         
   while(ayar2==1){
   lcdalarm1();
   lcd_gotoxy(1,2);lcd_send_byte(0x01,0x0d);lcd_gotoxy(2,2);lcd_send_byte(0x02,0x0d);
   if(input(pin_d0)==0){as1++;delay_ms(20);if(as1==13){as1=0;}while(input(pin_d0)==0);}
   if(input(pin_d1)==0){as1--;delay_ms(20);if(as1==-1){as1=12;}while(input(pin_d1)==0);}
   if(input(pin_d3)==0){ayar2++;delay_ms(200);while(input(pin_d2)==0);}}
   
   while(ayar2==2){
   lcdalarm1();
   lcd_gotoxy(4,2);lcd_send_byte(0x04,0x0d);lcd_gotoxy(5,2);lcd_send_byte(0x05,0x0d);
   if(input(pin_d0)==0){ad1++;delay_ms(20);if(ad1==60){ad1=0;}while(input(pin_d0)==0);}
   if(input(pin_d1)==0){ad1--;delay_ms(20);if(ad1==-1){ad1=59;}while(input(pin_d1)==0);}
   if(input(pin_d3)==0){ayar2++;delay_ms(200);while(input(pin_d2)==0);}}
   
   while(ayar2==3){sa1=as1;da1=ad1;lcd_gotoxy(1,1); 
   printf(lcd_putc,"\falarm1 \nayarlaniyor...");
   delay_ms(1000);
   //ayar2=0;
   //printf(lcd_putc,"\f");
   //lcd_gotoxy(1,1);
   //printf(lcd_putc,"\nalarm \nhazir");  
   //lcd_gotoxy(11,2);
   //printf(lcd_putc,"%02d:%02d",ys1,yd1);
   lcdalarm1_2();
     
   //printf(lcd_putc,"\f");
   }
   
   while(ayar2==4){
   lcdalarm2();
   lcd_gotoxy(1,2);lcd_send_byte(0x01,0x0d);lcd_gotoxy(2,2);lcd_send_byte(0x02,0x0d);
   if(input(pin_d0)==0){as2++;delay_ms(20);if(as2==24){as2=12;}while(input(pin_d0)==0);}
   if(input(pin_d1)==0){as2--;delay_ms(20);if(as2==11){as2=23;}while(input(pin_d1)==0);}
   if(input(pin_d3)==0){ayar2++;delay_ms(200);while(input(pin_d2)==0);}}
       
   
   }}
#separate
void main()
{  
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   lcd_init();       
   rtc_init();       
   rtc_set_datetime(24,04,14,4,8,00,); 
   delay_ms(5);
   baslangicekrani();
   //printf(lcd_putc,"\f alarm\n DENEME");
   delay_ms(200);
   printf(lcd_putc,"\f");
   delay_ms(5);    
   
while(1)
{
      //if(ayar==0){rtc_get_time(saat,dakika,saniye);rtc_get_date(gun,ay,yil,hafta);}
      //lcd();
      //lcdyemleme1();
      ayaryap();
      yemayariyap();
           
if(saat==sa1&&dakika==da1&&saniye==00)
               {
               set_tris_b(0b00010001);
               output_b(0x00);
               output_low(pin_b1);
               output_high(pin_b2);
               ext_int_edge(H_TO_L);
               enable_interrupts(INT_EXT);
               enable_interrupts(INT_RB);
               enable_interrupts(GLOBAL);
               }

if (bekle==true)
    {
    output_low(pin_b2);
     output_high(pin_b1);
     delay_ms(1000);
     output_low(pin_b1);
     output_high(pin_b2);
     bekle=false;
    }
    }
}


Şemayı da aşağıdkai  gibi yaptım isterseniz tekara DSN uzantısını gönderebilirim.




Yardımlarınız için şimdiden teşekkürler.

"Kusura bakmayın kodları kopyalarken karışmış, şimdi düzelttim tekrar."

mechanicalengine