Je suis plutôt nouveau dans la programmation Arduino. J'ai un problème lors de la compilation du morceau de code suivant:
const int relay1 = 10; //Power Relay 1
const int relay2 = 11; //Power Relay 2
const int relay3 = 12; //Toggle Relay
const int button1 = 3;
const int button2 = 4;
const int button3 = 5;
//---Button States---\\
int button1State; //Current state of Button 1
int button2State; //Current state of Button 2
int button3State; //Current state of Button 3
int button1State_prev = LOW; //Previous state of Button 1
int button2State_prev = LOW; //Previous state of Button 2
int button3State_prev = LOW; //Previous state of Button 3
//---General Variables---\\
int userSelection = 0;
int interlockState = 0;
int platformState = 0;
//---Interval-Tracking Variables---\\
unsigned long lastTime_Debounce1 = 0; //Button 1 debounce time
unsigned long lastTime_Debounce2 = 0; //Button 2 debounce time
//---Activity Delays---\\
const unsigned int relayDelay = 10; //Delay between relay actions (ms)
const unsigned int debounceDelay = 60; //Delay for button de-bouncing (ms)
void setup() {
//Configure Pins
pinMode(relay1, OUTPUT);
pinMode(relay2, OUTPUT);
pinMode(relay3, OUTPUT);
pinMode(button1, INPUT);
pinMode(button2, INPUT);
pinMode(button3, INPUT);
digitalWrite(relay1, LOW);
digitalWrite(relay2, LOW);
digitalWrite(relay3, LOW);
}
void loop() {
//Read value of each input pin
int button1Reading = digitalRead(button1); //Current reading of Button 1
int button2Reading = digitalRead(button2); //Current reading of Button 2
int button3Reading = digitalRead(button3); //Current reading of Button 3
//Debounce Button1
if (button1Reading != button1State_prev) {
lastTime_Debounce1 = millis();
}
button1State_prev = button1Reading;
if ((millis() - lastTime_Debounce1) > debounceDelay) {
if (button1Reading != button1State) {
button1State = button1Reading;
}
}
//Debounce Button2
if (button2Reading != button2State_prev) {
lastTime_Debounce2 = millis();
}
button2State_prev = button2Reading;
if ((millis() - lastTime_Debounce2) > debounceDelay) {
if (button2Reading != button2State) {
button2State = button2Reading;
}
}
Pour une raison quelconque, le compilateur est convaincu que la variable lastTime_Debounce1
dans la deuxième instruction IF, sur la ligne 54, n'a pas été déclarée dans la portée. Je ne comprends pas comment cela est possible, car la variable en question est un global défini et initialisé.
Si je commente le premier trio d'instructions IF (gestion du bouton 1), le deuxième trio (gestion du bouton 2) n'a aucun problème à compiler, même s'il fait exactement la même chose exactement de la même manière.
J'ai vérifié tous les suspects habituels: orthographe, accolades, points-virgules, même des blocs de code commentés un par un, mais je ne trouve pas la source du problème. J'utilise l'IDE Arduino 1.8.2.
Quelqu'un peut-il signaler l'erreur qui me manque?
la source
Réponses:
La barre oblique inverse dans vos commentaires est le problème. Selon les définitions du langage C ++, un
\
à la fin de la ligne est interprété comme une "continuation de ligne". Ainsi, votre commentaire se poursuit à la ligne suivante et votre déclaration et initialisation de variable est mise en commentaire.Cela apparaît lors de l'ouverture de votre code avec un bon programme de mise en évidence de la syntaxe, comme Notepad ++.
Tout supprimer
\\
à la fin de la ligne de commentaire résout votre problème.Note latérale: Pour plus d'informations, consultez /programming//a/30290133/5296568 . Les barres obliques inverses à la fin d'une ligne sont réellement utiles lorsqu'elles sont utilisées dans des définitions de macro sur plusieurs lignes.
la source