Ciao, nel mio progetto sto utilizzando un LCD 128x64 con la libreria U8glib; riesco a far funzionare tutto e visualizzo quello che mi serve ma dopo circa mezzora si blocca;
LCD bloccato, comunicazione seriale bloccata, controlli sugli ingressi bloccati, timer e tutto il resto....tutto bloccato!
Cosa potrebbe essere?
#include <OneWire.h>
#include <DallasTemperature.h>
#include <DS1307.h>
#include <OneWire.h>
#include <Wire.h>
#include <Time.h>
#include <TimeAlarms.h>
#include "U8glib.h"
int intTempPlafo = 45;
int intTempCentr = 35;
int intTempVasca = 25;
int DeltaTempVasca = 1;
int DeltaTempCentr = 5;
int DeltaTempPlafo = 5;
const int Riscaldatore = 22;
const int PompaFiltro = 23;
const int PompaOsmo = 24;
const int Luce = 25;
const int Refrigeratore = 26;
const int LuceNotte = 27;
const int VentolaPlafo = 28;
const int VentolaCentr = 29;
const int Galleggiante = 30;
int rtc[7];
int intMin;
int intOre;
int intsec;
int intGg;
int intMese;
int intAnno;
char ora[9] = "";
char giorno[3];
char anno[5];
char mese[4];
long delayTemp;
long lungDelayTemp = 5; // INDICARE IN SECONDI
long sviluppoDelayTemp;
#define ONE_WIRE_BUS 4 // Data wire is plugged into pin 4 on the Arduino
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
DeviceAddress TempCentr = { 0x28, 0x36, 0xD2, 0x32, 0x04, 0x00, 0x00, 0x4D };
DeviceAddress TempVasca = { 0x28, 0x5F, 0x04, 0x51, 0x05, 0x00, 0x00, 0x69 };
DeviceAddress TempPlafo = { 0x28, 0xAE, 0x5D, 0x5C, 0x06, 0x00, 0x00, 0x33 };
U8GLIB_ST7920_128X64_4X u8g(18, 16, 17);
void setup(void)
{
pinMode(Riscaldatore, OUTPUT);
pinMode(PompaFiltro, OUTPUT);
pinMode(PompaOsmo, OUTPUT);
pinMode(Luce, OUTPUT);
pinMode(Refrigeratore, OUTPUT);
pinMode(LuceNotte, OUTPUT);
pinMode(VentolaPlafo, OUTPUT);
pinMode(VentolaCentr, OUTPUT);
pinMode(Galleggiante, INPUT);
sviluppoDelayTemp = lungDelayTemp * 1000;
delayTemp = sviluppoDelayTemp;
Serial.begin(19200);
sensors.begin();
sensors.setResolution(TempCentr, 10);
sensors.setResolution(TempPlafo, 10);
sensors.setResolution(TempVasca, 10);
digitalWrite(Riscaldatore,HIGH);
digitalWrite(PompaFiltro,LOW);
digitalWrite(PompaOsmo,HIGH);
digitalWrite(Luce,HIGH);
digitalWrite(Refrigeratore,HIGH);
digitalWrite(LuceNotte,HIGH);
digitalWrite(VentolaPlafo,HIGH);
digitalWrite(VentolaCentr,HIGH);
RTC.get(rtc,true);
Serial.begin(19200);
if (rtc[6]<2015){
RTC.stop();
RTC.set(DS1307_SEC,0);
RTC.set(DS1307_MIN,00);
RTC.set(DS1307_HR,11);
RTC.set(DS1307_DOW,1);
RTC.set(DS1307_DATE,11);
RTC.set(DS1307_MTH,10);
RTC.set(DS1307_YR,15);
RTC.start();
}
RTC.SetOutput(DS1307_SQW32KHZ);
intOre = rtc[2];
intMin = rtc[1];
intsec = rtc[0];
intGg = rtc[4];
intMese = rtc[5];
intAnno = rtc[6];
setTime(intOre, intMin, intsec, intMese, intGg, 15);
Serial.print(hour());
printDigits(minute());
printDigits(second());
Serial.println();
Alarm.alarmRepeat(14,00,00, LUCEon);
Alarm.alarmRepeat(22,00,00,LUCEoff);
Alarm.alarmRepeat(13,45,00, NOTTEon);
Alarm.alarmRepeat(14,15,00,NOTTEoff);
Alarm.alarmRepeat(21,45,00, NOTTEon);
Alarm.alarmRepeat(22,00,00,NOTTEoff);
}
void printDigits(int digits)
{
Serial.print(":");
if(digits < 10)
Serial.print('0');
Serial.print(digits);
}
void printTemperature(DeviceAddress deviceAddress)
{
float tempC = sensors.getTempC(deviceAddress);
if (tempC == -127.00) {
Serial.print("Errore di lettura...");
} else {
Serial.print("C: ");
Serial.print(tempC);
}
}
void loop(void)
{
Alarm.delay(1);
RTC.get(rtc,true);
u8g.firstPage();
do {
Home();
} while( u8g.nextPage() );
if (millis() >= delayTemp){
Serial.print("Lettura Temperature...\n\r");
sensors.requestTemperatures();
Serial.print("Temperatura centralina: ");
printTemperature(TempCentr);
Serial.print("\n\r");
Serial.print("Temperatura plafo: ");
printTemperature(TempPlafo);
Serial.print("\n\r");
Serial.print("Temperatura vasca: ");
printTemperature(TempVasca);
Serial.print("\n\r\n\r");
Serial.print(hour());
printDigits(minute());
printDigits(second());
Serial.println();
delayTemp = millis() + sviluppoDelayTemp;
}
if(sensors.getTempC(TempCentr) >= (intTempCentr + DeltaTempCentr)){
digitalWrite(VentolaCentr,LOW);
}
if(sensors.getTempC(TempCentr) < (intTempCentr - DeltaTempCentr)){
digitalWrite(VentolaCentr,HIGH);
}
if(sensors.getTempC(TempPlafo) >= (intTempPlafo + DeltaTempPlafo)){
digitalWrite(VentolaPlafo,LOW);
}
if(sensors.getTempC(TempPlafo) < (intTempPlafo - DeltaTempPlafo)){
digitalWrite(VentolaPlafo,HIGH);
}
if(sensors.getTempC(TempVasca) >= (intTempVasca + DeltaTempVasca)){
digitalWrite(Refrigeratore,LOW);
digitalWrite(Riscaldatore,HIGH);
}
if(sensors.getTempC(TempVasca) < (intTempVasca - DeltaTempVasca)){
digitalWrite(Refrigeratore,HIGH);
digitalWrite(Riscaldatore,LOW);
}
if((sensors.getTempC(TempVasca) > (intTempVasca - DeltaTempVasca)) && (sensors.getTempC(TempVasca) < (intTempVasca + DeltaTempVasca))){
digitalWrite(Refrigeratore,HIGH);
digitalWrite(Riscaldatore,HIGH);
}
if (digitalRead(Galleggiante) == HIGH){
digitalWrite(PompaOsmo, LOW);
}
if (digitalRead(Galleggiante) == LOW){
digitalWrite(PompaOsmo, HIGH);
}
}
void LUCEon(){
digitalWrite(Luce, LOW);
Serial.println("Accensione Luce diurna");
}
void LUCEoff(){
digitalWrite(Luce, HIGH);
Serial.println("Spegnimento Luce diurna");
}
void NOTTEon(){
digitalWrite(LuceNotte, LOW);
Serial.println("Accensione Luce notturna");
}
void NOTTEoff(){
digitalWrite(LuceNotte, HIGH);
Serial.println("Spegnimento Luce notturna");
}
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 Home(){
sprintf(ora,"%02d:%02d:%02d",rtc[2],rtc[1],rtc[0], "0");
u8g.setFont(u8g_font_profont22);
u8g.drawStr(3,22, ora);
u8g.drawLine(0,30,127,30);
u8g.setFont(u8g_font_helvB12);
sprintf(giorno, "%02d", rtc[4], "0");
u8g.drawStr(105,15, giorno);
FunMese();
u8g.setFont(u8g_font_7x14);
u8g.drawStr(104,27, mese);
u8g.setFont(u8g_font_04b_03);
u8g.drawFrame(101,0,27,29);
u8g.drawFrame(0,0,100,29);
}