Help changing time on RTC1307 with buttons


i have had trouble finding changing time on rtc few buttons (set, hour, min). making large scale clock arduino mega 2560.  i have set except being able change time on clock without having reconnect computer.  i working on calling each minute, have been trying figure out time change issue.


code: [select]

#include <wire.h>
#include "rtclib.h"
#include <charlieplex.h>

#define number_of_pins 10


byte pins[] = {2,3,4,5,6,7,8,9,10,11};
charlieplex charlieplex = charlieplex(pins,number_of_pins);
charliepin led1 = { 0 , 9 };  //hour 1 (led1 indicated current flow 1 10)
charliepin led2 = { 1 , 9 };  //hour 2
charliepin led3 = { 2 , 9 };  //hour 3
charliepin led4 = { 3 , 9 };  //hour 4
charliepin led5 = { 4 , 9 };  //hour 5
charliepin led6 = { 5 , 9 };  //hour 6
charliepin led7 = { 6 , 9 };  //hour 7
charliepin led8 = { 7 , 9 };  //hour 8
charliepin led9 = { 8 , 9 };  //hour 9
charliepin led10 = { 9 , 8 }; //hour 10
charliepin led11 = { 0 , 8 }; //hour 11
charliepin led12 = { 1 , 8 }; //hour 12
//1mins
charliepin led13 = { 2 , 8 }; //min 1
charliepin led14 = { 3 , 8 }; //min 2
charliepin led15 = { 4 , 8 }; //min 3
charliepin led16 = { 5 , 8 }; //min 4
charliepin led17 = { 6 , 8 }; //min 5
charliepin led18 = { 7 , 8 }; //min 6
charliepin led19 = { 8 , 7 }; //min 7
charliepin led20 = { 9 , 7 }; //min 8
charliepin led21 = { 0 , 7 }; //min 9
//10mins
charliepin led22 = { 1 , 7 }; //min 10
charliepin led23 = { 2 , 7 }; //min 11
charliepin led24 = { 3 , 7 }; //min 12
charliepin led25 = { 4 , 7 }; //min 13
charliepin led26 = { 5 , 7 }; //min 14
charliepin led27 = { 6 , 7 }; //min 15
charliepin led28 = { 7 , 6 }; //min 16
charliepin led29 = { 8 , 6 }; //min 17
charliepin led30 = { 9 , 6 }; //min 18
charliepin led31 = { 0 , 6 }; //min 19
//20mins
charliepin led32 = { 1 , 6 }; //min 20
charliepin led33 = { 2 , 6 }; //min 21
charliepin led34 = { 3 , 6 }; //min 22
charliepin led35 = { 4 , 6 }; //min 23
charliepin led36 = { 5 , 6 }; //min 24
charliepin led37 = { 6 , 5 }; //min 25
charliepin led38 = { 7 , 5 }; //min 26
charliepin led39 = { 8 , 5 }; //min 27
charliepin led40 = { 9 , 5 }; //min 28
charliepin led41 = { 0 , 5 }; //min 29
//30mins
charliepin led42 = { 1 , 5 }; //min 30
charliepin led43 = { 2 , 5 }; //min 31
charliepin led44 = { 3 , 5 }; //min 32
charliepin led45 = { 4 , 5 }; //min 33
charliepin led46 = { 5 , 4 }; //min 34
charliepin led47 = { 6 , 4 }; //min 35
charliepin led48 = { 7 , 4 }; //min 36
charliepin led49 = { 8 , 4 }; //min 37
charliepin led50 = { 9 , 4 }; //min 38
charliepin led51 = { 0 , 4 }; //min 39
//40mins
charliepin led52 = { 1 , 4 }; //min 40
charliepin led53 = { 2 , 4 }; //min 41
charliepin led54 = { 3 , 4 }; //min 42
charliepin led55 = { 4 , 3 }; //min 43
charliepin led56 = { 5 , 3 }; //min 44
charliepin led57 = { 6 , 3 }; //min 45
charliepin led58 = { 7 , 3 }; //min 46
charliepin led59 = { 8 , 3 }; //min 47
charliepin led60 = { 9 , 3 }; //min 48
charliepin led61 = { 0 , 3 }; //min 49
//50mins
charliepin led62 = { 1 , 3 }; //min 50
charliepin led63 = { 2 , 3 }; //min 51
charliepin led64 = { 3 , 2 }; //min 52
charliepin led65 = { 4 , 2 }; //min 53
charliepin led66 = { 5 , 2 }; //min 54
charliepin led67 = { 6 , 2 }; //min 55
charliepin led68 = { 7 , 2 }; //min 56
charliepin led69 = { 8 , 2 }; //min 57
charliepin led70 = { 9 , 2 }; //min 58
charliepin led71 = { 0 , 2 }; //min 59
//00mins
charliepin led72 = { 1 , 2 }; //min 00

