Go Down

### Topic: question on saving times (Read 1 time)previous topic - next topic

#### kau_cinta_ku

##### Feb 16, 2011, 02:21 pm
when using the code below or a simular code when you set the time, is there a way to store what time you just set it at as an interger so that you can use that time later in the program? if so how? I am trying to make sort of a intermatic timer, so that a user can use the push buttons on the LCD to set 1,2,or 3 diffrent times and when one of those times = the main time it will then run a step motor.

any help will be great, thanks

#include <LiquidCrystal.h>
LiquidCrystal lcd(8,9,4,5,6,7);

#include "Wire.h"

int a=0;
byte secondminutehourdayOfWeekdayOfMonthmonthyear;

// define custom characters for up/down/left/right arrow
byte ua[8] = {  B00100,  B01110,  B11111,  B10101,  B00100,    B00100,  B00100,  B00100};
byte da[8] = {B00100,    B00100,  B00100,  B00100B10101,B11111,B01110,  B00100};
byte la[8] = {B00011B00110B01100B11111B11111B01100B00110B00011};
byte ra[8] = {B11000B01100B00110B11111B11111B00110B01100B11000 };

void setup()
{

lcd.begin(162);

Wire.begin();

lcd.createChar(0,ua);

lcd.createChar(1,da);

lcd.createChar(2,la);

lcd.createChar(3,ra);
}

// Convert normal decimal numbers to binary coded decimal
byte decToBcd(byte val)
{
return ( (
val/10*16) + (val%10) );
}

// Convert binary coded decimal to normal decimal numbers
byte bcdToDec(byte val)
{
return ( (
val/16*10) + (val%16) );
}

