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...
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
Post a Comment