rtc_ds1307 rtc;

boolean singleon = true;

void setup () {
   serial.begin(57600);
   wire.begin();
   rtc.begin();
   // following line sets rtc date & time sketch compiled
   //rtc.adjust(datetime(__date__, __time__));
   if (! rtc.isrunning()) {
   serial.println("rtc not running!");
 }

}

void loop () {
   datetime = rtc.now();
   serial.print(now.year(), dec);
   serial.print('/');
   serial.print(now.month(), dec);
   serial.print('/');
   serial.print(now.day(), dec);
   serial.print(' ');
   serial.print(now.hour(), dec);
   serial.print(':');
   serial.print(now.minute(), dec);
   serial.print(':');
   serial.print(now.second(), dec);
   serial.println();


 
 if (singleon){ charlieplex.clear(); }


    if (now.minute() == 0) {
      charlieplex.charliewrite(led1,high);
      delay(50);charlieplex.clear();
      charlieplex.charliewrite(led2,high);
      delay(50);charlieplex.clear();
      charlieplex.charliewrite(led3,high);
      delay(50);charlieplex.clear();
      charlieplex.charliewrite(led4,high);
      delay(50);charlieplex.clear();
      charlieplex.charliewrite(led5,high);
      delay(50);charlieplex.clear();
      charlieplex.charliewrite(led6,high);
      delay(50);charlieplex.clear();
      charlieplex.charliewrite(led7,high);
      delay(50);charlieplex.clear();
      charlieplex.charliewrite(led8,high);
      delay(50);charlieplex.clear();
      charlieplex.charliewrite(led9,high);
      delay(50);charlieplex.clear();
      charlieplex.charliewrite(led10,high);
      delay(50);charlieplex.clear();
      charlieplex.charliewrite(led11,high);
      delay(50);charlieplex.clear();
      charlieplex.charliewrite(led12,high);
      delay(50);charlieplex.clear();
      charlieplex.charliewrite(led1,high);
      delay(50);charlieplex.clear();
      charlieplex.charliewrite(led2,high);
      delay(50);charlieplex.clear();
      charlieplex.charliewrite(led3,high);
      delay(50);charlieplex.clear();
      charlieplex.charliewrite(led4,high);
      delay(50);charlieplex.clear();
      charlieplex.charliewrite(led5,high);
      delay(50);charlieplex.clear();
      charlieplex.charliewrite(led6,high);
      delay(50);charlieplex.clear();
      charlieplex.charliewrite(led7,high);
      delay(50);charlieplex.clear();
      charlieplex.charliewrite(led8,high);
      delay(50);charlieplex.clear();
      charlieplex.charliewrite(led9,high);
      delay(50);charlieplex.clear();
      charlieplex.charliewrite(led10,high);
      delay(50);charlieplex.clear();
      charlieplex.charliewrite(led11,high);
      delay(50);charlieplex.clear();
      charlieplex.charliewrite(led12,high);
      delay(50);charlieplex.clear();
      }
     
    if (now.hour() == 1) {
      charlieplex.charliewrite(led1,high);
      serial.println("led1");
    }
    if (now.hour() == 2) {
      charlieplex.charliewrite(led2,high);
      serial.println("led2");
    }
    if (now.hour() == 3) {
      charlieplex.charliewrite(led3,high);
      serial.println("led3");
    }
    if (now.hour() == 4) {
      charlieplex.charliewrite(led4,high);
      serial.println("led4");
    }
    if (now.hour() == 5) {
      charlieplex.charliewrite(led5,high);
      serial.println("led5");
    }
    if (now.hour() == 6) {
      charlieplex.charliewrite(led6,high);
      serial.println("led6");
    }
    if (now.hour() == 7) {
      charlieplex.charliewrite(led7,high);
      serial.println("led7");
    }
    if (now.hour() == 8) {
      charlieplex.charliewrite(led8,high);
      serial.println("led8");
    }
    if (now.hour() == 9) {
      charlieplex.charliewrite(led9,high);
      serial.println("led9");
    }
    if (now.hour() == 10) {
      charlieplex.charliewrite(led10,high);
      serial.println("led10");
    }
    if (now.hour() == 11) {
      charlieplex.charliewrite(led11,high);
      serial.println("led11");
    }
    if (now.hour() == 12) {
      charlieplex.charliewrite(led12,high);
      serial.println("led12");
    }
//24 hour clock                              
    if (now.hour() == 13) {
      charlieplex.charliewrite(led1,high);
      serial.println("led1");
    }
    if (now.hour() == 14) {
      charlieplex.charliewrite(led2,high);
      serial.println("led2");
    }
    if (now.hour() == 15) {
      charlieplex.charliewrite(led3,high);
      serial.println("led3");
    }
    if (now.hour() == 16) {
      charlieplex.charliewrite(led4,high);
      serial.println("led4");
    }
    if (now.hour() == 17) {
      charlieplex.charliewrite(led5,high);
      serial.println("led5");
    }
    if (now.hour() == 18) {
      charlieplex.charliewrite(led6,high);
      serial.println("led6");
    }
    if (now.hour() == 19) {
      charlieplex.charliewrite(led7,high);
      serial.println("led7");
    }
    if (now.hour() == 20) {
      charlieplex.charliewrite(led8,high);
      serial.println("led8");
    }
    if (now.hour() == 21) {
      charlieplex.charliewrite(led9,high);
      serial.println("led9");
    }
    if (now.hour() == 22) {
      charlieplex.charliewrite(led10,high);
      serial.println("led10");
    }
    if (now.hour() == 23) {
      charlieplex.charliewrite(led11,high);
      serial.println("led11");
    }
    if (now.hour() == 0) {
      charlieplex.charliewrite(led12,high);
      serial.println("led12");
    }  


 delay(1000);
 singleon=!singleon;

}

