اطلاعیه

Collapse
No announcement yet.

راهنمایی در مورد کد تایمر

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    راهنمایی در مورد کد تایمر

    با سلام بر اساتید
    من یک برنامه تایمر و ساعت دارم با ds1307 هست و این برنامه را قبلا خریده بودم !! تایمر اش به صورت روزانه هست یعنی هر روز سر ساعت خاصی رله فعال میشه !! من میخوام کاری کنم مه مثلا هر 3 روز یکبار رله فعال بشود!! هر کاری کردم نتونستم درست اش کنم !! تاریخ اش میلادی هست !! لطفا اگر می توانید راهنمایی کنید!

    کد:
    #include <mega8.h>
    #include <delay.h>
    #include <stdio.h> 
    #include <i2c.h>
    #include <ds1307.h>
    #include <alcd.h> 
    #define b_down  PIND.1
    #define b_up   PIND.2   
    #define b_set   PIND.0
    #define b_set_up   PIND.4
    #define b_set_down   PIND.5
    #define relay   PORTB.7 
    //____________________________________________________________
    void main(){ 
    char lcd_buffer1[16];
    //char lcd_buffer2[16]; 
    unsigned char hr,min,sec,status=0,value=0,roz=0;
    unsigned char week,year,month,day;
    unsigned char en_hr=0,en_min=0,en_sec=0;
    unsigned char st_hr=0,st_min=0,st_sec=0;
    unsigned char en_year=0,en_month=0,en_day=0;
    unsigned char st_year=0,st_month=0,st_day=0;
    unsigned int main_year;
    DDRB.7=0xFF; 
    PORTD=0XFF;
    i2c_init();
    lcd_init(16);
    rtc_init(0,0,0);
    
    if(b_set == 0)
    {
      rtc_set_time(0,0,0);
      rtc_set_date(0,8,7,15);
      lcd_putsf("Successfully!");
      while(1)
      {
      }
    }
     
    delay_ms(20);
    rtc_get_time(&en_hr,&en_min,&en_sec); 
    rtc_get_time(&st_hr,&st_min,&st_sec);
    rtc_get_date(&week,&en_day,&en_month,&en_year);
    rtc_get_date(&week,&st_day,&st_month,&st_year);
    delay_ms(20);
        
      while (1){  
    
        while(status == 0)
        {  
        
          rtc_get_time(&hr,&min,&sec);
          rtc_get_date(&week,&day,&month,&year); 
          main_year = year + 2000;
          
          if(b_up == 0)
          {
            roz++;
            if(roz == 2) roz = 0;
            while(b_up == 0); 
          }  
          
          if(roz == 0)
          {
            if(hr == en_hr & min == en_min & sec == en_sec & year == en_year & month == en_month & day == en_day)
            {
              value = 1;
              relay = 1;
            } 
    
            if(hr == st_hr & min == st_min & sec == st_sec & year == en_year & month == en_month & day == en_day)
            {
              value = 0;
              relay = 0;
            } 
          }
          else
          {
            if(hr == en_hr & min == en_min & sec == en_sec)
            {
              value = 1;
              relay = 1;
            } 
    
            if(hr == st_hr & min == st_min & sec == st_sec)
            {
              value = 0;
              relay = 0;
            } 
          }      
    
          lcd_clear();
    
          sprintf(lcd_buffer1,"Time~ %02u:%02u:%02u",hr,min,sec);
          lcd_gotoxy(0,0);    
          lcd_puts(lcd_buffer1);
          sprintf(lcd_buffer1,"%u/%02u/%02u ",main_year,month,day);
          lcd_gotoxy(0,1);    
          lcd_puts(lcd_buffer1); 
             
          if(value == 0)  
            lcd_putsf("Off");
          else
            lcd_putsf("On"); 
            
          if(roz != 0)  
            lcd_putsf(" R");        
    
          if(b_set == 0)
          {
            status++;
            if(status == 19) status = 0;
            while(b_set == 0); 
            
            }
    سپاس

    #2
    پاسخ : راهنمایی در مورد کد تایمر

    اونجایی که میاد ساعت و دقیقه و ثانیه رو مقایسه میکنه و اگه برابر بودند رله رو 1 میکنه، بجای اینکه تا برابر شدند رله رو 1 کنه به یه متغیر یکی اضافه کنه و وقتی اون متغیر به 3 رسید رله رو فعال کنه.
    www.gam-co.blogsky.com

    دیدگاه


      #3
      پاسخ : راهنمایی در مورد کد تایمر

      نوشته اصلی توسط vahidabedi
      اونجایی که میاد ساعت و دقیقه و ثانیه رو مقایسه میکنه و اگه برابر بودند رله رو 1 میکنه، بجای اینکه تا برابر شدند رله رو 1 کنه به یه متغیر یکی اضافه کنه و وقتی اون متغیر به 3 رسید رله رو فعال کنه.
      ممنون دوست عزیز: زیاد متوجه نشدم چی فرمودید!! لطفا می کنید دقیق تر توضیح بدهید یا ان قسمت که از کدی را که گفتید:بهش ان کد موردنظر تان را اضافه کنید تا عملا تست کنم!
      سپاس

      دیدگاه


        #4
        پاسخ : راهنمایی در مورد کد تایمر

        کسی نیست راهنمایی بکند!!

        دیدگاه


          #5
          پاسخ : راهنمایی در مورد کد تایمر

          سلام دوست عزیز این برنلمه رو چک کن ببین چطوره خبرشو بده
          #include <mega8.h>
          #include <delay.h>
          #include <stdio.h>
          #include <i2c.h>
          #include <ds1307.h>
          #include <alcd.h>
          #define b_down PIND.1
          #define b_up PIND.2
          #define b_set PIND.0
          #define b_set_up PIND.4
          #define b_set_down PIND.5
          #define relay PORTB.7
          //__________________________________________________ __________
          void main(){
          char lcd_buffer1[16];
          //char lcd_buffer2[16];
          unsigned char i,hr,min,sec,status=0,value=0,roz=0;
          unsigned char week,year,month,day;
          unsigned char en_hr=0,en_min=0,en_sec=0;
          unsigned char st_hr=0,st_min=0,st_sec=0;
          unsigned char en_year=0,en_month=0,en_day=0;
          unsigned char st_year=0,st_month=0,st_day=0;
          unsigned int main_year;
          DDRB.7=0xFF;
          PORTD=0XFF;
          i2c_init();
          lcd_init(16);
          rtc_init(0,0,0);

          if(b_set == 0)
          {
          rtc_set_time(0,0,0);
          rtc_set_date(0,8,7,15);
          lcd_putsf("Successfully!"
          while(1)
          {
          }
          }

          delay_ms(20);
          rtc_get_time(&en_hr,&en_min,&en_sec);
          rtc_get_time(&st_hr,&st_min,&st_sec);
          rtc_get_date(&week,&en_day,&en_month,& amp;en_year);
          rtc_get_date(&week,&st_day,&st_month,& amp;st_year);
          delay_ms(20);

          while (1){

          while(status == 0)
          {

          rtc_get_time(&hr,&min,&sec);
          rtc_get_date(&week,&day,&month,&ye ar);
          main_year = year + 2000;

          if(b_up == 0)
          {
          roz++;
          if(roz == 2) roz = 0;
          while(b_up == 0);
          }

          if(roz == 0)
          {
          if(hr == en_hr & min == en_min & sec == en_sec & year == en_year & month == en_month & day == en_day)
          {
          i++ ;
          if(i==3){
          value = 1;
          relay = 1;
          i=0;
          }
          }

          if(hr == st_hr & min == st_min & sec == st_sec & year == en_year & month == en_month & day == en_day)
          {
          value = 0;
          relay = 0;
          }
          }
          else
          {
          if(hr == en_hr & min == en_min & sec == en_sec)
          {
          i++ ;
          if(i==3){
          value = 1;
          relay = 1;
          i=0;
          }
          }

          if(hr == st_hr & min == st_min & sec == st_sec)
          {
          value = 0;
          relay = 0;
          }
          }

          lcd_clear();

          sprintf(lcd_buffer1,"Time~ %02u:%02u:%02u",hr,min,sec);
          lcd_gotoxy(0,0);
          lcd_puts(lcd_buffer1);
          sprintf(lcd_buffer1,"%u/%02u/%02u ",main_year,month,day);
          lcd_gotoxy(0,1);
          lcd_puts(lcd_buffer1);

          if(value == 0)
          lcd_putsf("Off"
          else
          lcd_putsf("On"

          if(roz != 0)
          lcd_putsf(" R"

          if(b_set == 0)
          {
          status++;
          if(status == 19) status = 0;
          while(b_set == 0);

          }
          *********************آموزش رزبری پای*********************
          از علاقمندان و دوستان عزیز دعوت میکنیم تا با همکاری هم یک آموزش پایه ای و منسجم جهت پیشرفت کار با این دسته از بردها داشته باشیم.
          با تشکر
          آدرس: https://www.raspberrypi.org/forums/viewtopic.php?f=90&t=139316

          دیدگاه


            #6
            پاسخ : راهنمایی در مورد کد تایمر

            ممنون دوسن عزیز: تست می کنم و اعلام می کنم!

            دیدگاه

            لطفا صبر کنید...
            X