Claudio_FF:
Qualcosa che per qualche giorno funziona bene e poi inizia a degradare mi suona di variabili che vanno in overflow, memoria dinamica frammentata, o condizioni non gestite (quindi un problema totalmente software). Se fossero solo disturbi il problema si presenterebbe random indipendentemente da quanto è acceso.
questo è il codice che uso
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS_1 10
#define ONE_WIRE_BUS_2 5
OneWire sonda1(ONE_WIRE_BUS_1);
OneWire sonda2(ONE_WIRE_BUS_2);
DallasTemperature sensore1(&sonda1);
DallasTemperature sensore2(&sonda2);
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
#include <Arduino.h>
#include <Wire.h>
#include "Adafruit_SHT31.h"
Adafruit_SHT31 sht31 = Adafruit_SHT31();
Adafruit_SHT31 sht3x = Adafruit_SHT31();
const int relayPin = 4;
const int relayPin1 = 8;
const int relayPin2 = 9;
int pulsantePin = 7;
int val = 0;
volatile bool max1 = true;
volatile bool min1 = true;
void setup(void) {
Serial.begin(9600);
lcd.begin(20, 4);
sht31.begin(0x44);
sht3x.begin(0x45);
pinMode(relayPin, OUTPUT);
pinMode(relayPin1, OUTPUT);
pinMode(relayPin2, OUTPUT);
sensore1.begin();
sensore2.begin();
pinMode(pulsantePin, INPUT);
}
void loop(void) {
val = digitalRead(pulsantePin);
if (max1 && (val == HIGH) ) {
lcd.clear();
max1 = false;
min1 = true;
sht31.begin(0x44);
sht3x.begin(0x45);
sensore1.begin();
sensore2.begin();
}
if (val == HIGH) {
float t1 = sensore1.getTempCByIndex(0);
float t2 = sensore2.getTempCByIndex(0);
float h = sht3x.readHumidity(); //umidità sopra
float h1 = sht31.readHumidity(); //umidità giù
float t4 = sht3x.readTemperature(); //t. sopra
float t3 = sht31.readTemperature(); //t. giù
sensore1.requestTemperatures();
sensore2.requestTemperatures();
lcd.setCursor(0, 0);
lcd.print("Arduino: ON");
lcd.setCursor(11, 0);
lcd.print(" ");
lcd.setCursor(0, 1);
lcd.print("Schiusa: T=");
lcd.print(t1);
lcd.setCursor(9, 2);
lcd.print("U=");
lcd.print(h1);
lcd.print("%");
lcd.setCursor(0, 3);
lcd.print("Conf:");
lcd.setCursor(5, 3);
lcd.print("T=");
lcd.print(t2);
lcd.setCursor(11, 3);
lcd.print("U=");
lcd.print(h);
lcd.print("%");
if ( t1 < 37.8 && h1 < 57) {
digitalWrite(relayPin1, HIGH); // BIANCHE //
digitalWrite(relayPin, LOW); //VAPORE ON//
digitalWrite(relayPin2, LOW); // NERE //
delay(10000);
}
if ( t1 > 37.8 && t1 < 38.3 && h1 < 57) {
digitalWrite(relayPin1, LOW);
digitalWrite(relayPin, LOW);
digitalWrite(relayPin2, HIGH);
delay(10000);
}
if (t1 > 38.3 && h1 < 57) {
digitalWrite(relayPin1, LOW);
digitalWrite(relayPin, LOW);
digitalWrite(relayPin2, LOW);
delay(10000);
}
if (t1 < 37.8 && h1 > 57 && h1 < 65 ) {
digitalWrite(relayPin1, HIGH);
digitalWrite(relayPin, HIGH);
digitalWrite(relayPin2, LOW);
delay(10000);
}
if (t1 > 37.8 && t1 < 38.3 && h1 > 57 && h1 < 65 ) {
digitalWrite(relayPin1, LOW);
digitalWrite(relayPin, HIGH);
digitalWrite(relayPin2, HIGH);
delay(10000);
}
if (t1 > 38.3 && h1 > 57 && h1 < 65 ) {
digitalWrite(relayPin1, LOW);
digitalWrite(relayPin, HIGH);
digitalWrite(relayPin2, LOW);
delay(10000);
}
if (t1 < 37.8 && h1 > 65 ) {
digitalWrite(relayPin1, HIGH);
digitalWrite(relayPin, HIGH);
digitalWrite(relayPin2, LOW);
delay(5000);
}
if (t1 > 37.8 && t1 < 38.3 && h1 > 65 ) {
digitalWrite(relayPin1, LOW);
digitalWrite(relayPin, HIGH);
digitalWrite(relayPin2, LOW);
delay(10000);
}
if (t1 > 38.3 && h1 > 65 ) {
digitalWrite(relayPin1, LOW);
digitalWrite(relayPin, HIGH);
digitalWrite(relayPin2, LOW);
delay(10000);
}
}
else {
sht31.begin(0x44);
sht3x.begin(0x45);
sensore1.begin();
sensore2.begin();
float h = sht3x.readHumidity(); //umidità sopra
float h1 = sht31.readHumidity(); //umidità giù
float t4 = sht3x.readTemperature(); //t. sopra
float t3 = sht31.readTemperature(); //t. giù
float t1 = sensore1.getTempCByIndex(0);
float t2 = sensore2.getTempCByIndex(0);
sensore1.requestTemperatures();
sensore2.requestTemperatures();
Serial.print("Temp schiusa: DALLAS");
Serial.print(t1); //Serial.print ("*C SHT3X"); Serial.print(t3); Serial.print ("*C");
Serial.print("Umid schiusa");
Serial.print(h1); Serial.print("% Umid conf:"); Serial.print(h);
delay(5000);
lcd.setCursor(0, 0);
lcd.print("Arduino: OFF Info:");
lcd.setCursor(0, 1);
lcd.print(" Version: 1.0.0");
lcd.setCursor(0, 2);
lcd.print(" ");
lcd.setCursor(0, 3);
lcd.print("Creator: A. Milella ");
digitalWrite(relayPin, LOW); // VAPORE //
digitalWrite(relayPin1, HIGH); // BIANCHE //
digitalWrite(relayPin2, LOW); // NERE //
max1 = true;
min1 = false;
}
}