Bonsoir, voici maintenant plusieurs mois que je GALERE avec ce programme étant donné que je suis une bille en code. Mon but est le suivant, j'ai deux boutons poussoir et je souhaite que lorsque je presse sur le bouton 1 mon vérin monte pendant un certain temps et que quand j'appuie sur le bouton 2 il redescende... Mais là il monte et il descend sans que je lui demande sans m'arrêter j'en peux plus a l'aide Svp.
// constants won't change.
They're used here to set pin numbers:
const int buttonPin = 2;
const int buttonPin2 = 4; // the number of the pushbutton pin
const int ledPin = 13; // the number of the LED pin
// variables will change:
int buttonState = 0; // variable for reading the pushbutton status
int buttonState2 = 0;
void setup() {
// initialize the LED pin as an output:
pinMode(buttonPin, INPUT_PULLUP);
pinMode(buttonPin2, INPUT);
pinMode(12, OUTPUT); // Broche Arduino réservée pour le sens de rotation du moteur A
pinMode(9, OUTPUT); // Broche Arduino réservée pour le freinage du moteur A
}
void loop() {
// read the state of the pushbutton value:
buttonState = digitalRead(buttonPin);
// check if the pushbutton is pressed. If it is, the buttonState is HIGH:
if (buttonState == HIGH) {
digitalWrite(12, HIGH); // Le moteur A tourne dans le sens normal
digitalWrite(9, LOW); // Désactivation du frein moteur A
analogWrite(3, 255); // Vitesse maximale pour le moteur A
delay (18400);
} else {
// turn LED off:
digitalWrite(12, HIGH); // Le moteur A tourne dans le sens normal
digitalWrite(9, LOW); // Désactivation du frein moteur A
analogWrite(3,0); // Vitesse maximale pour le moteur A
}
// read the state of the pushbutton value:
buttonState2 = digitalRead(buttonPin2);
// check if the pushbutton is pressed. If it is, the buttonState is HIGH:
if (buttonState2 == HIGH) {
digitalWrite(12, LOW); // Le moteur A tourne dans le sens normal
digitalWrite(9, LOW); // Désactivation du frein moteur A
analogWrite(3, 255); // Vitesse maximale pour le moteur A
delay (20000);
} else {
// turn LED off:
digitalWrite(12, HIGH); // Le moteur A tourne dans le sens normal
digitalWrite(9, LOW); // Désactivation du frein moteur A
analogWrite(3,0); // Vitesse maximale pour le moteur A
}
}
Qu'est-ce qui est commandé par les pin 12, 9 , 3 ? Un motor driver ? Si oui lequel ?
Les "else" ne serait pas de trop ? Au lieu des else, à la fin de tes délay, tu remets les pin dans l'état necessaire pour que le verin ne soit pas actionné.
Tu passes en broche 9 en low tout le temps donc sont état ne change jamais tout au long du programe.
Si c'est ce que tu souhaites, il suffit de mettre le digitalWrite(9, LOW); dans ton setup()
Elle se mettra une fois pour toute en etat bas.
Car la si tu appuie sur le bouton 1 elle se met en low, si tu n'appuie pas (tu rentre dans le else du bouton1, elle se mets en low, et idem pour le bouton 2 appuyé ou non, tu mets ta broche en low.
Sinon, elle a peut être besoin d'être en High si il n'y a pas d'appuie ?
bonsoir alors il y a un shield moteur qui controle l'actioneur, je voudrais qu'il monte un certain temps puis qu'il s'arette et de meme pour la descente
Je regarde, je ne vois pas pk il enchainerait les changements seul, les analogWrite(3,0); devrait le stopper.
Est-ce que tu est sur que tes boutons sont bien connecté ? (et pas tout le temps passant)
Le bouton pin2 est sur GND. Comme tu active la résistance de pull up, il est à 5V (HIGH) quand tu ne l'asticote pas.
Quand tu appuis, tu mets le pin2 au GND, donc tu as un etat LOW.
C'est sur l'état low que tu dois faire ton action.
Pour l'autre ce serait l'inverse, quand tu appuis dessus, c'est un état HIGH (c'est là que tu fais ton action)
Le plus simple serait de connecter les 2 de la même facon : soit avec un pullup et le GND, soit entre les pin et le 5V.
Ensuite pour simplifier buttonState ne servent juste a stocker la valeur pour la tester, pour simplifier, lit la valeur dans le test directement if (buttonState == HIGH)
devient if (digitalRead(buttonPin) == HIGH)
(désolé je fais au compte goutte)
A chaque fois que tu valides une condition, tu définis l'état des pin 12 et 9 en entrée, en fonction du bouton. Ils règlent aparement le sens et frein moteur.
Si tu n'est pas dans une condition, finalement peu importe leur etat, puisqu'il n'influe pas sur l'action du verrin, et que quand tu souhaite actionner le verrin tu les définit.
Tu peux supprimer les "Else" et te contenter, une fois ton delay passé, de lancer ton analogWrite(3,0); pour stoper ton moteur avant de sortir de ta condition
A voir après tout ça si sa fonctionne correctement (c'est fini pour moi ce soir).
Il y a pas mal d'optimisation a faire sur ton code, repost le même si sa fonctionne, tu auras des conseils