Bonjour à tous.
je suis débutant en programmation et encore plus en électronique, donc navré pour le pavé de code indigeste et le manque de précisions à venir
Plateforme = Arduino UNO R3
Projet = Contrôle de température et de taux d'humidité avec sonde DHT22 et affichage sur lcd, possibilité de controler la température cible (avec action sur relais 220V)
Comportement souhaité = lors de l'appui sur un bouton, la température cible doit s'incrémenter de 1
Code =
#include <dht.h>
#include <LiquidCrystal.h>
#define DHT22_PIN 13
float cibletemp = 20;
float ciblehumi = 60;
float maxtemp = 30;
float mintemp = 10;
int boutonplus=8;
int etat_plus=0;
int prev_etat_plus=0;
dht DHT;
// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 7, 6, 5, 4);
void setup() {
pinMode(boutonplus,INPUT);
// Set up DHT22 Sensor
Serial.begin(115200);
Serial.println("DHT TEST PROGRAM ");
Serial.print("LIBRARY VERSION: ");
Serial.println(DHT_LIB_VERSION);
Serial.println();
Serial.println("Type,\tstatus,\tHumidity (%),\tTemperature (C)");
// set up the LCD's number of columns and rows
lcd.begin(16, 2);
}
void loop()
{
// Modification temp
int val=digitalRead(boutonplus);
if((val==HIGH) && (prev_etat_plus==LOW)){
etat_plus= 1 - etat_plus;
delay(10);
}
prev_etat_plus=val;
if(etat_plus==0){
cibletemp = cibletemp+1;
} else {
cibletemp = cibletemp;
}
if(cibletemp < 10){
cibletemp = 10;
}
if(cibletemp > 30){
cibletemp = 10;
}
// lecture données sonde temp et humi, sortie sur serial
Serial.print("DHT22, \t");
int chk = DHT.read22(DHT22_PIN);
switch (chk)
{
case DHTLIB_OK:
Serial.print("OK,\t");
break;
case DHTLIB_ERROR_CHECKSUM:
Serial.print("Checksum error,\t");
break;
case DHTLIB_ERROR_TIMEOUT:
Serial.print("Time out error,\t");
break;
default:
Serial.print("Unknown error,\t");
break;
}
// DISPLAY DATA
// Serial.print(DHT.humidity, 1);
// Serial.print(",\t");
// Serial.println(DHT.temperature, 1);
// delay(1000);
// Print a message to the LCD. à améliorer pour prendre compacter tout ça
lcd.setCursor(0, 0);
lcd.print("T=");
lcd.print(DHT.temperature, 1);
lcd.print("c Cible");
lcd.print(cibletemp);
lcd.setCursor(0, 1);
lcd.print("H=");
lcd.print(DHT.humidity, 1);
lcd.print("% Cible");
lcd.print(ciblehumi);
// Délai nécessaire pour la sonde de temp/humi
delay(2000);
}
Donc voila, après avoir lu pas mal de topics, j'ai réussi à faire en sorte que lors d'un appui sur le bouton la valeur cibletemp s'incrémente de +1 par cycle jusqu'à un autre appui sur le même bouton... Seulement je préfèrerais un incrément par pression et si j'ai bien compris il vas me falloir utiliser les interruptions car je dois faire patienter le code 2 secondes mini pour relire la sonde (à confirmer, la sonde est absente pour le moment)...
Si vous aviez quelques pistes, je vous en serais reconnaissant