Erreur de compilation "soudaine"

J'ai un Arduino Uno avec lequel je surveille 8 contacts pour en faire un enregistreur d'événements avec heure/minutes/secondes. Tout fonctionnait très bien mais j'ai voulu faire une petite correction dans un commentaire. Lorsque j'essaie de recharger le sketch dans la carte, j'ai une erreur de compilation. J'ai même essayé de prendre une version qui était sur le Backup de mon Mac. Rien n'y fait. J'ai enlevé la correction, pas plus de chance.
Merci à l'avance

:warning:

Post mis dans la mauvaise section, on parle anglais dans les forums généraux. ➜ déplacé vers le forum francophone.

Merci de prendre en compte les recommandations listées dans « Les bonnes pratiques du Forum Francophone”

Il peut y avoir des mises à jour de certaines bibliothèques qui fait qu'avec l'ancienne version cela fonctionnait et pas avec la nouvelle. J'ai eu ce type de problème après une mise à jour.

Maintenant sans avoir le code ni un coupé collé de l'erreur de compilation, il n'y a que Mme Irma et sa boulle de cristal qui peut répondre.

Voici le code, il est assez long. J'ai fait une routine (heure) à la fin pour mettre l'heure au lieu de mettre l'heure à chaque item. Ça fonctionnait très bien. Le code manque peut-être de finition mais je suis débutant.[code]

#include <Wire.h>

include <math.h>

// Include NewLiquidCrystal Library for I2C
#include <LiquidCrystal_I2C.h>
#include "RTClib.h"// RTC clock
RTC_DS3231 rtc;
//Symbole é
byte accent[8] = {
0b00010,
0b00100,
0b01110,
0b10001,
0b11111,
0b10000,
0b01110,
0b00000,
};

// Define LCD pinout
const int en = 2, rw = 1, rs = 0, d4 = 4, d5 = 5, d6 = 6, d7 = 7, bl = 3;
// Define I2C Address - change if required
const int i2c1_addr = 0x27;// afficheur du haut
const int i2c2_addr = 0x23;// afficheur du bas
LiquidCrystal_I2C lcd1(i2c1_addr, en, rw, rs, d4, d5, d6, d7, bl, POSITIVE);
LiquidCrystal_I2C lcd2(i2c2_addr, en, rw, rs, d4, d5, d6, d7, bl, POSITIVE);
int state5 = LOW; //signal sauna chauffe de arduino sauna
int state6 = LOW; //signal pompe potable de arduino pompes
int state7 = LOW; //signal pompe arrosage de arduino pompes
int state8 = LOW; //contact détecteur autos
int state9 = LOW; //contact porte cabane déverrouillée
int state10 = LOW; //contact porte sous-sol déverrouillée
int state11 = LOW; //contact photocell
int state12 = LOW; //contact chargeur batterie génératrice
int state13 = LOW; //présence tension Hydro
int lastState5 = LOW;
int lastState6 = LOW;
int lastState7 = LOW;
int lastState8 = LOW;
int lastState9 = LOW;
int lastState10 = LOW;
int lastState11 = LOW;
int lastState12 = LOW;
int lastState13 = LOW;
int Relais2 = 2;//signal porte cabane dév vers arduino flasher
int Relais3 = 3;//signal porte sous-sol dév vers arduino flasher
int Relais4 = 4;//signal détecteur d'autos vers arduino flasher
int totalporteSS=1;
int totalDetect=1;
int totalporteCab=1;
int totalPhotocell=1;
int totalPotable=1;
int totalArros=1;
int totalCharg=1;
int totalSauna=1;

void setup() {

int heure;
#ifndef ESP8266
while (!Serial); // wait for serial port to connect. Needed for native USB
#endif
if (! rtc.begin()) {
Serial.println("Couldn't find RTC");
Serial.flush();
abort();
}
if (rtc.lostPower()) {
Serial.println("RTC lost power, let's set the time!");
// When time needs to be set on a new device, or after a power loss, the
// following line sets the RTC to the date & time this sketch was compiled
rtc.adjust(DateTime(F(DATE), F(TIME)));
// This line sets the RTC with an explicit date & time, for example to set
// Juillet 8, 2021 at 17 pm you would call:
//
//rtc.adjust(DateTime(2021,10,18,17,01));
}
pinMode(Relais2,OUTPUT);//cabane
pinMode(Relais3,OUTPUT);//sous-sol
pinMode(Relais4,OUTPUT);//détecteur
pinMode(5,INPUT);
pinMode(6,INPUT);
pinMode(7,INPUT);
pinMode(8, INPUT);
pinMode(9, INPUT);
pinMode(10, INPUT);
pinMode(11, INPUT);
pinMode(12, INPUT);
pinMode(13, INPUT);

digitalWrite(Relais2,LOW);//cabane
digitalWrite(Relais3,LOW);//sous-sol
digitalWrite(Relais4,LOW);//détecteur
Serial.begin(9600);
lcd2.clear();
lcd1.begin(20, 4);
lcd2.begin(20, 4);
lcd1.createChar(0, accent);
lcd2.createChar(0, accent);
lcd1.setCursor(10, 0);lcd1.print("OFF");//1 détect
lcd1.setCursor(10, 1);lcd1.print("Ver");//2 cabane
lcd1.setCursor(10, 2);lcd1.print("Ver");//3 sous-sol
lcd1.setCursor(10, 3);lcd1.print("OFF");//4 photocell
lcd2.setCursor(12, 0);lcd2.print(" OFF");//5 eau potable
lcd2.setCursor(12, 1);lcd2.print(" OFF");//6 eau d'arrosage
lcd2.setCursor(12, 2);lcd2.print(" OFF");//7 chargeur
lcd2.setCursor(12, 3);lcd2.print(" OFF");//8 sauna
}

