Pages: [1]   Go Down
Author Topic: add hours and days on timecounter  (Read 685 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 25
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

I am running this code copied from here http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1227406778/all
Thiw code just count time since reset
I need to insert button for changing hours  on counter.
Fow example if time is 3 hours and 32 min ,by pressing the button 2 times the new time will be 5 hours and 32 min.
I was tring to find command of change  DateTime.Hour and DateTime.Day   (etc DateTime.Hour++) but nothing happend
Anyone knows those commands (-- and ++) please help

Code:
#include <DateTime.h>
#include <LiquidCrystal.h>

int resetPin = 3; // pin 3 resets the time

//create object to control an LCD GMD1602K.
LiquidCrystal lcd(12, 11, 2, 7, 8, 9, 10);

void setup(){
 digitalWrite(resetPin,HIGH);  // this line enables pull-up
 pinMode(13,OUTPUT);          // we flash the LED each second
 pinMode(resetPin, INPUT);    // a button on this pin resets the time
 DateTime.sync( 0 );             // set time to zero
}

void loop(){
 if(digitalRead(resetPin) == LOW)
     DateTime.sync( 0 );      // reset time to zero if button pressed


 /* --------- Prints time in hours, minutes and seconds ----------- */
 DateTime.available(); // needed to refresh the clock time
 time_t timeNow = DateTime.now();
 lcd.setCursor(0,0);
 lcd.print(timeNow/60);        // total elapsed minutes
 lcd.setCursor(0,8);
 lcd.print(timeNow/3600);    //  total elapsed seconds

 lcd.setCursor(0,0);
 lcd.print("Hour:min");
 lcd.setCursor(10,0);
 lcd.print(DateTime.Hour,DEC);      // prints total hours (up to 24)
 lcd.print(":");
 lcd.print(DateTime.Minute,DEC);   // and minutes since reset
 lcd.setCursor(0,1);
 lcd.print("Sec");
 lcd.setCursor(10,1);
 lcd.print(DateTime.Second,DEC);  // and seconds since reset
 lcd.print(" ");                               // clears second digit every minute
 
 digitalWrite(13, LOW);                  //light the LED every second
 delay (1000);
 digitalWrite(13, HIGH);                 //
}
Logged

Seattle, WA USA
Online Online
Brattain Member
*****
Karma: 547
Posts: 45996
Seattle, WA USA
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

It isn't clear what you are trying to. On every pass through loop, you call the DateTime.now() function, which obtains the current time, again. Incrementing the Hour and Minute variables, and then resetting them nanoseconds later does not seem useful.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 25
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

No I dont want to reset them
pin for increase Hour and Minute variables will be in other pins  (not in pin 3 (reset pin) )

I want to add a code like this
void loop(){
 if(digitalRead(increaseHourPin) == LOW)
     hour++;      // increase hour by one (this is the command i dont know)
 
 if(digitalRead(increaseMinPin) == LOW)
   minute ++ ;      // increase min by one (this is the command i dont know)
« Last Edit: April 06, 2011, 06:16:55 am by dalai » Logged

Seattle, WA USA
Online Online
Brattain Member
*****
Karma: 547
Posts: 45996
Seattle, WA USA
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Code:
     hour++;      // increase hour by one (this is the command i dont know)
That command is correct, assuming you do something like this, first:

Code:
int hour = DateTime.Hour;

You can not, the way the code you posted initially is structured, increment DateTime.Hour, because DateTime.Hour is set back to the current time on every pass through loop.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 25
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

so I am back in the beginning... smiley-sad
Logged

Seattle, WA USA
Online Online
Brattain Member
*****
Karma: 547
Posts: 45996
Seattle, WA USA
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

When you are stuck at the beginning, the thing to do is to define what you want to do, with no thought as to how you would do it (whatever it is). So, what is it you want to do?
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 25
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

My project is an egg hatcher.Its a project that involves  all basic electronics (sensors ,timers, moters, buttons etc) so i thote that is a good start for learning.
Until now my code ,reads temperature and huminity.Then makes a desition for opening airflow  heaters boilers etc.
The method is that 2 temperature sensors reads temp and by the method of wet bumb i get huminity.

My next step is to insert time in project. The reason is that chickens  egg  need to be at 37 C / 80 humidity  for 18 days  and then  for the last 3 days needs 36 C/ 90 humidity and no moving .
There is some problems in that idea. First I think that I want to avoid external timer.I want by a button choice ,a timer of days start up.
In that point by an internal timer I think that I solved that problem. But if power lost ,program will start from day 1.
So I want by a press of button to correct time counter (1 button for hours , one for days)

Later I will try to backup time elapsed to eeprom every 1 hour but for now I need to be able to correct time counter ....

A litle dificult for newbie ,but I needed motivation smiley

Here is the code I copied/write  until now

Code:
// include the library code:
#include <LiquidCrystal.h>

// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);


int pin0 = 0; // analog pin 0
int pin1 = 1; // analog pin 1
int heater = 13;
int cooler = 10;
float tempF = 0,tempC=0,wetF=0,wetC=0,etemp=0,ewet=0,eall=0,humidity=0 ; // temperature variables
float samples[8]; // variables to make a better precision (dry sensor)
float wetsamples[8]; // variables to make a better precision (wet sensor)
int i;

void setup()
{
  Serial.begin(9600); // start serial communication
  lcd.begin(16, 4);  // set up the LCD's number of columns and rows
  pinMode(cooler, OUTPUT);
  pinMode(heater, OUTPUT);
}

void loop()
{
 
 
for(i = 0;i<=7;i++){ // gets 8 samples of temperature
 
  samples[i] = ( 5.0 * analogRead(pin0) * 100.0) / 1024.0;
  wetsamples[i] = ( 5.0 * analogRead(pin1) * 100.0) / 1024.0;
  tempF = tempF + samples[i];
  wetF = wetF + wetsamples[i];
  delay(100);

}

tempF = tempF/8.0; // better precision
wetF = wetF/8.0;

tempC = (tempF - 32.0)/ 1.8 ; // converts to celsius
wetC = (wetF - 32)/ 1.8 ; //converts to celsius

//follows up code to calculate humidity from 2 temp sensor and wet bumb method. Air presure preset to 1013 .
etemp=(17.67*tempC)/(tempC+243.50) ; //
etemp=exp(etemp); //log
etemp=6.112*etemp;
ewet=(17.67*wetC)/(wetC+243.50) ; //
ewet=exp(ewet); //log
ewet=6.112 * ewet ;
eall= ewet - ((1013.25*(tempC-wetC)) * (0.00066*(1+(0.00115*wetC))));
humidity=(eall/etemp)*100; //humidity



// cooling and heating examples
if (tempC <= 37.6) {digitalWrite(heater, HIGH);}
else {digitalWrite(heater,LOW);}
if (tempC>= 38.2 ){digitalWrite(cooler,HIGH);  }
else {digitalWrite(cooler,LOW);}




//data on LCD or serial

Serial.print(tempC);
Serial.print(" Celsius, ");
lcd.setCursor(0, 0);
lcd.print(" Celsius, ");
lcd.print(tempC);

Serial.print(wetC);
Serial.print(" wetC -> ");
lcd.setCursor(0, 1);
lcd.print(" wetC -> ");
lcd.print(wetC);

Serial.print(humidity);
Serial.print(" humidity -> ");
lcd.setCursor(0, 3);
lcd.print(" humidity -> ");
lcd.print(humidity);

tempF = 0; //reset variables
wetF=0;


}
« Last Edit: April 06, 2011, 02:25:35 pm by dalai » Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 25
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Is it possible to see how datetime.h is made so I can manipulate it ?
Logged

Pages: [1]   Go Up
Jump to: