Salut ,
Dans votre code initial , il ya des erreurs de portée des variables , elles ne sont pas toutes accessibles partout et l ' ordre aussi est important !
par exemple :
while(coupureUp == 1)
{
coupureUp = digitalRead(fcUp);
}
si coupureUp n ' est pas initialisée avant dans le corps du programme elle ne sera pas accessible lors du 1er appel a la fonction .
de plus la variable globale ( si elle a bien ete initialise dans le code ) , n ' aura pas la valeur escompté a la fin de l ' appel de la fonction moteurUp !
en gros :
bool moteurUp = 0 ;
serial.print(moteurUp); // affichera moteurUp = 0 ;
void setup() {
// put your setup code here, to run once:
bool moteurUp = 1 ;
serial.print(moteurUp); // affichera moteurUp = 1 ;
}
void loop() {
serial.print(moteurUp); // affichera moteurUp = 0 ;
}
Ne pas tester ce code est faux ^^ , j ' ai fait ca rapidement , c ' est juste pour montrer que la variable moteurUp n ' affiche pas la meme chose selon l ' endroit ou est ce qu ' on la definit , ainsi que l ' endroit ou on la modifie ( c ' est schematique , pour les puristes
! ) ainsi que l ' endroit ou on lui demande de s' afficher ! ( meme si les variables ont le meme nom , le programme considere que ce sont des variables differentes ).
c ' est un probleme tres courant que tout le monde rencontre en programmation .
Dans le second exemple que vous citez et qui fonctionne , il n ' y a pas d' erreur de portée de variables car vous utilisez la variable definit dans la fonction au sein de la fonction :
void fc1()
{
coupureUp = digitalRead(fcUp);
if (coupureUp == 1)
{
moteurUp();
}
void moteurUp()
{
moteur.setSpeed(motorSpeed);
moteur.step(100);
fc1();
}
c ' est pour ca que ca marche et pas le premier code !
sinon , pourquoi ne pas faire :
void motorStop () {
moteur.step(0);
moteur.setSpeed(0);
}
void moteurUp()
{
moteur.setSpeed(motorSpeed);
if(coupureUp != True) {
coupureUp = digitalRead(fcUp);
moteur.step(5);
}
}
else motorStop();
void moteurDown()
{
moteur.setSpeed(motorSpeed);
if(coupureDown != True) {
coupureDown = digitalRead(fcDown);
moteur.step(5);
}
}
else motorStop();
ou bien peut etre comme cela :
void motorStop () {
moteur.step(0);
moteur.setSpeed(0);
}
void moteurUp(){
moteur.setSpeed(motorSpeed);
moteur.step(5);
}
void moteurDown(){
moteur.setSpeed(motorSpeed);
moteur.step(-5);
}
while (coupureUp != True) {
moteurUp();
}
/* etc ...