Bonjour à tous,
Je vais vous présenter mon projet. Je suis en train de créer un dispositif qui détecte la température et averti quand la température est inférieure à la température consigne saisie sur le clavier.
Mon problème c'est que je voudrais récupérer deux variables de différentes types dans un fonction appeler ecouter() et je ne sais pas pourquoi mais quand j'appelle la fonction dans loop ,seule la variable bool est récupéré et le variable float(consigneTemperature) n'est pas considéré par la fonction loop.
Est-ce vous pouvez m'aidez s'ils vous plaît
#include <OneWire.h>
#include <DallasTemperature.h>
#include <Keypad.h>
// Configuration du capteur DS18B20
#define ONE_WIRE_BUS 10
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
// Configuration du clavier matriciel
const byte ROWS = 4;
const byte COLS = 4;
char keys[ROWS][COLS] = {
{'1', '2', '3', '-'},
{'4', '5', '6', '.'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
byte rowPins[ROWS] = {2, 3, 4, 5};
byte colPins[COLS] = {6, 7, 8, 9};
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
// Configuration de l'écran LCD
LiquidCrystal_I2C lcd(0x20,16,2);
//broche LED
const int LED1 = 12;
// Broche du buzzer
const int buzzerPin = 11;
// Température consigne
float consigneTemperature = 0;
struct data {
float consigneTemperature;
bool sensorState;
};
// unsigned long previousMillis = 0;
// const unsigned long interval = 2000;
int compt = 1000;
void setup() {
sensors.begin();
lcd.init();
lcd.begin(16, 2);
pinMode(buzzerPin, OUTPUT);
pinMode(LED1,OUTPUT);
lcd.backlight();
lcd.setCursor(0,0);
lcd.print("consigne ");
lcd.setCursor(0,1);
lcd.print("avec # puis *");
delay(2000);
}
bool sensorState = true;
// créer une structure pour regrouper le consigneTemperature et buzzerStop
data config;
data ecouter() {
char key = keypad.getKey();
config.sensorState= sensorState;
if (key != NO_KEY) {
if (key == '#'){
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Consigne:");
String tempStr = "";
while (key != '*') {
key = keypad.getKey();
if (key != NO_KEY) {
if ((key >= '0' && key <= '9') || key =='-' || key =='.') {
tempStr += key;
lcd.print(key);
}
}
}
config.consigneTemperature= consigneTemperature;
consigneTemperature = tempStr.toFloat();
lcd.clear();
lcd.print("Temp. consigne:");
lcd.setCursor(0, 1);
lcd.print(consigneTemperature);
sensorState = true;
while (compt != 0) {
lcd.display();
compt--;
}
lcd.clear();
compt=1000;
}
else if (key == 'C'){
digitalWrite(buzzerPin, LOW);
digitalWrite(LED1,LOW);
lcd.setCursor(0,0);
lcd.clear();
lcd.print("buzzer arreter!");
sensorState = false;
}
}return {sensorState,consigneTemperature};
}
unsigned long previousUpdateTime = 0;
const unsigned long updateInterval = 1000; // Mettez ici l'intervalle désiré en millisecondes
void loop() {
unsigned long currentMillis = millis();
// Écouter le clavier
data config = ecouter();
consigneTemperature= config.consigneTemperature;
sensorState= config.sensorState;
if (sensorState == true){
// Mettre à jour l'affichage de la température à intervalles réguliers
if (currentMillis - previousUpdateTime >= updateInterval) {
previousUpdateTime = currentMillis;
sensors.requestTemperatures();
float tempC = sensors.getTempCByIndex(0);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Temp:");
lcd.print(tempC);
lcd.print(" C");
if (tempC <= consigneTemperature ) {
digitalWrite(buzzerPin, HIGH);
digitalWrite(LED1,HIGH);
lcd.setCursor(0, 1);
lcd.print("Buzzer actif ");
} else {
digitalWrite(buzzerPin, LOW);
digitalWrite(LED1,LOW);
lcd.setCursor(0, 1);
lcd.print("Buzzer inactif");
}
}
lcd.display();
}
}
type or paste code here