Code part three (last part):
if (key == 3) //Button corresponding to weeks is pressed, display last weeks usage and rating. Works the same as for minutes
{
if(weekhaspassed)
{
sprintf(value, "%u", daysvalue/1000);
b=strlen(value);
for (int i=0; i<b; i++)
result[i]=value[i];
if(daysvalue<1000000)
{
result[b]=',';
result[b+1]=((daysvalue%1000)/100)+48; //Get first decimal
}
if(daysvalue<100000)
result[b+2]=((daysvalue%100)/10)+48; //Get second decimal
if(daysvalue<10000)
result[b+3]=(daysvalue%10)+48; //Get third decimal
}
else
{
sprintf(value, "%d", sensortickcounter/1000); //Convert powerusage to string
b=strlen(value);
for(int i=0; i<b; i++)
result[i]=value[i];
if(sensortickcounter<1000000)
{
result[b]=',';
result[b+1]=((sensortickcounter%1000)/100)+48; //Get first decimal
}
if(sensortickcounter<100000)
result[b+2]=((sensortickcounter%100)/10)+48; //Get second decimal
if(sensortickcounter<10000)
result[b+3]=(sensortickcounter%10)+48; //Get third decimal
}
result[5]='k';
result[6]='W';
result[7]='h';
// result[b+8]=48+clockweek; //Only for testing
if(weekhaspassed)
sprintf(powervalue, "%u", (daysvalue/(24*7))); //More than week hour since the start has passed so daysvalue is ok
else
{
sprintf(powervalue, "%u", ((daysvalue*60)/(clockday*24*60+clockhour*60+clockmin+1))); //Less than on week has passed so daysvalue is too small
result[14-strlen(powervalue)]='c';
}
a=strlen(powervalue);
for (int i=1; i<=a; i++)
result[15-i]=powervalue[a-i];
result[15]='W';
lcd.cursorTo(1, 0);
lcd.printIn(msgs[3]);
lcd.cursorTo(2, 0);
lcd.printIn(result);
}
if (key == 4) //Button corresponding to four weeks is pressed, display last four weeks usage and rating. Works the same as for minutes
{
if(weekshaspassed)
{
sprintf(value, "%u", weeksvalue/1000);
b=strlen(value);
for (int i=0; i<b; i++)
result[i]=value[i];
if(weeksvalue<1000000)
{
result[b]=',';
result[b+1]=((weeksvalue%1000)/100)+48; //Get first decimal
}
if(weeksvalue<100000)
result[b+2]=((weeksvalue%100)/10)+48; //Get second decimal
if(weeksvalue<10000)
result[b+3]=(weeksvalue%10)+48; //Get third decimal
}
else
{
sprintf(value, "%d", sensortickcounter/1000); //Convert powerusage to string
b=strlen(value);
for(int i=0; i<b; i++)
result[i]=value[i];
if(sensortickcounter<1000000)
{
result[b]=',';
result[b+1]=((sensortickcounter%1000)/100)+48; //Get first decimal
}
if(sensortickcounter<100000)
result[b+2]=((sensortickcounter%100)/10)+48; //Get second decimal
if(sensortickcounter<10000)
result[b+3]=(sensortickcounter%10)+48; //Get third decimal
}
result[5]='k';
result[6]='W';
result[7]='h';
if(weekshaspassed)
sprintf(powervalue, "%u", (weeksvalue/(24*7*4))); //More than four weeks since the start has passed so weeksvalue is ok
else
{
sprintf(powervalue, "%u", ((weeksvalue*60)/(clockweek*7*24*60+clockday*24*60+clockhour*60+clockmin+1))); //Less than four weeks has passed so weeksvalue is too small
result[14-strlen(powervalue)]='c';
}
a=strlen(powervalue);
for (int i=1; i<=a; i++)
result[15-i]=powervalue[a-i];
result[15]='W';
lcd.cursorTo(1, 0);
lcd.printIn(msgs[4]);
lcd.cursorTo(2, 0);
lcd.printIn(result);
}
timingflag= !timingflag; //Change flag for next run in the loop
}
int get_key(unsigned int input) //Converting input reading to corresponding button number (1-5), return -1 if no button pressed
{
int k;
for (k=0; k<NUM_KEYS; k++)
{
if (input < adc_key_val[k])
return(k);
}
if (k >= NUM_KEYS)
k=-1; // No key pressed or an error occurred
return(k);
}
void updateclock() //Updating clock 0:0:0:0:0 -> 0:0:0:0:1 and so on
{
timecounterthen=timecounternow; //Reset time counter
if (clocksec>=5) //if more than 50 (seconds are only stored as 0-5) seconds have passed seconds are set to 0
{
clocksec=0;
minutehaspassed=true; //One minute has passed since the start so set flag true
if( clockmin>=59) //if more than 59 minutes have passed minutes are set to 0
{
clockmin=0;
hourhaspassed=true; // One hour has passed since the start so set flag true
if(clockhour>=23) //if more than 23 hours have passed hours are set to 0
{
clockhour=0;
dayhaspassed=true; // One day has passed since the start so set flag true
if (clockday>=6) //if more than 6 days have passed days are set to 0
{
clockday=0;
weekhaspassed=true; // One week has passed since the start so set flag true
if(clockweek>=3) //if more than 3 veeks have passed weeks are set to 0
{
clockweek=0;
weekshaspassed=true; // Four week has passed since the start so set flag true
}
else clockweek=clockweek+1; //Less than 4 weeks have passed so update weeks by one
}
else
{
clockday=clockday+1; //Less than 7 days have passed so update days by one
}
}
else
{
clockhour=clockhour+1; //Less than 24 hours have passed so update hours by one
}
}
else
{
clockmin=clockmin+1; //Less than 60 minutes have passed so update minutes by one
}
}
else
{
clocksec=clocksec+1; //Less than 60 days have passed so update seconds by ten
}
}
void sensortick() //The interrupt routine
{
powercounternow=micros(); //At what time did we se the pulse?
//Serial.println(powercounternow-powercounterlasttime);
sensortickcounter=sensortickcounter+1; //Update number of pulses seen
powerrating=3600000000/(powercounternow-powercounterlasttime); //Calculate length of pulse and update current powerrating
powercounterlasttime=powercounternow; //Last time we saw a pulse was now
sensorstate = LOW;
}