Εμφάνιση αποτελεσμάτων : 1 έως 7 από 7

Θέμα: Άλλο 1 ρολόι με Arduino....

  1. #1
    Μέλος
    Όνομα
    Κώστας
    Εγγραφή
    Jun 2009
    Περιοχή
    Αθήνα
    Μηνύματα
    534

    Προεπιλογή Άλλο 1 ρολόι με Arduino....

    Καλησπέρα. πιθανόν να έπρεπε να ποστάρω στην κατηγορία παρουσίαση κατασκευών, αλλά είναι ημιτελές (χωρίς κουτί) και πολύ ταπεινό για να πάει στις κατασκευές.
    Ασχολούμαι ερασιτεχνικά με ηλεκτρονικά και γνωρίζω πολύ λίγα πράγματα... Εδώ και αρκετά χρόνια άκουγα για μικροεπεξεργαστές και πραγματικά άλλαζα κουβέντα. Μου φαίνονταν όλα ακαταλαβίστικα και πολύπλοκα.
    Τελικά το τόλμησα και πήγε καλούτσικα... Σαν πρώτο project διάλεξα να φτιάξω ένα ρολόι για εκμάθηση. Δεν έβαλα αυτό το θέμα για να γίνει κριτική στον κώδικα (αν και είναι ευπρόσδεκτη πάντα) ούτε για να παρουσιάσω έναν άψογο κώδικά για ρολόι ούτε για να δείτε το χειμαδιό συνδέσεων. Ο λόγος που το γράφω είναι για να ενθαρρύνω όποιον δεν έχει ασχοληθεί και θέλει... Σίγουρα υπάρχουν πιο "κομψοί" τρόποι να γράψεις τον κώδικα αλλά τελικά το αποτέλεσμα πέτυχε....

    Η αρχική σκέψη ήταν να φτιάξω ένα ρολόι με LCD. Μετά όμως "ανακάλυψα" ότι όταν κόβεις τροφοδοσία, χάνει την ώρα....άρα έβαλα και ένα Real Time Clock modulακι. Ναι αλλά και το RTC πρέπει κάπως να ρυθμίζεται....μπήκαν και κουμπιά και menu στο παιχνίδι.... Να βάλω και 1 ξυπνητήρι; Να και το μεγαφωνάκι από παλιό ericcson κινητό... και άμα κοπεί η τροφοδοσία, το ξυπνητήρι να χάνει ρύθμιση;;;;; να και η eeprom του arduino...
    Στην αρχή πελαγώνεις.... μετά αρχίζεις το google και σιγά σιγά προχωράς.

    Σαν hardware :
    1. funduino uno
    2. LCD 16x2 με I2C
    3. RTC DS1307 με I2C
    4. 4x κουμπάκια
    5. 4 x αvτιστασούλες 10K (pull up συνδεσμολογία των παραπάνω)
    6. μεγαφωνάκι κινητού

    Παρακάτω ο κώδικας:
    Κώδικας:
    #include <EEPROM.h> //for alarm storage
    #include <pitches.h> // for alarm buzzer
    #include <DS1307RTC.h> //RTC
    #include <Time.h> //time
    #include <Wire.h> //for I2C 
    #include <LiquidCrystal_I2C.h> //i2c LCD
    
    
    #define I2C_ADDR    0x27
    #define En_pin  2
    #define Rw_pin  1
    #define Rs_pin  0
    #define D4_pin  4
    #define D5_pin  5
    #define D6_pin  6
    #define D7_pin  7
    
    const int menubutton = 2; 
    const int upbutton = 3; 
    const int downbutton = 4;
    const int okbutton = 5;
    
    int minutes = 0;
    int hours = 0;
    int secs = 0;
    int days = 0;
    int months = 0;
    int years = 0;
    int weekdays = 0;
    int menuposition = 0;
    int alhour= 0;
    int alminutes = 0;
    int alset = 0;
    int led = 13;
    
    LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);  // Set the LCD I2C address
    int menubuttonstate = 0;
    int upbuttonstate = 0;
    int downbuttonstate = 0;
    int okbuttonstate = 0;
    
    
    int melody[] = {  NOTE_C4, NOTE_G3,NOTE_G3, NOTE_A3, NOTE_G3,0, NOTE_B3, NOTE_C4};
    //note durations: 4 = quarter note, 8 = eighth note, etc.:
    int noteDurations[] = {  4, 8, 8, 4,4,4,4,4 };
    
    byte bell[8] = //icon for alarm
    {
            0b00000,
        0b00100,
        0b01010,
        0b01010,
        0b01010,
        0b10001,
        0b11111,
        0b00100
    };
    
    
    
    void setup()
    {
    pinMode(menubutton, INPUT); 
    pinMode(upbutton, INPUT);
    pinMode(downbutton, INPUT);
    pinMode(okbutton, INPUT);
    pinMode(led, OUTPUT);
    
    setSyncProvider(RTC.get); //get RTC time
     lcd.begin(16,2);               // initialize the lcd 
     lcd.clear();
     lcd.createChar(1,bell); //create bell symbol
      
      alhour = EEPROM.read(1); //read alarm setting hours
      alminutes = EEPROM.read(2); //read alarm setting minutes
      alset = EEPROM.read(3); //read alarm setting status
      
      digitalWrite(led, LOW); // make sure pcb led is not on
    }
    
    
    void loop()
    {
      lcd.backlight();               // turns backlight on
      
      menubuttonstate = digitalRead(menubutton);
     
      if (menubuttonstate == HIGH) {menu();}     
     
       
      lcd.setCursor(4,0);                
      printDigits(hour());
      lcd.print(":");
      printDigits(minute());
      lcd.print(":");
      printDigits(second());
      lcd.print(" ");
      lcd.setCursor(1,1);
      weekdays= weekday();
      
      if (weekdays == 1) {lcd.print ("SUN");}
      if (weekdays == 2) {lcd.print ("MON");}
      if (weekdays == 3) {lcd.print ("TUE");}
      if (weekdays == 4) {lcd.print ("WED");}
      if (weekdays == 5) {lcd.print ("THU");}
      if (weekdays == 6) {lcd.print ("FRI");}
      if (weekdays == 7) {lcd.print ("SAT");}
      
      lcd.print(" ");
      printDigits(day());
      lcd.print("/");
      printDigits(month());
      lcd.print("/");
      lcd.print(year());
      lcd.setCursor(0,0);
      //lcd.print (alset);
      if (alset == 1) { lcd.write(1);} 
      else {lcd.print(" ");}
    
    
      //alarm part
      
       hours = hour();
       minutes = minute();
       secs = second();
      if (hours == alhour && minutes == alminutes && secs>0 && secs<15 && alset == 1) {
         for (int thisNote = 0; thisNote < 8; thisNote++) {
    
        // to calculate the note duration, take one second 
        // divided by the note type.
        //e.g. quarter note = 1000 / 4, eighth note = 1000/8, etc.
        
        int noteDuration = 1000/noteDurations[thisNote];
        tone(8, melody[thisNote],noteDuration);
    
        // to distinguish the notes, set a minimum time between them.
        // the note's duration + 30% seems to work well:
       int pauseBetweenNotes = noteDuration * 1.30;
        delay(pauseBetweenNotes);
        //stop the tone playing:
        noTone(8);
      } //for end
      } //if end
      
    } // loop end
    
    
    void printDigits(int digits){
      // utility function for digital clock display: prints preceding colon and leading 0
      
      if(digits < 10) lcd.print('0');
      lcd.print(digits);
    }  //printdigits end
    
    
    void menu(){
      
      delay (100);
      menubuttonstate = digitalRead(menubutton);
      
      while (menubuttonstate == LOW) {
      
      menubuttonstate = digitalRead(menubutton);
      upbuttonstate = digitalRead(upbutton);
      downbuttonstate = digitalRead(downbutton);
      okbuttonstate = digitalRead(okbutton);
      
      if (upbuttonstate == HIGH) {menuposition = menuposition + 1;}
      if (downbuttonstate == HIGH){menuposition = menuposition - 1;} 
      if (menuposition <0) {menuposition = 7;}
      if (menuposition > 7) {menuposition = 0;}
      
     delay (100);
     
     prt();
     okbuttonstate = digitalRead(okbutton);
      if (okbuttonstate == HIGH) {chng ();}
      }
      lcd.clear();
      } //menu() end
    
      void prt(){
        lcd.setCursor(0,0);
        lcd.clear();
      if (menuposition == 0) {lcd.print("Hours");}
      if (menuposition == 1) {lcd.print("Minutes");}
      if (menuposition == 2) {lcd.print("Year");}
      if (menuposition == 3) {lcd.print("Month");}
      if (menuposition == 4) {lcd.print("Day");}
      if (menuposition == 5) {lcd.print("Alarm Hour");}
      if (menuposition == 6) {lcd.print("Alarm Minutes");}
      if (menuposition == 7) {lcd.print("Alarm Status");}
      } //prt end
      
      void chng(){
      if (menuposition == 0) {
        delay(100);
        lcd.clear();
     okbuttonstate = digitalRead(okbutton);
     hours=hour();
        while (okbuttonstate == LOW) {
        
        menubuttonstate = digitalRead(menubutton);
        upbuttonstate = digitalRead(upbutton);
        downbuttonstate = digitalRead(downbutton);
        okbuttonstate = digitalRead(okbutton);
        
        lcd.clear();
        lcd.setCursor(4,0);
        lcd.print ("  ");
        lcd.setCursor(4,0);
        lcd.print(hours);
        if (upbuttonstate == HIGH) {
        hours = hour()+ 1;}
        if (downbuttonstate == HIGH) {
        hours = hour()- 1;}
        if (hours >23) {hours = 0;}
        if (hours < 0) {hours = 23;}
        delay (100); 
        setTime(hours,minute(),second(),day(),month(),year()); //set arduino time
        RTC.set(now()); //set RTC time
        } //while end
        } // if end
      
        if (menuposition == 1) {
          delay(100);
        lcd.clear();
     okbuttonstate = digitalRead(okbutton);
     minutes=minute();
        while (okbuttonstate== LOW) {
        
        menubuttonstate = digitalRead(menubutton);
        upbuttonstate = digitalRead(upbutton);
        downbuttonstate = digitalRead(downbutton);
        okbuttonstate = digitalRead(okbutton);
      
        lcd.clear();
        lcd.setCursor(4,0);
        lcd.print(minutes);
        if (upbuttonstate == HIGH) {
        minutes = minute()+ 1;}
        if (downbuttonstate == HIGH) {
        minutes = minute()- 1;}
        if (minutes >59) {minutes = 0;}
        if (minutes < 0) {minutes = 23;}
        delay (200); 
        setTime(hour(),minutes,second(),day(),month(),year()); //set arduino time
        RTC.set(now()); //set RTC time
        } //while end
        } // if end
      
        if (menuposition == 2) {
          delay(100);
        lcd.clear();
     okbuttonstate = digitalRead(okbutton);
     years=year();
        while (okbuttonstate== LOW) {
      
        menubuttonstate = digitalRead(menubutton);
        upbuttonstate = digitalRead(upbutton);
        downbuttonstate = digitalRead(downbutton);
        okbuttonstate = digitalRead(okbutton);
        years=year();
        lcd.clear();
        lcd.setCursor(4,0);
        lcd.print(years);
        if (upbuttonstate == HIGH) {
        years = year()+ 1;}
        if (downbuttonstate == HIGH) {
        years = year()- 1;}
        if (years >2020) {years = 2014;}
        if (years < 2014) {years = 2020;}
        delay (200); 
        setTime(hour(),minute(),second(),day(),month(),years); //set arduino time
        RTC.set(now()); //set RTC time
        } //while end
        } // if end
      
        if (menuposition == 3) {
           delay(100);
        lcd.clear();
     okbuttonstate = digitalRead(okbutton);
     months=month();
        while (okbuttonstate== LOW) {
        
        menubuttonstate = digitalRead(menubutton);
        upbuttonstate = digitalRead(upbutton);
        downbuttonstate = digitalRead(downbutton);
        okbuttonstate = digitalRead(okbutton);
      
        lcd.clear();
        lcd.setCursor(4,0);
        lcd.print(months);
        if (upbuttonstate == HIGH) {
        months = month()+ 1;}
        if (downbuttonstate == HIGH) {
        months = month()- 1;}
        if (months >12) {months = 1;}
        if (months < 1) {months = 12;}
        delay (200); 
        setTime(hour(),minute(),second(),day(),months,year()); //set arduino time
        RTC.set(now()); //set RTC time
        } //while end
        } // if end 
      
        if (menuposition == 4) {
          delay(100);
        lcd.clear();
     okbuttonstate = digitalRead(okbutton);
     days=day();
        while (okbuttonstate== LOW) {
        
        menubuttonstate = digitalRead(menubutton);
        upbuttonstate = digitalRead(upbutton);
        downbuttonstate = digitalRead(downbutton);
        okbuttonstate = digitalRead(okbutton);
        
        lcd.clear();
        lcd.setCursor(4,0);
        lcd.print(days);
        if (upbuttonstate == HIGH) {
        days = day()+ 1;}
        if (downbuttonstate == HIGH) {
        days = day()- 1;}
        if (days >31) {days = 1;}
        if (days < 1) {days = 31;}
        delay (200); 
        setTime(hour(),minute(),second(),days,month(),year()); //set arduino time
        RTC.set(now()); //set RTC time
        } //while end
        } // if end
      
      
        if (menuposition == 5) {
          delay(100);
        lcd.clear();
     okbuttonstate = digitalRead(okbutton);
     
        while (okbuttonstate== LOW) {
        
        menubuttonstate = digitalRead(menubutton);
        upbuttonstate = digitalRead(upbutton);
        downbuttonstate = digitalRead(downbutton);
        okbuttonstate = digitalRead(okbutton);
        
        lcd.clear();
        lcd.setCursor(4,0);
        lcd.print(alhour);
        if (upbuttonstate == HIGH) {
        alhour = alhour + 1;}
        if (downbuttonstate == HIGH) {
        alhour = alhour- 1;}
        if (alhour >23) {alhour = 0;}
        if (alhour < 0) {alhour = 23;}
        delay (200); 
       EEPROM.write(1, alhour); //save to eeprom for power falure
        } //while end
        } // if end
      
       if (menuposition == 6) {
          delay(100);
        lcd.clear();
     okbuttonstate = digitalRead(okbutton);
     
        while (okbuttonstate== LOW) {
        
        menubuttonstate = digitalRead(menubutton);
        upbuttonstate = digitalRead(upbutton);
        downbuttonstate = digitalRead(downbutton);
        okbuttonstate = digitalRead(okbutton);
        
        lcd.clear();
        lcd.setCursor(4,0);
        lcd.print(alminutes);
        if (upbuttonstate == HIGH) {
        alminutes = alminutes + 1;}
        if (downbuttonstate == HIGH) {
        alminutes = alminutes- 1;}
        if (alminutes >59) {alminutes = 0;}
        if (alminutes < 0) {alminutes = 59;}
        delay (200); 
       EEPROM.write(2, alminutes); //save to eeprom for power falure
        } //while end
        } // if end
      
     if (menuposition == 7) {
          delay(100);
        lcd.clear();
     okbuttonstate = digitalRead(okbutton);
     
        while (okbuttonstate== LOW) {
        
        menubuttonstate = digitalRead(menubutton);
        upbuttonstate = digitalRead(upbutton);
        downbuttonstate = digitalRead(downbutton);
        okbuttonstate = digitalRead(okbutton);
        
        lcd.clear();
        lcd.setCursor(4,0);
        if (alset ==1) { lcd.print("ON");}
        if (alset ==0) {lcd.print("OFF");}
        if (upbuttonstate == HIGH) {
        alset = alset + 1;}
        if (downbuttonstate == HIGH) {
        alset = alset - 1;}
        if (alset >1) {alset = 0;}
        if (alset < 0) {alset = 1;}
        delay (200); 
       EEPROM.write(3, alset); //save to eeprom for power falure
        } //while end
        } // if end
      
      
      
      } //chng end


    Συνημένες Εικόνες Συνημένες Εικόνες

    11 Not allowed! Not allowed!

  2. 3 μέλη ευχαρίστησαν τον cosecon για αυτό το χρήσιμο μήνυμα:

    αλπινιστης (05-12-14), usa (06-12-14), xripante (28-04-15)

  3. #2
    Μέλος Το avatar του χρήστη SV1EDG
    Όνομα
    Μάριος
    Εγγραφή
    Apr 2005
    Περιοχή
    ΑΘΗΝΑ
    Μηνύματα
    1.095

    Προεπιλογή

    Μπράβο.Μ' αρέσει το σκεπτικό για την κατασκευή.

    0 Not allowed! Not allowed!

  4. #3
    Μέλος Το avatar του χρήστη xkosm
    Όνομα
    Μάκης
    Εγγραφή
    Sep 2008
    Περιοχή
    ΠΕΛΛΑ
    Μηνύματα
    161

    Προεπιλογή

    Ευχαριστώ πολύ τον φίλο Κώστα για την ιδέα του ρολογιού με ξυπνητήρι, και για την προσφορά του κώδικα σε όλα τα μέλη του forum.
    Με την σειρά μου ασχολήθηκα με τον κώδικα και έκανα μερικές τροποποιήσεις.

    1. Έβαλα κάποιους Ελληνικούς χαρακτήρες
    2. Εμφάνισα στην οθόνη την ώρα που θα χτυπήσει το ξυπνητήρι
    3. Έβαλα μια ένδειξη θερμοκρασίας επί της οθόνης
    4. Άλλαξα την μελωδία
    5. Έβαλα ένα RGB Led να ανάβει μαζί με το ξυπνητήρι
    6. Στο μενού των ρυθμίσεων προστέθηκαν και τα δευτερόλεπτα
    και κάποιες άλλες μικροαλλαγές.

    Οθόνη 20x4
    Arduino_clock_alarm_temp.jpg

    και ο κώδικας κατεβάστε τον από ΕΔΩ

    Λόγω των πολλών χαρακτήρων του κώδικα (15000+)
    δεν μπόρεσα να τον περάσω εδώ,
    για αυτό και σας τον δίνω στο παραπάνω λινκ.

    Για hardware χρησιμοποιήθηκαν:
    1. Arduino Nano
    2. LCD 20x4 με I2C
    3. RTC DS1307 με I2C
    4. πλακέτα διάτρητη με 4 buttons με τις 4 αvτιστασούλες των 10K
    5. Ενα buzzer
    6. Ena rgb led
    7. Για την θερμοκρασία το ds18b20

    DS18B20_Connection.jpg

    5 Not allowed! Not allowed!
    Τελευταία επεξεργασία από το χρήστη xkosm : 23-11-14 στις 12:24

  5. 2 μέλη ευχαρίστησαν τον xkosm για αυτό το χρήσιμο μήνυμα:

    αλπινιστης (05-12-14), usa (06-12-14)

  6. #4
    Μέλος Το avatar του χρήστη agis68
    Όνομα
    Αγις
    Εγγραφή
    Mar 2009
    Περιοχή
    ΑθΗΝΑ Πατήσσια
    Μηνύματα
    2.580

    Προεπιλογή

    πολύ καλη δουλειά, ένα όμορφο κουτάκι και τέλος....

    0 Not allowed! Not allowed!
    Τελευταία επεξεργασία από το χρήστη agis68 : 26-11-14 στις 01:21
    "Την Άνοιξη αν δεν τη βρεις τη φτιάχνεις!"
    Οδ.Ελύτης

  7. #5
    Μέλος Το avatar του χρήστη xkosm
    Όνομα
    Μάκης
    Εγγραφή
    Sep 2008
    Περιοχή
    ΠΕΛΛΑ
    Μηνύματα
    161

    Προεπιλογή

    Ευχαριστω Αγι για τα καλα σου λογια.
    Θα ηθελα να προσθέσω ακομη κανα δυο γραμμες στον κωδικα ωστε πατώντας
    πχ το κουμπι ΟΚ να κλεινει εντελως η μελωδια , ομως ακομη δεν το καταφερα.
    Αν καποιος μπορουσε να βοηθησει θα ηταν πιο ολοκληρωμενο το ρολογακι.

    0 Not allowed! Not allowed!

  8. #6
    Μέλος
    Όνομα
    Κώστας
    Εγγραφή
    Jun 2009
    Περιοχή
    Αθήνα
    Μηνύματα
    534

    Προεπιλογή

    Επανέρχομαι στο θέμα . Θέλω να φτιάξω κάποιους μικροαυτοματισμούς που απαιτούν ρολόι. Έτσι λοιπόν, "πάλεψα" λίγο ακόμα το θέμα, χωρίς όμως καλλιτεχνικές παρεμβάσεις για να βάλω και τις εποχιακές αλλαγές ώρας. Υπάρχει κάποιο library έτοιμο, το οποίο ουσιαστικά καταχωρείς χρόνο UTC και μετατρέπει στην ζώνη χρόνου με τις αλλαγές που έχεις ορίσει. Η δυσκολία που αντιμετώπισα ήταν να ρυθμίζεις το ρολόι, βλέποντας ώρα Ελλάδος και να αποθηκεύεις στο RTC ώρα UTC. Παρακάτω έχω δείγμα του κώδικα ο οποίος στριμώχνει και τις 2 ημερομηνίες και ώρες για δοκιμές. Ένα κομμάτι που με απασχόλησε είναι η 31 του μηνός. Αν είχες πχ 31/1/2014 και άλλαζες τον μήνα, σε 2 (Φεβ) τότε έχανε την μπάλα ......τελικά έβαλα κάποιους ελέγχους και σε τέτοια περίπτωση σε πάει 28/2 αυτόματα (βαρέθηκα να βάλω για δίσεκτα.....)

    Ο κώδικας είναι πολύ άκομψος και πιθανόν να γελάσουν οι γνώστες γιατί νομίζω ότι έκανα τα απλά δύσκολα...
    Έχω και τις 2 ώρες για όποιον θέλει να πειραματιστεί...
    Κώδικας:
    #include <DS1307RTC.h> //RTC
    #include <Time.h> //time
    #include <Wire.h> //for I2C 
    #include <LiquidCrystal_I2C.h> //i2c LCD
    #include <Timezone.h>    //https://github.com/JChristensen/Timezone
    
    
    #define I2C_ADDR    0x27
    #define En_pin  2
    #define Rw_pin  1
    #define Rs_pin  0
    #define D4_pin  4
    #define D5_pin  5
    #define D6_pin  6
    #define D7_pin  7
    
    //Greece time
    time_t local, utc;
    TimeChangeRule *tcr;
    TimeChangeRule myDST = {"EDT", Last, Sun, Mar, 2, +180};    //Daylight time = UTC + 3 hours
    TimeChangeRule mySTD = {"EST", Last, Sun, Oct, 2, +120};     //Standard time = UTC + 2 hours
    Timezone myTZ(myDST, mySTD);
    
    
    
    
    
    
    
    const int menubutton = 2; 
    const int upbutton = 3; 
    const int downbutton = 4;
    const int okbutton = 5;
    
    int minutes = 0;
    int hours = 0;
    int secs = 0;
    int days = 0;
    int months = 0;
    int years = 0;
    int weekdays = 0;
    int menuposition = 0;
    
    LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);  // Set the LCD I2C address
    int menubuttonstate = 0;
    int upbuttonstate = 0;
    int downbuttonstate = 0;
    int okbuttonstate = 0;
    
    
    
    
    void setup()
    
              {
              pinMode(menubutton, INPUT); 
              pinMode(upbutton, INPUT);
              pinMode(downbutton, INPUT);
              pinMode(okbutton, INPUT);
              
              setSyncProvider(RTC.get); //get RTC time
               lcd.begin(16,2);               // initialize the lcd 
               lcd.clear();
                
                
               }
    
    
    void loop()
              {
                lcd.backlight();               // turns backlight on
                utc = now();
              local = myTZ.toLocal(utc, &tcr);
                menubuttonstate = digitalRead(menubutton);
               
                if (menubuttonstate == HIGH) {menu();}   
                
               
              
              
                lcd.setCursor(0,0);                
                printDigits(hour(local));
                lcd.print(":");
                printDigits(minute(local));
                lcd.print(" ");
                printDigits(day(local));
                lcd.print("/");
                lcd.setCursor(10,0);
                lcd.print(year(local));
                lcd.print("GR");
                lcd.setCursor(9,0);
                printDigits(month(local));
                lcd.print("/");
               
                lcd.setCursor(0,1);                
                printDigits(hour(utc));
                lcd.print(":");
                printDigits(minute(utc));
                lcd.print(" ");
                printDigits(day(utc));
                lcd.print("/");
                lcd.setCursor(10,1);
                lcd.print(year(utc));
                lcd.print("UT");
                lcd.setCursor(9,1);
                printDigits(month(utc));
                lcd.print("/");
                
              
                
              } // loop end
              
    void printDigits(int digits){
                // utility function for digital clock display: prints preceding colon and leading 0
               if(digits < 10) lcd.print('0');
               lcd.print(digits);
               }  //printdigits end
    
    
    void menu(){
      
                delay (100);
                menubuttonstate = digitalRead(menubutton);
                
                while (menubuttonstate == LOW) {
                
                menubuttonstate = digitalRead(menubutton);
                upbuttonstate = digitalRead(upbutton);
                downbuttonstate = digitalRead(downbutton);
                okbuttonstate = digitalRead(okbutton);
                
                if (upbuttonstate == HIGH) {menuposition = menuposition + 1;}
                if (downbuttonstate == HIGH){menuposition = menuposition - 1;} 
                if (menuposition <0) {menuposition = 4;}
                if (menuposition > 4) {menuposition = 0;}
                
                delay (100);
               
                prt();
                okbuttonstate = digitalRead(okbutton);
                if (okbuttonstate == HIGH) {chng ();}
                }
                lcd.clear();
                } //menu() end
    
      void prt(){
                lcd.setCursor(0,0);
                lcd.clear();
              if (menuposition == 0) {lcd.print("Hours");}
              if (menuposition == 1) {lcd.print("Minutes");}
              if (menuposition == 2) {lcd.print("Year");}
              if (menuposition == 3) {lcd.print("Month");}
              if (menuposition == 4) {lcd.print("Day");}
             
               } //prt end
      
      void chng(){
      if (menuposition == 0) {
        delay(200);
        lcd.clear();
     okbuttonstate = digitalRead(okbutton);
     hours=hour(local);
        while (okbuttonstate == LOW) {
        
        menubuttonstate = digitalRead(menubutton);
        upbuttonstate = digitalRead(upbutton);
        downbuttonstate = digitalRead(downbutton);
        okbuttonstate = digitalRead(okbutton);
        
      lcd.setCursor(0,0);                
      printDigits(hour(local));
      lcd.print(":");
      printDigits(minute(local));
      lcd.print(" ");
      printDigits(day(local));
      lcd.print("/");
      printDigits(month(local));
      lcd.print("/");
      lcd.print(year(local));
      
      lcd.setCursor(0,1);                
      printDigits(hour(utc));
      lcd.print(":");
      printDigits(minute(utc));
      lcd.print(" ");
      printDigits(day(utc));
      lcd.print("/");
      printDigits(month(utc));
      lcd.print("/");
      lcd.print(year(utc));
      
      
        if (upbuttonstate == HIGH) {
        hours = hour(local)+ 1;
        setTime(now()+ 3600);
     }
        if (downbuttonstate == HIGH) {
        hours = hour(local)- 1;
        setTime(now()- 3600); //set arduino time}
     }
        delay (100); 
        
        RTC.set(now());
        utc = now();
       local = myTZ.toLocal(utc, &tcr);
       } //while end
       
       } // if end
      
        if (menuposition == 1) {
     delay(200);
        lcd.clear();
     okbuttonstate = digitalRead(okbutton);
     hours=hour(local);
        while (okbuttonstate == LOW) {
        
        menubuttonstate = digitalRead(menubutton);
        upbuttonstate = digitalRead(upbutton);
        downbuttonstate = digitalRead(downbutton);
        okbuttonstate = digitalRead(okbutton);
        
       
          lcd.setCursor(0,0);                
      printDigits(hour(local));
      lcd.print(":");
      printDigits(minute(local));
     
      lcd.setCursor(5,0);
       
      lcd.print(" ");
      printDigits(day(local));
      lcd.print("/");
      printDigits(month(local));
      lcd.print("/");
      lcd.print(year(local));
      
      lcd.setCursor(0,1);                
      printDigits(hour(utc));
      lcd.print(":");
      printDigits(minute(utc));
    
      lcd.setCursor(5,1);
      
      
      lcd.print(" ");
      printDigits(day(utc));
      lcd.print("/");
      printDigits(month(utc));
      lcd.print("/");
      lcd.print(year(utc));
      
      
        if (upbuttonstate == HIGH) {
        minutes = minute(local)+ 1;
    
       setTime(now()+ 60);
     }
        if (downbuttonstate == HIGH) {
        minutes = minute(local)- 1;
    
        setTime(now()- 60); //set arduino time}
      }
    
        delay (10); 
        
        RTC.set(now());
        utc = now();
       local = myTZ.toLocal(utc, &tcr);
        
        } //while end
        
        } // if end
      
        if (menuposition == 2) {
          delay(200);
        lcd.clear();
     okbuttonstate = digitalRead(okbutton);
     hours=hour(local);
        while (okbuttonstate == LOW) {
        
        menubuttonstate = digitalRead(menubutton);
        upbuttonstate = digitalRead(upbutton);
        downbuttonstate = digitalRead(downbutton);
        okbuttonstate = digitalRead(okbutton);
        
     
          lcd.setCursor(0,0);                
      printDigits(hour(local));
      lcd.print(":");
      printDigits(minute(local));
    
      lcd.setCursor(5,0);
    
      
      lcd.print(" ");
      printDigits(day(local));
      lcd.print("/");
      printDigits(month(local));
      lcd.print("/");
      lcd.print(year(local));
      
      lcd.setCursor(0,1);                
      printDigits(hour(utc));
      lcd.print(":");
      printDigits(minute(utc));
    
      lcd.setCursor(5,1);
      
      
      lcd.print(" ");
      printDigits(day(utc));
      lcd.print("/");
      printDigits(month(utc));
      lcd.print("/");
      lcd.print(year(utc));
      
      
        if (upbuttonstate == HIGH) {
        years = year(local)+ 1;
    setTime(hour(utc),minute(utc),second(utc),day(utc),month(utc),(year(utc)+1));
       
     }
        if (downbuttonstate == HIGH) {
        years = year(local)- 1;
    setTime(hour(utc),minute(utc),second(utc),day(utc),month(utc),(year(utc)-1));
      }
        
        delay (100); 
        
        RTC.set(now());
        utc = now();
       local = myTZ.toLocal(utc, &tcr);
        
        } //while end
        
        } // if end
      
        if (menuposition == 3) {
           delay(200);
        lcd.clear();
     okbuttonstate = digitalRead(okbutton);
     hours=hour(local);
        while (okbuttonstate == LOW) {
        
        menubuttonstate = digitalRead(menubutton);
        upbuttonstate = digitalRead(upbutton);
        downbuttonstate = digitalRead(downbutton);
        okbuttonstate = digitalRead(okbutton);
        
           lcd.setCursor(0,0);                
      printDigits(hour(local));
      lcd.print(":");
      printDigits(minute(local));
     
      lcd.setCursor(5,0);
      
      
      lcd.print(" ");
      printDigits(day(local));
      lcd.print("/");
      printDigits(month(local));
      lcd.print("/");
      lcd.print(year(local));
      
      lcd.setCursor(0,1);                
      printDigits(hour(utc));
      lcd.print(":");
      printDigits(minute(utc));
    
      lcd.setCursor(5,1);
      
      
      lcd.print(" ");
      printDigits(day(utc));
      lcd.print("/");
      printDigits(month(utc));
      lcd.print("/");
      lcd.print(year(utc));
      
      
        if (upbuttonstate == HIGH) {
        months = month(local)+ 1;
        
       if ((day(utc)== 31 ) && ((month(utc)+1)== 4 ||(month(utc)+1)== 6||(month(utc)+1)== 9 ||(month(utc)+1)== 11 )){
       setTime(hour(utc),minute(utc),second(utc),(day(utc)-1),(month(utc)+1),year(utc));}
       else if ((day(utc)== 31 ||day(utc)== 30 ||day(utc)== 29) && ((month(utc)+1)== 2)) {
       setTime(hour(utc),minute(utc),second(utc),28,(month(utc)+1),year(utc));}
       else if (month(utc)+1>12) {
       setTime(hour(utc),minute(utc),second(utc),day(utc),1,(year(utc)+1));}
      else { 
        setTime(hour(utc),minute(utc),second(utc),day(utc),(month(utc)+1),year(utc));}
     }
        if (downbuttonstate == HIGH) {
        months = month(local)- 1;
        
       if ((day(utc)== 31 ) && ((month(utc)-1)== 4 ||(month(utc)-1)== 6||(month(utc)-1)== 9 ||(month(utc)-1)== 11 )){
       setTime(hour(utc),minute(utc),second(utc),(day(utc)-1),(month(utc)-1),year(utc));}
       else if ((day(utc)== 31 ||day(utc)== 30 ||day(utc)== 29) && ((month(utc)-1)== 2)) {
       setTime(hour(utc),minute(utc),second(utc),28,(month(utc)-1),year(utc));}
       else if (month(utc)-1<1) {
       setTime(hour(utc),minute(utc),second(utc),day(utc),12,(year(utc)-1));}
    else { 
    setTime(hour(utc),minute(utc),second(utc),day(utc),(month(utc)-1),year(utc));}  
    }
        
        delay (100); 
        
        RTC.set(now());
        utc = now();
       local = myTZ.toLocal(utc, &tcr);
        
        } //while end
        
        } // if end
      
        if (menuposition == 4) {
          delay(200);
        lcd.clear();
     okbuttonstate = digitalRead(okbutton);
     hours=hour(local);
        while (okbuttonstate == LOW) {
        
        menubuttonstate = digitalRead(menubutton);
        upbuttonstate = digitalRead(upbutton);
        downbuttonstate = digitalRead(downbutton);
        okbuttonstate = digitalRead(okbutton);
        
       
          lcd.setCursor(0,0);                
      printDigits(hour(local));
      lcd.print(":");
      printDigits(minute(local));
     
      lcd.setCursor(5,0);
       
      lcd.print(" ");
      printDigits(day(local));
      lcd.print("/");
      printDigits(month(local));
      lcd.print("/");
      lcd.print(year(local));
      
      lcd.setCursor(0,1);                
      printDigits(hour(utc));
      lcd.print(":");
      printDigits(minute(utc));
    
      lcd.setCursor(5,1);
      
      
      lcd.print(" ");
      printDigits(day(utc));
      lcd.print("/");
      printDigits(month(utc));
      lcd.print("/");
      lcd.print(year(utc));
      
      
        if (upbuttonstate == HIGH) {
        days = day(local)+ 1;
    
       setTime(now()+ 86400);
     }
        if (downbuttonstate == HIGH) {
        days = day(local)- 1;
    
        setTime(now()- 86400); //set arduino time}
      }
       
        delay (100); 
        
        RTC.set(now());
        utc = now();
       local = myTZ.toLocal(utc, &tcr);
        
        } //while end
        
        } // if end
      
      
        
      
      
      } //chng end

    2 Not allowed! Not allowed!

  9. 2 μέλη ευχαρίστησαν τον cosecon για αυτό το χρήσιμο μήνυμα:

    αλπινιστης (05-12-14), manolena (05-12-14)

  10. #7
    Μέλος Το avatar του χρήστη apollonic
    Όνομα
    Μάκης
    Εγγραφή
    Jul 2010
    Περιοχή
    Θεσσαλονίκη
    Μηνύματα
    136

    Προεπιλογή

    για τα μπουτον, αντι να αφιερωνεις μια εισοδο για καθένα, μπορείς να κάνεις δικτύωμα με αντιστάσεις και να βάλεις καμια 50ρια σε μια είσοδο

    0 Not allowed! Not allowed!
    opacun.blogspot.gr
    campus philosophicus technologicus ecologicus

Παρόμοια Θέματα

  1. 3G ΚΑΜΕΡΑ ΠΑΡΑΚΟΛΟΥΘΗΣΕΙΣ ΣΤΟ ΕΞΩΧΙΚΟ
    By takhs764 in forum Συστήματα Ασφαλείας
    Απαντήσεις: 21
    Τελευταίο Μήνυμα: 13-05-17, 20:32
  2. φορτιστής κιν τηλεφώνων αξιας 1ε
    By Spark in forum Παρουσίαση Πρόχειρων Κατασκευών
    Απαντήσεις: 8
    Τελευταίο Μήνυμα: 01-04-16, 15:44
  3. Άλλο ένα TDA7294
    By thebadtall in forum Παρουσίαση Ολοκληρωμένων Κατασκευών
    Απαντήσεις: 6
    Τελευταίο Μήνυμα: 03-12-13, 08:47
  4. Ερώτηση για ρολόι-Arduino
    By xl_31 in forum Μικροελεγκτές
    Απαντήσεις: 7
    Τελευταίο Μήνυμα: 23-08-11, 20:15

Δικαιώματα - Επιλογές

  • Δημιουργία θεμάτων: Όχι
  • Υποβολή μηνυμάτων: Όχι
  • Σύναψη αρχείων: Όχι
  • Επεξεργασία μηνυμάτων: Όχι
  •  
  • BB code: σε λειτουργία
  • Smilies: σε λειτουργία
  • [IMG]: σε λειτουργία
  • [VIDEO] code is σε λειτουργία
  • HTML: εκτός λειτουργίας