void loop() {
DateTime now = rtc.now();
// contact détecteur input 8
lcd1.setCursor(0, 0);
lcd1.print("D");
lcd1.setCursor(1, 0);
lcd1.write(byte(0));
lcd1.setCursor(2, 0);
lcd1.print("t.auto");
if (state8 == HIGH && lastState8 == LOW) {
heure();

Serial.print("Detecteur d'autos ON ");
Serial.println(totalDetect);
lcd1.setCursor(17,0);
lcd1.print(totalDetect);
totalDetect= totalDetect +1;
digitalWrite (Relais4,HIGH);
lcd1.setCursor(10, 0);
lcd1.print("ON ");
}
if (state8 == LOW && lastState8 == HIGH) {
heure();

Serial.println("Detecteur d'auto OFF ");
digitalWrite (Relais4,LOW);
lcd1.setCursor(10, 0);
lcd1.print("OFF");
}
lastState8 = state8;
state8 = digitalRead(8);

// porte cabane input 9
lcd1.setCursor(0, 1);
lcd1.print("Cabane");
if (state9 == HIGH && lastState9 == LOW) {
heure();

Serial.print("Porte Cabane deverrouillee ");
Serial.println(totalporteCab);
lcd1.setCursor(17,1);
lcd1.print(totalporteCab);
totalporteCab=totalporteCab+1;
digitalWrite (Relais2,HIGH);
lcd1.setCursor(10, 1);
lcd1.print("D");
lcd1.setCursor(11, 1);
lcd1.write(byte(0));
lcd1.setCursor(12, 1);
lcd1.print("v");
}
if (state9 == LOW && lastState9 == HIGH) {
heure();

Serial.println("Porte Cabane verrouillee ");
digitalWrite (Relais2,LOW);
lcd1.setCursor(10, 1);
lcd1.print("Ver");
}
lastState9 = state9;
state9 = digitalRead(9);

// contact porte sous-sol input 10
lcd1.setCursor(0, 2);
lcd1.print("Sous-sol");
if (state10 == HIGH && lastState10 == LOW) {
heure();

Serial.print("Porte Sous-sol deverrouillee ");
Serial.println(totalporteSS);
lcd1.setCursor(17,2);
lcd1.print(totalporteSS);
totalporteSS=totalporteSS+1;
digitalWrite (Relais3,HIGH);
lcd1.setCursor(10, 2);
lcd1.print("D");
lcd1.setCursor(11, 2);
lcd1.write(byte(0));
lcd1.setCursor(12, 2);
lcd1.print("v");
}
if (state10 == LOW && lastState10 == HIGH) {
heure();

Serial.println("Porte Sous-sol verrouillee ");
digitalWrite (Relais3,LOW);
lcd1.setCursor(10, 2);
lcd1.print("Ver");
}
lastState10 = state10;
state10 = digitalRead(10);

// contact photocell input 11
lcd1.setCursor(0, 3);
lcd1.print("Photocell");
if (state11 == HIGH && lastState11 == LOW) {
heure();

Serial.print("Photocell ON ");
Serial.println(totalPhotocell);
lcd1.setCursor(17,3);
lcd1.print(totalPhotocell);
totalPhotocell=totalPhotocell+1;
lcd1.setCursor(10, 3);
lcd1.print("ON ");
}
if (state11 == LOW && lastState11 == HIGH) {
heure();

Serial.println("Photocell OFF");
lcd1.setCursor(10, 3);
lcd1.print("OFF");
}
lastState11 = state11;
state11 = digitalRead(11);

// contact chargeur batterie génératrice input 12
lcd2.setCursor(0, 2);
lcd2.print("Charg.G");
lcd2.setCursor(7, 2);
lcd2.write(byte(0));
lcd2.setCursor(8, 2);
lcd2.print("n. :");
if (state12 == HIGH && lastState12 == LOW) {
heure();

Serial.print("Chargeur Batt. Gener. ON ");
Serial.println(totalCharg);
lcd2.setCursor(17,2);
lcd2.print(totalCharg);
totalCharg=totalCharg+1;
lcd2.setCursor(12, 2);
lcd2.print(" ON ");
}
if (state12 == LOW && lastState12 == HIGH) {
heure();

Serial.println("Chargeur Batt. Gener. OFF");
lcd2.setCursor(12, 2);
lcd2.print(" OFF");
}
lastState12 = state12;
state12 = digitalRead(12);

// pompe eau potable input 6
lcd2.setCursor(0, 0);
lcd2.print("Eau Potable:");
if (state6 == HIGH && lastState6 == LOW) {
heure();

Serial.print("Pompe Eau Potable ON ");
Serial.println(totalPotable);
lcd2.setCursor(17,0);
lcd2.print(totalPotable);
totalPotable=totalPotable+1;
lcd2.setCursor(12, 0);
lcd2.print(" ON ");
}
if (state6 == LOW && lastState6 == HIGH) {
heure();

Serial.println("Pompe Eau Potable OFF ");
digitalWrite (Relais2,LOW);
lcd2.setCursor(12, 0);
lcd2.print(" OFF");
}
lastState6 = state6;
state6 = digitalRead(6);

// pompe eau d'arrosage input 7
lcd2.setCursor(0, 1);
lcd2.print("Eau D'arros:");
if (state7 == HIGH && lastState7 == LOW) {
heure();

Serial.print("Pompe Eau D'arrosage ON ");
Serial.println(totalArros);
lcd2.setCursor(17,1);
lcd2.print(totalArros);
totalArros=totalArros+1;
lcd2.setCursor(12, 1);
lcd2.print(" ON ");
}
if (state7 == LOW && lastState7 == HIGH) {
heure();

Serial.println("Pompe Eau D'arrosage OFF ");
lcd2.setCursor(12, 1);
lcd2.print(" OFF");
}
lastState7 = state7;
state7 = digitalRead(7);

// sauna chauffe input 5
lcd2.setCursor(0, 13);
lcd2.print("Sauna Chau :");
if (state5 == HIGH && lastState5 == LOW) {
heure();
Serial.print("Sauna Chauffe ");
Serial.println(totalSauna);
lcd2.setCursor(17,3);
lcd2.print(totalSauna);
totalSauna=totalSauna+1;
lcd2.setCursor(12, 3);
lcd2.print(" ON ");
}
if (state5 == LOW && lastState5 == HIGH) {
heure();
Serial.println("Sauna Ne Chauffe Pas");
lcd2.setCursor(12, 3);
lcd2.print(" OFF");
}
lastState5 = state5;
state5 = digitalRead(5);

// contact présence tension Hydro input 13
if (state13 == HIGH && lastState13 == LOW) {
heure();
Serial.println("Présence tension Hydro ");
}
if (state13 == LOW && lastState13 == HIGH) {
heure();
Serial.println("Absence tension Hydro ");
}
lastState13 = state13;
state13 = digitalRead(13);

}

