...
speravo bastasse quanto postato 
#include "U8glib.h"
#include <DS1307.h>
#include <Wire.h>
#include <Keypad.h>
#include <OneWire.h>
int DS18B20_Pin = 2;
OneWire ds(DS18B20_Pin);
int rtc[7];
char ora[9] = "";
char giorno[3];
char anno[5];
char mese[4];
char charKeypadTemp;
String charKeypad = "";
String strOra = "";
int vecchiSec = 0;
int menu = 0;
float temperature;
String strTempCentr = "";
char chrTempCentr[21];
int secTempCentr = 0;
int pauseMenu = 0;
U8GLIB_ST7920_128X64_4X u8g(18, 16, 17); // SPI Com: SCK = en = 18, MOSI = rw = 16, CS = di = 17
const byte ROWS = 4; // QUATTRO RIGHE
const byte COLS = 4; // QUATTRO COLONNE
char keys[ROWS][COLS] = {
{
'1','2','3','A' }
,
{
'4','5','6','B' }
,
{
'7','8','9','C' }
,
{
'.','0','#','D' }
};
byte rowPins[ROWS] = {
38, 40, 42, 44}; // CONNESSIONE DELLE RIGHE DEL KEYPAD
byte colPins[COLS] = {
46, 48, 50, 52}; // CONNESSIONE DELLE COLONNE DEL KEYPAD
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
void setup(void){
RTC.get(rtc,true);
Serial.begin(19200);
if (rtc[6]<2014){
RTC.stop();
RTC.set(DS1307_SEC,0);
RTC.set(DS1307_MIN,40);
RTC.set(DS1307_HR,19);
RTC.set(DS1307_DOW,5);
RTC.set(DS1307_DATE,22);
RTC.set(DS1307_MTH,11);
RTC.set(DS1307_YR,14);
RTC.start();
}
RTC.SetOutput(DS1307_SQW32KHZ);
secTempCentr = rtc[0];
}
void FunMese(){
RTC.get(rtc, true);
switch (rtc[5]){
case 1:
sprintf(mese,"GEN","0");
break;
case 2:
sprintf(mese,"FEB","0");
break;
case 3:
sprintf(mese,"MAR","0");
break;
case 4:
sprintf(mese,"APR","0");
break;
case 5:
sprintf(mese,"MAG","0");
break;
case 6:
sprintf(mese,"GIU","0");
break;
case 7:
sprintf(mese,"LUG","0");
break;
case 8:
sprintf(mese,"AGO","0");
break;
case 9:
sprintf(mese,"SET","0");
break;
case 10:
sprintf(mese,"OTT","0");
break;
case 11:
sprintf(mese,"NOV","0");
break;
case 12:
sprintf(mese,"DIC","0");
break;
}
//Serial.println(mese);
//Serial.println(rtc[5]);
}
void Menu1(){
RTC.get(rtc,true);
sprintf(ora,"%02d:%02d:%02d",rtc[2],rtc[1],rtc[0], "0");
u8g.setFont(u8g_font_04b_03);
u8g.drawStr(2,6, ora);
u8g.drawLine(1,8,127,8);
}
void Home(void){
RTC.get(rtc,true);
sprintf(ora,"%02d:%02d:%02d",rtc[2],rtc[1],rtc[0], "0");
u8g.setFont(u8g_font_fub17);
u8g.drawStr(0,24, ora);
u8g.setFont(u8g_font_04b_03);
//u8g.setPrintPos(3, 35);
u8g.drawStr(3,42,"Temp. vasca: 25°C");
if (rtc[0] >= secTempCentr){
temperature = getTempCentr();
secTempCentr = rtc[0] + 5;
if (secTempCentr > 59){
secTempCentr = secTempCentr - 60;
}
}
strTempCentr = "Temp. plafo.: " + String(temperature) + "C";
strTempCentr.toCharArray(chrTempCentr, 21);
u8g.drawStr(3,51,chrTempCentr);
//u8g.setPrintPos(3, 59);
u8g.drawStr(3,60,"Temp. plafo.: 79°C");
vecchiSec = rtc[0] + 1;
if (vecchiSec == 60){
vecchiSec = 0;
}
u8g.setFont(u8g_font_helvB12);
sprintf(giorno, "%02d", rtc[4], "0");
u8g.drawStr(104,13, giorno);
FunMese();
u8g.setFont(u8g_font_7x14);
u8g.drawStr(103,25, mese);
u8g.setFont(u8g_font_04b_03);
sprintf(anno,"%04d", rtc[6], "0");
u8g.drawStr(105,31, anno);
// u8g.drawLine(46,1,46,127);
u8g.drawLine(1,34,127,34);
}
void pressKeypad(){
char key = keypad.getKey();
if (key){
switch (key) {
case 49: // TASTO 1
if (menu == 0) { //SE IL DISPLAY VISUALIZZA LA HOME
charKeypad = charKeypad + key;
break;
}
case 50:
if (menu == 0) { //SE IL DISPLAY VISUALIZZA LA HOME
charKeypad = charKeypad + key;
break;
}
case 51:
if (menu == 0) { //SE IL DISPLAY VISUALIZZA LA HOME
charKeypad = charKeypad + key;
break;
}
case 52:
if (menu == 0) { //SE IL DISPLAY VISUALIZZA LA HOME
charKeypad = charKeypad + key;
break;
}
case 53:
if (menu == 0) { //SE IL DISPLAY VISUALIZZA LA HOME
charKeypad = charKeypad + key;
break;
}
case 54:
if (menu == 0) { //SE IL DISPLAY VISUALIZZA LA HOME
charKeypad = charKeypad + key;
break;
}
case 55:
if (menu == 0) { //SE IL DISPLAY VISUALIZZA LA HOME
charKeypad = charKeypad + key;
break;
}
case 56:
if (menu == 0) { //SE IL DISPLAY VISUALIZZA LA HOME
charKeypad = charKeypad + key;
break;
}
case 57:
if (menu == 0) { //SE IL DISPLAY VISUALIZZA LA HOME
charKeypad = charKeypad + key;
break;
}
case 48:
if (menu == 0) { //SE IL DISPLAY VISUALIZZA LA HOME
charKeypad = charKeypad + key;
break;
}
case 35: // SE VIENE PREMUTO IL PULS #
if (menu == 0) { //SE IL DISPLAY VISUALIZZA LA HOME
Serial.println(charKeypad); // MOSTRO SUL DISPLAY IL VALORE OTTENUTO
charKeypad = "";
menu = 1;
pauseMenu = millis() + 20000;
break;
}
if (menu == 1) { // SE IL DISPLAY VISUALIZZA I MENU
}
} // SWITCH
Serial.println(key);
}
}
void loop(void){
pressKeypad();
Serial.println(millis());
Serial.println(pauseMenu);
delay(500);
if (millis() >= pauseMenu) {
menu = 0;
pauseMenu = 0;
}
switch (menu) {
case 0:
u8g.firstPage();
do {
Home();
}
while( u8g.nextPage() );
break;
case 1:
u8g.firstPage();
do {
Menu1();
}
while( u8g.nextPage() );
break;
} /// FINE SWITCH MENU
/*
if (menu == 0){
u8g.firstPage();
do {
Home();
}
while( u8g.nextPage() );
}
*/
}
float getTempCentr(){
byte data[12];
byte addr[8];
if ( !ds.search(addr)) {
ds.reset_search();
return -1000;
}
if ( OneWire::crc8( addr, 7) != addr[7]) {
Serial.println("CRC is not valid!");
return -1000;
}
if ( addr[0] != 0x10 && addr[0] != 0x28) {
Serial.print("Device is not recognized");
return -1000;
}
ds.reset();
ds.select(addr);
ds.write(0x44,1);
byte present = ds.reset();
ds.select(addr);
ds.write(0xBE);
for (int i = 0; i < 9; i++) {
data[i] = ds.read();
}
ds.reset_search();
byte MSB = data[1];
byte LSB = data[0];
float tempRead = ((MSB << 8) | LSB);
float TemperatureSum = tempRead / 16;
return TemperatureSum;
}