comme ta pu le remarquer je début et j ai deux code actuellement et je comprend pas tout un avec mon menu et l autre avec mes sonde qui mesure chaque une un point de température. les deux code séparer fonctionne bien j arrive a les fusionner mais j'ai des soucie ma température se retrouve afficher tout le temps et écrie pardessus mon menu .
en faite je voudrais que
en 1 : quand je lance l Arduino mais mes température de sonde s affiche pour sa c'est ok
en 2 : quand j’appuie mon menu s'affiche mais sans afficher les sonde
en 3: je voudrai que dans mon premier menu il y est un sous menu qui me permet de revenir a l affichage général
code du menu que l on a fait ensemble
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
int ventilo = 6;
int sonde = 7;
int relais = 8;
int Tmin = 20;
int Tmax= 25;
int Hmin = 20;
int Hmax = 25;
int heure = 1;
int minute = 1;
int unsigned Menu = 0;
int unsigned SousMenu = 0;
double Tempo = millis();
double Tempo2 = 0;
int test1 = 0;
int test2 = 0;
int test3 = 0;
int SELECT = A0;
int UP = A1;
int DOWN = A2;
int LEFT = A3;
int RIGHT = A4;
typedef struct {
String Menu;
}
TypeMenu;
TypeMenu NumMenu[100];
void Initialisation() {
NumMenu[10] = (TypeMenu) {
"1. Info General "
};
NumMenu[11] = (TypeMenu) {
"Temp Nid:" +String(Tmin)
};
NumMenu[12] = (TypeMenu) {
"Temp ADC:" +String(Tmax)
};
NumMenu[13] = (TypeMenu) {
"Humidite" +String(Tmax)
};
NumMenu[20] = (TypeMenu) {
"2. Temperature"
};
NumMenu[21] = (TypeMenu) {
"Temp Min " +String(Tmin) + " c"
};
NumMenu[22] = (TypeMenu) {
"Temp Max " +String(Tmax) + " c"
};
NumMenu[30] = (TypeMenu) {
"3. Humidite"
};
NumMenu[31] = (TypeMenu) {
"Humid Min " +String(Hmin) + "%"
};
NumMenu[32] = (TypeMenu) {
"Humid Max " +String(Hmax) + "%"
};
NumMenu[40] = (TypeMenu) {
"4. Heure"
};
NumMenu[41] = (TypeMenu) {
"4.1 Reglage"
};
NumMenu[42] = (TypeMenu) {
"4.2 Reglage heure"
};
}
void setup() {
pinMode(ventilo, OUTPUT);
pinMode(sonde, OUTPUT);
pinMode(relais, OUTPUT);
Serial.begin(9600);
Initialisation();
lcd.begin(16, 2);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(" * TUTORIEL * ");
lcd.setCursor(0, 1);
lcd.print(Tmax);
delay(2000);
pinMode(SELECT, INPUT_PULLUP);
pinMode(UP, INPUT_PULLUP);
pinMode(DOWN, INPUT_PULLUP);
pinMode(LEFT, INPUT_PULLUP);
pinMode(RIGHT, INPUT_PULLUP);
}
void loop() {
Regul();
humi();
heurefunc();
bouton();
}
void bouton() {
if ( millis() > Tempo ) {
if (digitalRead(LEFT) == LOW) { /* Bouton LEFT */
SousMenu++;
Tempo = millis() + 250;
AfficheMenu();
} else if (digitalRead(DOWN) == LOW) { /* Bouton Down */
Menu = Menu - 10;
Tempo = millis() + 250;
SousMenu = 0 ;
AfficheMenu();
} else if (digitalRead(UP) == LOW) { /* Bouton Up */
Menu = Menu + 10;
Tempo = millis() + 250;
SousMenu = 0;
AfficheMenu();
} else if (digitalRead(RIGHT) == LOW) { /* Bouton RIGHT */
SousMenu--;
Tempo = millis() + 250;
AfficheMenu();
} else if (digitalRead(SELECT) == LOW) { /* Bouton Select */
Tempo = millis() + 750;
switch (Menu + SousMenu) {
case 21 :
if(Tmin <= 29){
Tmin = Tmin + 1;
}
else {
Tmin = 5;
}
if(Tmin >= Tmax) {
Tmax = Tmin + 1;
Serial.print("Tmax");
Serial.println(Tmax);
NumMenu[22] = (TypeMenu) {
"Temp Max " +String(Tmax) + " c"
};
}
NumMenu[21] = (TypeMenu) {
"Temp Min " +String(Tmin) + " c"
};
Serial.print("Tmin");
Serial.println(Tmin);
delay(200);
break;
case 22 :
if ((Tmax > Tmin)&&(Tmax <= 30)){
Tmax = Tmax + 1;
}
else {
Tmax = Tmin + 1;
NumMenu[21] = (TypeMenu) {
"Temp Min " +String(Tmin) + " c"
};
}
NumMenu[22] = (TypeMenu) {
"Temp Max " +String(Tmax) + " c"
};
Serial.print("Tmax");
Serial.println(Tmax);
delay(200);
break;
case 31 :
if ((Hmax > Hmin)&&(Hmin <= 99)){
Hmin = Hmin + 1;
}
else {
Hmin = 5;
}
if(Hmin >= Hmax) {
Hmax = Hmin + 5;
NumMenu[32] = (TypeMenu) {
"Humid Max " +String(Hmax) + " %"
};
Serial.print("Hmax");
Serial.println(Hmax);
}
NumMenu[31] = (TypeMenu) {
"Humid Min " +String(Hmin) + " %"
};
Serial.print("Hmin");
Serial.println(Hmin);
delay(200);
break;
case 32 :
if ((Hmax > Hmin)&&(Hmax <= 99)){
Hmax = Hmax + 1;
}
else {
Hmax = Hmin + 1;
NumMenu[31] = (TypeMenu) {
"Humid Min " +String(Hmin) + " %"
};
}
NumMenu[32] = (TypeMenu) {
"Humid Max " +String(Hmax) + " %"
};
Serial.print("Hmax");
Serial.println(Hmax);
delay(200);
break;
case 41 :
;
case 42 :
;
}
AfficheMenu();
}
}
}
void AfficheMenu() {
if (Menu == 0 ) {
Menu = 40;
}
if (Menu == 50 ) {
Menu = 10;
}
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(NumMenu[Menu].Menu);
lcd.setCursor(0, 1);
if ( SousMenu < 0 ) {
SousMenu = 0;
}
if (NumMenu[Menu + SousMenu].Menu == "") {
SousMenu = 0;
}
if (Menu + SousMenu > Menu) {
lcd.print(NumMenu[Menu + SousMenu].Menu);
}
}
void Regul() {
if (test1 == 1) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Temperature Mini");
lcd.setCursor(0, 1);
lcd.print(Hmin);
}
}
void humi() {
if (test2 > 0) {
if ((digitalRead(test2)) == HIGH) {
Serial.print("action on test2");
}
if ((digitalRead(test2)) == LOW) {
Serial.print("action off test2");
}
}
}
void heurefunc() {
if (test3 > 0) {
if ((digitalRead(test3)) == HIGH) {
Serial.print("action on test3");
}
if ((digitalRead(test3)) == LOW) {
Serial.print("action off test3");
}
}
}
code de mais deux sonde
#include <LiquidCrystal.h>
#include <OneWire.h>
// DS18S20 Temperature chip i/o
OneWire ds(10); // on pin 10
byte addr1[8] = {0x28, 0xAA, 0x98, 0x12, 0x3C, 0x14, 0x01, 0xD7};
byte addr2[8] = {0x28, 0xAA, 0xC1, 0x91, 0x3B, 0x14, 0x01, 0x9A};
int SignBit = 0;
int StartCol = 8;
// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup()
{
Serial.begin(9600);
// set up the LCD's number of columns and rows:
lcd.begin(16, 2);
// Print a message to the LCD.
lcd.print("Temp NID:");
lcd.setCursor(0, 1);
lcd.print("Temp ADC:");
}
int tc_100(byte* addr){
int HighByte, LowByte, TReading;
byte data[12];
byte i;
ds.reset();
ds.select(addr);
ds.write(0x44,1); // start conversion, with parasite power on at the end
delay(1000); // maybe 750ms is enough, maybe not
// we might do a ds.depower() here, but the reset will take care of it.
ds.reset();
ds.select(addr);
ds.write(0xBE); // Read Scratchpad
for ( i = 0; i < 9; i++) { // we need 9 bytes
data[i] = ds.read();
}
LowByte = data[0];
HighByte = data[1];
TReading = (HighByte << 8) + LowByte;
SignBit = TReading & 0x8000; // test most sig bit
if (SignBit) // negative
{
TReading = (TReading ^ 0xffff) + 1; // 2's comp
}
return (6 * TReading) + TReading / 4; // multiply by (100 * 0.0625) or 6.25
}
void mypr(int Tc_100, int line) {
int Whole, Fract;
Whole = Tc_100 / 100; // separate off the whole and fractional portions
Fract = Tc_100 % 100;
if (SignBit) // If its negative
{
lcd.setCursor(StartCol,line);
lcd.print("-");
}
lcd.setCursor(StartCol+1,line);
lcd.print(Whole);
lcd.print(".");
if (Fract < 10)
{
lcd.print("0");
}
lcd.print(Fract);
lcd.print("C");
}
void loop()
{
byte i;
byte data[12];
int Tc_100;
Tc_100 = tc_100(addr1);
mypr(Tc_100,0);
Tc_100 = tc_100(addr2);
mypr(Tc_100,1);
}
je met ma tentative de fusion dans le prochain post car je depasse les 9000 characters