Bonjour
J'ai un programme pour piloter et afficher des mesures sur un afficheur lcd.
Lorsque je le compile, j'ai des erreurs mais qui sont non bloquantes (le programme s'éxécute quand même et remplit ses fonctions) et j'aimerais les comprendre
Mon programme :
/
//Import des bibiliothèques nécessaires
#include "DFRobot_PH.h"
#include <EEPROM.h>
#include <Wire.h> //module one wire pour la mesure de température avec sonde DS18B0
#include<LiquidCrystal_I2C.h> //bibliothèque pour l'écran lcd connecté en I2C
//Définition des connexions utilisées sur la carte Arduino
#define PH_PIN A1 //sonde pH
#define pinBoutonEnter 2 //bouton ENTER
#define pinBoutonCal 4 //bouton CAL
#define pinBoutonExit 7 //bouton EXIT
//Définitions des variables
float voltage,phValue,temperature = 25;
//Simplification des appels au module pH et à l'écran lcd
DFRobot_PH ph;
LiquidCrystal_I2C lcd(0x27, 20, 4);
//Définitions des constantes du programme
const unsigned long BAUD=115200; //flux de la liaison série
const unsigned int delai=5000; //delai entre deux mesures en millisecondes
const byte cycles=1000; //nombre de cycle pour la moyenne
//Définition des variables test pour les boutons de calibration
boolean lastBoutonEnter = LOW; //variable pour connaître l'état du bouton Enter lors du dernier appui
boolean lastBoutonCal = LOW;
boolean lastBoutonExit = LOW;
boolean etatBoutonEnter; //variable pour connaître l'état courant du bouton Enter lors du dernier
boolean etatBoutonCal;
boolean etatBoutonExit;
boolean testBoutonEnter = 0; //variable pour savoir si on rentre dans la boucle de calibration
boolean testBoutonCal = 0; //variable pour savoir si on valide l'étalonnage
void setup()
{
//initialisation de la liaison série, du module pH et du lcd
Serial.begin(BAUD);
ph.begin();
lcd.init(); // initialisation de l'afficheur
//activation du rétro éclairage
lcd.backlight();
//Affichage du texte d'aide pour l'utilisateur
lcd.setCursor(0, 0);
lcd.print("Appuyer ETALON ");
lcd.setCursor(0, 1);
lcd.print("pour etalonnage ");
//boucle pour le décompte du temps avant la prochaine action à réaliser
int i=3;
while (i>=0)
{
lcd.setCursor(0,2);
lcd.print("Attendre ");
lcd.setCursor(9,2);
lcd.print(i);
lcd.setCursor(10,2);
lcd.print(" sec");
delay(1000);
i=i-1;
}
lcd.setCursor(0,2);
lcd.print(" "); //ligne vide pour effacer le texte "Attendre X sec" après le décompte
}
void loop()
{
// on teste si le bouton ENTER est pressé --> si oui, on rentre dans le mode de calibration
etatBoutonEnter = digitalRead(pinBoutonEnter);
if (etatBoutonEnter > lastBoutonEnter)
{
testBoutonEnter=1;
ph.calibration(voltage,temperature,"ENTERPH"); // on envoie la commande ENTERPH au module pour commencer la calibration
lcd.backlight();
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("->etalonnage pHmetre");
lcd.setCursor(0, 1);
lcd.print("CAL pour valider");
lcd.setCursor(0, 2);
lcd.print("EXIT pour quitter ");
int i=6;
while (i>=0)
{
lcd.setCursor(0,3);
lcd.print("Attendre ");
lcd.setCursor(9,2);
lcd.print(i);
lcd.setCursor(10,2);
lcd.print(" sec");
delay(1000);
i=i-1;
}
lcd.setCursor(0,2);
lcd.print(" ");
if(lastBoutonCal == LOW) // on teste l'appui sur Cal après avoir appuyé au préalable sur Enter
while (testBoutonEnter == 1)
{ // on teste si le bouton CAL est pressé --> si oui, on valide l'étalonnage
etatBoutonCal = digitalRead(pinBoutonCal);
if (etatBoutonCal)
{
lcd.backlight();
lcd.clear();
ph.calibration(voltage,temperature,"CALPH"); // calibration process by Serail CMD
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("->etalonnage reussi ");
lcd.setCursor(0, 1);
lcd.print("EXIT pour sauvegarde");
lcd.setCursor(0, 2);
lcd.print("et pour quitter ");
testBoutonCal=1;
}
if(lastBoutonExit == LOW)
while (testBoutonCal == 1)
{
etatBoutonExit = digitalRead(pinBoutonExit);
if (etatBoutonExit)
{
lcd.backlight();
lcd.clear();
ph.calibration(voltage,temperature,"EXITPH"); // calibration process by Serail CMD
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("->Etalonnage reussi ");
delay(1000);
lcd.clear();
testBoutonEnter=0;
testBoutonCal=0;
break;
}
}
}
}
else // "else" salvateur
{
etatBoutonCal = digitalRead(pinBoutonCal);
etatBoutonExit = digitalRead(pinBoutonExit);
if (etatBoutonExit > lastBoutonExit)
{
ph.calibration(voltage,temperature,"EXITPH"); // calibration process by Serail CMD
lcd.backlight();
lcd.clear();
lcd.setCursor(0,0);
lcd.print("->Etalonnage arrete");
delay(2000);
lcd.clear();
}
}
lastBoutonEnter= etatBoutonEnter;
lastBoutonCal = etatBoutonCal;
lastBoutonExit = etatBoutonExit;
float resultatph=0.0;
static unsigned long timepoint = millis();
if(millis()-timepoint>2000U) //time interval: 2s
{
timepoint = millis();
for (int i =0;i<cycles;i++){
voltage = analogRead(PH_PIN)/1024.0*5000; // read the voltage
//temperature = readTemperature(); // read your temperature sensor to execute temperature compensation
phValue = ph.readPH(voltage,temperature); // convert voltage to pH with temperature compensation
//Serial.print("temperature:");
//Serial.print(temperature,1);
//Serial.print("^C pH:");
resultatph += phValue;
}
resultatph /= cycles;
Serial.println(resultatph,2);
lcd.setCursor(0, 3);
lcd.print("pH = ");
lcd.setCursor(5, 3);
lcd.print(resultatph,2);
}
ph.calibration(voltage,temperature); // calibration process by Serail CMD
delay(50);
}
float readTemperature()
{
//add your code here to get the temperature from your temperature sensor
}
Les erreurs non bloquantes :
U:\Documents\Arduino\test_3boutons_v3\test_3boutons_v3.ino:35:19: warning: large integer implicitly truncated to unsigned type [-Woverflow]
const byte cycles=1000; //nombre de cycle pour la moyenne
^~~~
U:\Documents\Arduino\test_3boutons_v3\test_3boutons_v3.ino: In function 'void loop()':
U:\Documents\Arduino\test_3boutons_v3\test_3boutons_v3.ino:91:49: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
ph.calibration(voltage,temperature,"ENTERPH"); // on envoie la commande ENTERPH au module pour commencer la calibration
^
U:\Documents\Arduino\test_3boutons_v3\test_3boutons_v3.ino:122:53: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
ph.calibration(voltage,temperature,"CALPH"); // calibration process by Serail CMD
^
U:\Documents\Arduino\test_3boutons_v3\test_3boutons_v3.ino:140:58: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
ph.calibration(voltage,temperature,"EXITPH"); // calibration process by Serail CMD
^
U:\Documents\Arduino\test_3boutons_v3\test_3boutons_v3.ino:160:53: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
ph.calibration(voltage,temperature,"EXITPH"); // calibration process by Serail CMD
^
Le croquis utilise 9714 octets (30%) de l'espace de stockage de programmes. Le maximum est de 32256 octets.
Les variables globales utilisent 871 octets (42%) de mémoire dynamique, ce qui laisse 1177 octets pour les variables locales. Le maximum est de 2048 octets.
Pouvez-vous m'aider à comprendre les erreurs trouvées et à y remédier (histoire de rendre mon programme plus propre).
Merci