you can 1 button... , few states

check long button press - start timer when button pressed more  7 seconds

then press press press change hour... 7 seconds of inactivity change allow set minutes... press press press... 7 seconds without change... returns ignoring set cycle

something this, need put program.

just put pushbutton on pin3 , ground...

try on own first, notice led13 change rate set hours , minutes...

code: [select]

int pushbutton = 3;
unsigned long settime = 7000ul;
unsigned long timerstart;
int state = 0;
int buttonstate, lastbuttonstate;
unsigned long lastflash;

void setup()
{
 serial.begin(115200);
 pinmode(pushbutton, input_pullup);
  pinmode(13, output);
}

void loop()
{
 if (state == 0)
 {
   flash(1000);
   buttonstate = digitalread(pushbutton);
   if (buttonstate == low) //button pressed
   {
     if (lastbuttonstate == high) // button state changed
     {
       timerstart = millis();
     }
     else if (millis() - timerstart >= settime)//held settime
     {
       state = 1;
       timerstart = millis();
       serial.print(f("setting hour"));
     }
   }
   lastbuttonstate = buttonstate;
 }
 else if (state == 1)// set hour
 {
   flash(50);
   buttonstate = digitalread(pushbutton);
   if (buttonstate == low && lastbuttonstate == high)
   {
     timerstart = millis();
     //add 1 hour rtc here
     serial.print(f("one hour added!!!"));
   }
   lastbuttonstate = buttonstate;
   if (millis() - timerstart >= settime)
   {
     state = 2;// timed out
     timerstart = millis();
     serial.print(f("setting minute"));
   }
 }
 else if (state == 2)// set minute
 {
   flash(250);
   buttonstate = digitalread(pushbutton);
   if (buttonstate == low && lastbuttonstate == high)//only on button change
   {
     timerstart = millis();
     //add 1 minute rtc here
     serial.print(f("one minute added!!!"));
   }
   lastbuttonstate = buttonstate;
   if (millis() - timerstart >= settime)
   {
     state = 0;// timed out
     timerstart = millis();
     serial.print(f("completed setting time"));
   }
 }
 //
 //your clock loop() function goes here
 //
}

void flash(unsigned long rate)
{
 if (millis() - lastflash > rate)
 {
   digitalwrite(13, !digitalread(13));
   lastflash = millis();
 }  
}


Arduino Forum > Using Arduino > Programming Questions > Help changing time on RTC1307 with buttons


arduino

Comments

Popular posts from this blog

Connecting Raspberry Pi 2 to P10(1R)-V706 LED Dot Matrix - Raspberry Pi Forums

TypeError: <unknown> is not a numpy array - Raspberry Pi Forums

datso and removing imagetitle - Joomla! Forum - community, help and support