// routine pour écrire l'heure
void heure() {
DateTime now = rtc.now();

Serial.print(now.year(), DEC);
Serial.print('/');
//Imprime le mois avec un zéro devant si <10
if((now.month())<10){
Serial.print("0");
}
Serial.print(now.month(), DEC);
Serial.print('/');
//Imprime le jour avec un zéro devant si <10
if ((now.day())<10){
Serial.print("0");
}
Serial.print(now.day(), DEC);
Serial.print(" ");
//Imprime l'heure avec un zéro devant si <10
if((now.hour())<10){
Serial.print("0");
}
Serial.print(now.hour(), DEC);
Serial.print(':');
//Imprime la minute avec un zéro devant si <10
if((now.minute())<10){
Serial.print("0");
}
Serial.print(now.minute(), DEC);
Serial.print(':');
//Imprime la seconde avec un zéro devant si <10
if ((now.second())<10){
Serial.print("0");
}
Serial.print(now.second(),DEC);
Serial.print(" ");
return;
}
[/code]

Cela permet de mettre en forme le code pour que tous puisse le lire. Les balises code ont changées, ce n'est plus [code]

Il faut aussi un coupé coller du message d'erreur

J'essaie de copier le message d'erreur et je reviens

Voici le message d'erreur:

Users/pierreletourneau/Documents/Arduino/Enregistreur_evenements/Enregistreur_evenements.ino:343:8: note: 'void heure()' previously defined here

void heure() {

^~~~~

exit status 1

Erreur de compilation pour la carte Arduino Uno

int heure; dans le setup

et void heure () fonction

Ce que je ne comprends pas, c'est que je n'ai rien changé et ça fonctionnait avant. Après avoir vérifier l'état du contact, je vais exécuter la routine "heure" qui est à la fin et je continue vers les autres vérifications.

Bonjour
J'ai recopié une vieille version et ça fonctionne. Je ne comprends toujours pas pourquoi.
La routine pour donner l'heure s'appelle encore "heure (); " et je n'ai plus d'erreur de compilation.
Je m'excuse de vous avoir dérangé.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.