Dans mon code je veux appuyer sur le capteur de force , que ça fasse tourner le servo à 90 degré et que seulement quand je réappuie ça revienne à 25 degrés mais le while() ne fonctionne pas donc ça revient à 25 degrés avant meme que j'ai réappuyé (aucun message d'erreur)
#define capteur_force A0 // broche capteur de force
#include "Servo.h"
Servo servo; // création de l'objet "servo"
void setup() {
Serial.begin(9600); // Initialisation du moniteur serie
servo.attach(9); // attache le servo au pin spécifié
}
void loop() {
int force = analogRead(capteur_force); // on lit la valeur venant du capteur de force
Serial.print(force);
if(force > 400){
servo.write(90);
delay(2000);
delay(100);
while(force < 400){
int force = analogRead(capteur_force);
delay(1);
}
}
else{
servo.write(25);
}
delay(200);
}
Dans ton while tu redéfinis la variable force int force = analogRead(capteur_force);
Cette variable est détruite au } di while, donc n'est pas prise en compte dans le while (c'est la variable définie dans loop qui est prise en compte)
fait simplement force = analogRead(capteur_force);
ça me met ce message d'érreur (j'ai essayé dans void loop() et void setup() ) : error: 'force' was not declared in this scope
force = analogRead(capteur_force);
Ce délai implique une tempo max d’appui et une tempo min pendant laquelle le servo aura bougé. Ce n’est pas dans vos spécifications initiales.
(Si vous tenez le capteur appuyé plus de 1,5 secondes alors vous serez ne rentrez pas dans le while d’attente. Si vous le tenez appuyé un quart de seconde le servo restera quand même déplacé pendant 1,5 secondes)
➜ Vous injectez une notion de temps dans un processus qui est asynchrone, ça a des conséquences pour votre cahier des charges. Dans l’absolu pour ce genre de besoin on évite les délais.
C’est typiquement une définition de programme qui se prête bien à la programmation par machine à états (cf mon tuto éventuellement)
Sinon si vous voulez conserver la structure actuelle, vous pouvez simplifier l’écriture de votre attente, au lieu de
vous pouvez faire simplement
while (analogRead(capteur_force) < 400) delay(200);