Bonjour !
Je souhaiterai savoir comment peut-on faire pour effectuer deux actions simultanées sur un arduino.
En gros, j'aimerai pouvoir contrôler l'affichage de la première ligne d'un écran LCD (16 colonnes 2 lignes connecté en I2C) avec deux boutons poussoir. Et je souhaiterai que la deuxième ligne affiche une variable qui s'actualise continuellement sans affecter le reste de l'écran.
Le code que j'ai mis ci dessous me permet de faire chauffer une résistance contrôlée par un relais 12v (activé avec un bouton) et en même temps afficher la température (avec une sonde) sur un écran LCD.
L'écran sert également de menu (pour faire varier le délai entre l'activation du relais et sa désactivation).
Donc, dans le cas présent, je souhaiterai (au moment où on active le relais) faire afficher le message "Heating..." sur la première ligne de l'écran ET en même temps, sur la deuxième ligne, la température en temps réel.
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Adafruit_MAX31855.h>
int thermoDO = 7;
int thermoCS = 6;
int thermoCLK = 5;
Adafruit_MAX31855 thermocouple(thermoCLK, thermoCS, thermoDO);
LiquidCrystal_I2C lcd(0x27,16,2);
int pinButton = 2;
int pinTempButton = 4;
int relayPin = 3;
int t = 1000;
double c = thermocouple.readCelsius();
void tempDisp (){
lcd.setCursor(0,1);
lcd.print("Temp:");
lcd.setCursor(6,1);
lcd.print(c);
lcd.setCursor(12,1);
lcd.print("C");
}
void setup() {
Serial.begin(9600);
Serial.println("MAX31855 test");
pinMode(pinButton, INPUT);
pinMode(relayPin, OUTPUT);
pinMode(pinTempButton, INPUT);
lcd.init();
lcd.backlight();
lcd.home();
lcd.setCursor(0,0);
lcd.print("Press to heat up");
lcd.setCursor(0,1);
lcd.print("Delay:");
lcd.setCursor(7,1);
lcd.print(t);
lcd.setCursor(13,1);
lcd.print("ms");
}
void loop() {
Serial.print("Internal Temp = ");
Serial.println(thermocouple.readInternal());
double c = thermocouple.readCelsius();
if (isnan(c)) {
Serial.println("ERROR");
} else {
Serial.print("C = ");
Serial.println(c);
}
delay(1000);
boolean buttonState = digitalRead(pinButton);
boolean TempButtonState = digitalRead(pinTempButton);
if (TempButtonState==HIGH){
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Delay:");
lcd.setCursor(7,0);
lcd.print(t);
lcd.setCursor(13,0);
lcd.print("ms");
lcd.setCursor(0,1);
lcd.print("Press to change");
if (TempButtonState==HIGH);{
t = t+1000;
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Delay:");
lcd.setCursor(7,0);
lcd.print(t);
lcd.setCursor(13,0);
lcd.print("ms");
tempDisp();
if (t >= 10000){
t = 0;
}
}
}
if (buttonState==HIGH)
{
lcd.clear();
tempDisp();
lcd.setCursor(3,0);
lcd.print("Heating...");
digitalWrite(relayPin, HIGH);
delay(t);
digitalWrite(relayPin, LOW);
lcd.clear();
lcd.setCursor(1,0);
lcd.print("Heating done !");
tempDisp();
}
}
Je ne sais pas si j'ai été très clair mais je vous remercie d'avance pour votre aide !