termostato

un paio di settimane fa ho fatto uno sketch per un termostato e funzionava “non perfettamente” ma funzionava
oggi lo volevo migliorare ma adesso non funziona neanche con il codice originale da i numeri
all inizio funziona poi al variare della temperatura o dell umidita impazzisce
come risolvere?? ecco lo sketch

#include <dht11.h>
dht11 DHT;
#define DHT11_PIN 31
#include <LiquidCrystal.h>


LiquidCrystal lcd(8,9,4,5,6,7);
const int buttonPin = 22;
const int buttonPin2 = 33;// the number of the pushbutton pin
int buttonState;  
int buttonState2;// the current reading from the input pin
int lastButtonState = LOW;
int lastButtonState2 = LOW;// the previous reading from the input pin
int olo = 25;
long lastDebounceTime = 0;
long lastDebounceTime2 = 0;// the last time the output pin was toggled
long debounceDelay = 50;
long debounceDelay2 = 50 ;// the debounce time; increase if the output flickers

void setup() {
  lcd.begin(16, 2);
pinMode(buttonPin, INPUT);
pinMode(buttonPin2,INPUT);
pinMode(49,OUTPUT);
Serial.begin(9600);
}
void loop() { 
  int reading = digitalRead(buttonPin);
  if (reading != lastButtonState) {
    lastDebounceTime = millis(); } 
  if ((millis() - lastDebounceTime) > debounceDelay) {
    if (reading != buttonState) {
      buttonState = reading;
      if (buttonState == HIGH) { (olo++);}}}
  lastButtonState = reading;


  int reading2 = digitalRead(buttonPin2);
  if (reading2 != lastButtonState2) {
    lastDebounceTime2 = millis(); } 
  if ((millis() - lastDebounceTime2) > debounceDelay2) {
    if (reading2 != buttonState2) {
      buttonState2 = reading2;
      if (buttonState2 == HIGH) { (olo--);  
  
       
      }
    }
  } int chk = DHT.read(DHT11_PIN);
  delay(18);
  lcd.setCursor(0, 1);
int temp =  DHT.temperature;delay(18);
  lcd.print( DHT.temperature);
  lcd.print("C' ");
  lcd.print(DHT.humidity);delay(18);lcd.print("%   ");lcd.print(olo);
  if(temp>=olo){digitalWrite(49,LOW);}
  else{digitalWrite(49,HIGH);}delay(20);
  
  
lastButtonState2 = reading2;



}

Hai cambiato qualcosa nel circuito elettrico o si sfilato qualche cavetto? Ciao Uwe

no il circuito e uguale

Prova questo:

#include <dht11.h>
dht11 DHT;
#define DHT11_PIN 31
#include <LiquidCrystal.h>

LiquidCrystal lcd(8,9,4,5,6,7);

const int buttonPin = 22;
const int buttonPin2 = 33;// the number of the pushbutton pin
int buttonState;  
int buttonState2;// the current reading from the input pin
int lastButtonState = LOW;
int lastButtonState2 = LOW;// the previous reading from the input pin
int olo = 25;
long lastDebounceTime = 0;
long lastDebounceTime2 = 0;// the last time the output pin was toggled
long debounceDelay = 50;
long debounceDelay2 = 50 ;// the debounce time; increase if the output flickers

void setup() {
  lcd.begin(16, 2);
  pinMode(buttonPin, INPUT);
  pinMode(buttonPin2, INPUT);
  pinMode(49, OUTPUT);
  Serial.begin(9600);
  Serial.println("Arduino start!");
  delay(500);
  Serial.print("Set = ");
  Serial.print(olo);
  Serial.println(" °C");
}

void loop() { 
  // Pulsante UP
  int reading = digitalRead(buttonPin);
  if (reading != lastButtonState) {
    lastDebounceTime = millis(); 
  } 
  if ((millis() - lastDebounceTime) > debounceDelay) {
    if (reading != buttonState) {
      buttonState = reading;
      if (buttonState == HIGH) { 
        olo++;
        Serial.println("Up");
        Serial.print("Set = ");
        Serial.print(olo);
        Serial.println(" °C");
      }
    }
  }
  lastButtonState = reading;

  // Pulsante Down
  int reading2 = digitalRead(buttonPin2);
  if (reading2 != lastButtonState2) {
    lastDebounceTime2 = millis(); 
  } 
  if ((millis() - lastDebounceTime2) > debounceDelay2) {
    if (reading2 != buttonState2) {
      buttonState2 = reading2;
      if (buttonState2 == HIGH) { 
        olo--;  
        Serial.println("Down");
        Serial.print("Set = ");
        Serial.print(olo);
        Serial.println(" °C");
      }
    }
  } 
  lastButtonState2 = reading2;

  // Legge sensore e stampa su LCD
  int chk = DHT.read(DHT11_PIN);
  // delay(18);
  lcd.setCursor(0, 1);
  // int temp = DHT.temperature;
  // delay(18);
  lcd.print(DHT.temperature);
  lcd.print("C' ");
  lcd.print(DHT.humidity);
  // delay(18);
  lcd.print("%   ");
  lcd.print(olo);

  // Attiva disattiva relè (pin 49)
  if(DHT.temperature >= olo)
  {
    digitalWrite(49, LOW);
  }
  else
  {
    digitalWrite(49, HIGH);
  }

  delay(100);
}

Ho messo un unico delay alla fine e inserito i Serial.print.
Se apri la seriale dovresti vedere i valori della temperatura impostata e se cambia.

ciao ragazzi, scusate se mi intrometto ma ho provato a testare il codice postato su questo 3d per far funzionare il mio sensore...ma la verifica del codice mi segnala errori già nella seconda riga "dht11 DHT;" ho scaricato la libreria e l'ho importata sul playground di arduino :roll_eyes: :roll_eyes: :roll_eyes:

lamerino: ciao ragazzi, scusate se mi intrometto ma ho provato a testare il codice postato su questo 3d per far funzionare il mio sensore...ma la verifica del codice mi segnala errori già nella seconda riga "dht11 DHT;" ho scaricato la libreria e l'ho importata sul playground di arduino :roll_eyes: :roll_eyes: :roll_eyes:

Devi riportare nel tuo post quei messaggi d'errore, solo così possiamo capire con cosa c'e' l'ha il compilatore. Else ci serve la palla di vetro. :grin: