Avec un arduino UNO, je suis en train de réaliser une pico brasserie. Les principaux éléments sont:
- via un afficheur LCD, demander un nombre de paliers, puis demande une temperature et un temps pour chacun des paliers.
- puis réalise une régulation de temperature en fonction des données récupérées.
Le code fonction bien, mais j'ai 2 problèmes:
Le 1er, pas trop grave, est que dans l'état actuel, ma valeur mesureTemperature (l'acquisition d'analogRead(A0)) reste tout le temps figée à 1023. Le cablage parait bon car lorsque je charge le programme d'exemple analogInput et que je rajoutes l'affichage de l'entree sur le moniteur serie ca fonctionne.
Le 2e probleme, plus genant, est que lorsque j'essaie d'inclure la librairie onewire.h pour utiliser des capteurs de temperature DS18B20, j'ai tout une tapée d'erreur qui apparaissent.
Code : Tout sélectionner
/* PicoBrasserie
- void setup()
- void loop()
-menuAcquisitionDesParametres()
- void actualiserLesBoutons()
- void raffraichirEcranLCD()
-
*/
#include <simpleMinuteur.h>
#include <simpleBouton.h>
#include <LiquidCrystal.h>
// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(11, 10, 5, 4, 3, 2);
char message1[16] = " ";
char message2[16] = " ";
//Variables de menu
int menuPage = 0;
int nbreDePalier =0;
int palierEnCours = 0;
int csgTemperaturePalier = 0;
int csgTempsPalier = 0;
int csgTemperature[10] = {0};
int csgTemps[10] = {0};
// Variables de regulation
boolean verrouPalier = false;
int phaseDeLaRegul = 0;
int led = 13;
int mesureTemperature = 0;
// Declaration des minuteurs
simpleMinuteur palier1;
simpleMinuteur palier3;
// Déclaration des boutons
simpleBouton bouton_plus(7);
simpleBouton bouton_moins(8);
simpleBouton bouton_entrer(9);
void setup(){
Serial.begin(9600);
lcd.begin(16, 2);
pinMode(led, OUTPUT);
digitalWrite(led,LOW);
}
void loop(){
while (menuPage != 4){
menuAcquisitionDesParametres();
}
while (palierEnCours<=nbreDePalier && menuPage == 4){
mesureTemperature = analogRead(A0);
delay(100);
regulation();
}
}
/********************************************************************************
Menu d'acquisition des parametres via l'ecran LCD
********************************************************************************/
void menuAcquisitionDesParametres(){
actualiserLesBoutons();
switch(menuPage){
case 1:
// Reglage du nombre de palier
sprintf(message1,"Nombre de palier");
if (bouton_plus.vientDEtreEnfonce()){
nbreDePalier++;
}
if (bouton_moins.vientDEtreEnfonce()){
nbreDePalier--;
}
if (bouton_entrer.vientDEtreEnfonce()){
menuPage = 2;
}
sprintf(message2,"Palier= %d ",nbreDePalier);
break;
case 2:
//Reglage de la temperature de chaque palier
palierEnCours = 0;
while (palierEnCours<nbreDePalier){
actualiserLesBoutons();
sprintf(message1,"Temp palier:%d ",palierEnCours);
if (bouton_plus.vientDEtreEnfonce()){
csgTemperaturePalier++;
}
if (bouton_moins.vientDEtreEnfonce()){
csgTemperaturePalier--;
}
if (bouton_entrer.vientDEtreEnfonce()){
csgTemperature[palierEnCours] = csgTemperaturePalier;
palierEnCours++;
}
sprintf(message2,"Palier= %d ",csgTemperaturePalier);
raffraichirEcranLCD();
}
menuPage = 3;
break;
case 3:
//Reglage de la temps de chaque palier
palierEnCours = 0;
while (palierEnCours<nbreDePalier){
actualiserLesBoutons();
sprintf(message1,"Tps palier:%d ",palierEnCours);
if (bouton_plus.vientDEtreEnfonce()){
csgTempsPalier++;
}
if (bouton_moins.vientDEtreEnfonce()){
csgTempsPalier--;
}
if (bouton_entrer.vientDEtreEnfonce()){
csgTemps[palierEnCours] = csgTempsPalier;
palierEnCours++;
}
sprintf(message2,"Tps= %d ",csgTempsPalier);
raffraichirEcranLCD();
}
menuPage = 4;
palierEnCours = 0;
break;
case 4:
for (int i = 0; i < nbreDePalier; i++) {
sprintf(message1,"Palier %d",i);
sprintf(message2,"Tps=%d / T=%d",csgTemps[i], csgTemperature[i]);
raffraichirEcranLCD();
delay(3000);
}
break;
default:
sprintf(message1," Menu: ");
sprintf(message2,"AutomabEEr");
if (bouton_entrer.vientDEtreEnfonce()){
menuPage = 1;
}
break;
}
//on envoie le texte
raffraichirEcranLCD();
}
/* ---------------------- Fonctions diverses du LCD --------------------- */
// Actualisation des boutons
void actualiserLesBoutons(){
bouton_plus.actualiser();
bouton_moins.actualiser();
bouton_entrer.actualiser();
}
// Raffraichir l'ecran LCD
void raffraichirEcranLCD(){
lcd.setCursor(0,0);
lcd.print(message1);
lcd.setCursor(0,1);
lcd.print(message2);
}
/********************************************************************************
Regulation de temperature par palier
********************************************************************************/
void regulation(){
if (phaseDeLaRegul == 0){
Serial.print("On chauffe pour atteindre la temperature = ");
Serial.print(csgTemperature[palierEnCours]);
Serial.print(" pour le palier numero = ");
Serial.print(palierEnCours);
Serial.print(" La valeur du potar est de = ");
Serial.println(mesureTemperature);
digitalWrite(led,HIGH);
if (mesureTemperature > csgTemperature[palierEnCours]){
phaseDeLaRegul = 1;
}
}
if (phaseDeLaRegul == 1){
if (!verrouPalier){
palier1.demarrer(csgTemps[palierEnCours]*1000); //On demarre la minuterie pour 30 min // allumer ou éteindre la led du capteur rouge
verrouPalier = true; // On met a 1 le verrou afin de creer un front pour ne pas redémarrer la tempo.
Serial.print("On active le palier pour ");
Serial.println(csgTemps[palierEnCours]);
}
if (!palier1.estTermine()){
START(csgTemperature[palierEnCours]);
}
if (palier1.estTermine()){
phaseDeLaRegul = 0;
palierEnCours++;
verrouPalier = false;
}
}
}
/* ---------------------- Fonctions diverses de regulation --------------------- */
void START(int temperatureCible){ // START (50°C)**********************************************************/
const int offsetTemperatureCible = 100;
if ( mesureTemperature > (temperatureCible + offsetTemperatureCible))
{digitalWrite(led,LOW); // eteindre la led du capteur rouge (moult)
Serial.print("On eteint le chauffage. La consigne est de ");
}
if ( mesureTemperature < offsetTemperatureCible)
{digitalWrite(led,HIGH); // eteindre la led du capteur rouge (moult)
Serial.print("On active le chauffage. La consigne est de ");
}
Serial.println(temperatureCible);
}
Merci.
(le message d'erreur suit car le post est trop long ^^)