// returns the button number pressed, or zero for none pressed
{

int b,0;

c=analogRead(0); // get the analog value

if (c>1000)
{

b=0// buttons have not been pressed

else
if (
c>470 && c<485)
{

b=1// button 1 pressed

else
if (
c<135 && c>120)
{

b=2// button 2 pressed

else
if (
c>295 && c<315)
{

b=3// button 3 pressed

else
if (
c<10)
{

b=4// button 4 pressed

else
if (
c<730 && c>715)
{

b=5// button 5 pressed

}
return
b;
}

// Gets the date and time from the ds1307
void getDateDs1307(byte *second,
byte *minute,
byte *hour,
byte *dayOfWeek,
byte *dayOfMonth,
byte *month,
byte *year)
{

// Reset the register pointer

Wire.send(0);

Wire.endTransmission();

// A few of these need masks because certain bits are control bits

*
*
hour       bcdToDec(Wire.receive() & 0x3f);  // Need to change this if 12 hour am/pm

*
*
*
}

void setDateDs1307(byte second,        // 0-59
byte minute,        // 0-59
byte hour,          // 1-23
byte dayOfWeek,     // 1-7
byte dayOfMonth,    // 1-28/29/30/31
byte month,         // 1-12
byte year)          // 0-99
{

Wire.send(0);

Wire.send(decToBcd(second));    // 0 to bit 7 starts the clock

Wire.send(decToBcd(minute));

Wire.send(decToBcd(hour));

Wire.send(decToBcd(dayOfWeek));

Wire.send(decToBcd(dayOfMonth));

Wire.send(decToBcd(month));

Wire.send(decToBcd(year));

Wire.send(00010000); // sends 0x10 (hex) 00010000 (binary) to control register - turns on square wave

Wire.endTransmission();
}

void showTime()
{

getDateDs1307(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year);

lcd.clear(); // clear LCD screen

lcd.setCursor(0,0);

lcd.print("    ");

lcd.print(hourDEC);

lcd.print(":");
if (
minute<10)
{

lcd.print("0");
}

lcd.print(minuteDEC);

lcd.print(":");
if (
second<10)
{

lcd.print("0");
}

lcd.print(secondDEC);
}

void setTime()
{

int escape=0;

int h=0;

int m=0;
do
{

delay(100); // for debounce

if (escape==1)
{
--
m;
if (
m<0)
{

m=59;
}
} else
if (
escape==2)
{

h++;
if (
h>23)
{

h=0;
}
} else
if (
escape==3)
{
--
h;
if (
h<0)
{

h=23;
}
} else
if (
escape==4)
{

m++;
if (
m>59)
{

m=0;
}
}

lcd.clear();

lcd.setCursor(0,0);

lcd.write(0);

lcd.write(1);

lcd.print(":h ");

lcd.write(2);

lcd.write(3);

lcd.print(":m Sel=OK");

lcd.setCursor(5,1);
if (
h<10)
{

lcd.print("0");
}

lcd.print(h);

lcd.print(":");
if (
m<10)
{

lcd.print("0");
}

lcd.print(m);
} while (
escape<5);

setDateDs1307(0mhdayOfWeekdayOfMonthmonthyear);
}

void loop()
{

lcd.clear();

showTime();

if (
a==5// someone pressed 'select'

{

delay(200); // for debounce

setTime();
}

delay(75); // delay to stop LCD flicker
}

#### mmcp42

#1
##### Feb 16, 2011, 02:24 pm
crikey
try wrapping it in code markers, please. like this:

Code: [Select]
`#include <LiquidCrystal.h> LiquidCrystal lcd(8,9,4,5,6,7);#include "Wire.h"#define DS1307_I2C_ADDRESS 0x68int a=0;byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;// define custom characters for up/down/left/right arrowbyte ua[8] = {  B00100,  B01110,  B11111,  B10101,  B00100,    B00100,  B00100,  B00100};byte da[8] = {B00100,    B00100,  B00100,  B00100, B10101,B11111,B01110,  B00100};byte la[8] = {B00011, B00110, B01100, B11111, B11111, B01100, B00110, B00011};byte ra[8] = {B11000, B01100, B00110, B11111, B11111, B00110, B01100, B11000 };  void setup(){  lcd.begin(16, 2);  Wire.begin();  lcd.createChar(0,ua);  lcd.createChar(1,da);  lcd.createChar(2,la);  lcd.createChar(3,ra);}// Convert normal decimal numbers to binary coded decimalbyte decToBcd(byte val){  return ( (val/10*16) + (val%10) );}// Convert binary coded decimal to normal decimal numbersbyte bcdToDec(byte val){  return ( (val/16*10) + (val%16) );}int readButtons()// returns the button number pressed, or zero for none pressed{  int b,c = 0;  c=analogRead(0); // get the analog value  if (c>1000)  {    b=0; // buttons have not been pressed  }  else    if (c>470 && c<485)    {      b=1; // button 1 pressed    }    else      if (c<135 && c>120)      {        b=2; // button 2 pressed      }      else        if (c>295 && c<315)        {          b=3; // button 3 pressed        }        else          if (c<10)          {            b=4; // button 4 pressed          }          else            if (c<730 && c>715)            {              b=5; // button 5 pressed            }  return b;}// Gets the date and time from the ds1307void getDateDs1307(byte *second,byte *minute,byte *hour,byte *dayOfWeek,byte *dayOfMonth,byte *month,byte *year){  // Reset the register pointer  Wire.beginTransmission(DS1307_I2C_ADDRESS);  Wire.send(0);  Wire.endTransmission();  Wire.requestFrom(DS1307_I2C_ADDRESS, 7);  // A few of these need masks because certain bits are control bits  *second     = bcdToDec(Wire.receive() & 0x7f);  *minute     = bcdToDec(Wire.receive());  *hour       = bcdToDec(Wire.receive() & 0x3f);  // Need to change this if 12 hour am/pm  *dayOfWeek  = bcdToDec(Wire.receive());  *dayOfMonth = bcdToDec(Wire.receive());  *month      = bcdToDec(Wire.receive());  *year       = bcdToDec(Wire.receive());}void setDateDs1307(byte second,        // 0-59byte minute,        // 0-59byte hour,          // 1-23byte dayOfWeek,     // 1-7byte dayOfMonth,    // 1-28/29/30/31byte month,         // 1-12byte year)          // 0-99{  Wire.beginTransmission(DS1307_I2C_ADDRESS);  Wire.send(0);  Wire.send(decToBcd(second));    // 0 to bit 7 starts the clock  Wire.send(decToBcd(minute));  Wire.send(decToBcd(hour));      Wire.send(decToBcd(dayOfWeek));  Wire.send(decToBcd(dayOfMonth));  Wire.send(decToBcd(month));  Wire.send(decToBcd(year));  Wire.send(00010000); // sends 0x10 (hex) 00010000 (binary) to control register - turns on square wave  Wire.endTransmission();}void showTime(){  getDateDs1307(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year);  lcd.clear(); // clear LCD screen  lcd.setCursor(0,0);  lcd.print("    ");  lcd.print(hour, DEC);  lcd.print(":");  if (minute<10)  {    lcd.print("0");  }  lcd.print(minute, DEC);  lcd.print(":");  if (second<10)  {    lcd.print("0");  }  lcd.print(second, DEC);}void setTime(){  int escape=0;  int h=0;  int m=0;  do  {    escape=readButtons();    delay(100); // for debounce    if (escape==1)    {      --m;      if (m<0)      {        m=59;      }    } else    if (escape==2)    {      h++;      if (h>23)      {        h=0;      }    } else    if (escape==3)    {      --h;      if (h<0)      {        h=23;      }    } else    if (escape==4)    {      m++;      if (m>59)      {        m=0;      }    }    lcd.clear();    lcd.setCursor(0,0);    lcd.write(0);    lcd.write(1);    lcd.print(":h ");    lcd.write(2);    lcd.write(3);    lcd.print(":m Sel=OK");    lcd.setCursor(5,1);    if (h<10)    {      lcd.print("0");    }    lcd.print(h);    lcd.print(":");    if (m<10)    {      lcd.print("0");    }    lcd.print(m);  } while (escape<5);  setDateDs1307(0, m, h, dayOfWeek, dayOfMonth, month, year);}      void loop(){  lcd.clear();  showTime();  a=readButtons();  if (a==5) // someone pressed 'select'  {    delay(200); // for debounce    setTime();  }  delay(75); // delay to stop LCD flicker}`

now what was the question?
there are only 10 types of people
them that understands binary
and them that doesn't

#### robtillaart

#2
##### Feb 16, 2011, 02:27 pm

Have you checked the time library - http://www.arduino.cc/playground/Code/Time - it would make your project quite easy as you just have to know the offset inseconds of the three times you need. (if I understood the question correctly)

Rob Tillaart

Nederlandse sectie - http://arduino.cc/forum/index.php/board,77.0.html -
(Please do not PM for private consultancy)

#### kau_cinta_ku

#3
##### Feb 16, 2011, 02:35 pm
Ok sorry about that, still quite new to the site.

anyway, I am trying to make a type of intermatic timer, right now I have the arduino LCD keypad that I am using and the code above alows you to set the time using the buttons on the LCD. what I am wodering is how can I have a user enter the main time and have that saved. then have them also be able to set 1-3 more diffrent times that would alow you to save them and when the main time = a set time then a step motor runs.

kinda like this in a way:
if main time == feed time
run step motor
else if main time != feed time
do nothing

so I guess I am wondering is there a way to save the diffrent feed times as intergers like feed time 1, feed time 2, ect. or how would I be able to do this?

sorry for so long and prob. confusing

#### kau_cinta_ku

#4
##### Feb 16, 2011, 02:37 pm
I will check out that library also .

thanks

Go Up

Please enter a valid email to subscribe