pour ma futur salle dédiée au cinéma je me suis mis dans l'idée de fabriquer un distributeur de bonbon à choix multiple, le soucis c'est que quand on insert la pièce dans le monnayeur rien ne se passe ensuite, alors que je devrais pouvoir appuyer sur un bouton poussoir qui fait tourner un servo moteur à rotation continu, je vous mets le code que j'utilise ainsi qu'un schéma de mon câblage, une photo du distributeur et le matériel utilisé.
Le matériel est :
Une redboard de chez sparkfun
4 bouton poussoir
4 servo moteur à rotation continu
un monnayeur 1€ Cebek c-5251
Merci d'avance pour votre aide, car là je ne vois pas d'où ça peu venir.
#include <Servo.h>
Servo myservo1;
int myservo1_repos = 93;
int myservo1_action = 70;
Servo myservo2;
int myservo2_repos = 92;
int myservo2_action = 70;
Servo myservo3;
int myservo3_repos = 95;
int myservo3_action = 70;
Servo myservo4;
int myservo4_repos = 95;
int myservo4_action = 70;
const int buttonPin1 = 2;
int buttonState1 = LOW;
const int buttonPin2 = 3;
int buttonState2 = LOW;
const int buttonPin3 = 4;
int buttonState3 = LOW;
const int buttonPin4 = 5;
int buttonState4 = LOW;
const int coinInsert = 13;
void setup()
{
pinMode(buttonPin1, INPUT_PULLUP);
digitalWrite (buttonPin1, HIGH);
pinMode(buttonPin2, INPUT_PULLUP);
digitalWrite (buttonPin2, HIGH);
pinMode(buttonPin3, INPUT_PULLUP);
digitalWrite (buttonPin3, HIGH);
pinMode(buttonPin4, INPUT_PULLUP);
digitalWrite (buttonPin4, HIGH);
pinMode(coinInsert, INPUT_PULLUP);
digitalWrite(coinInsert, HIGH);
myservo1.attach(8);
pinMode(8, OUTPUT);
myservo1.write(myservo1_repos);
myservo2.attach(9);
pinMode(9, OUTPUT);
myservo2.write(myservo2_repos);
myservo3.attach(10);
pinMode(10, OUTPUT);
myservo3.write(myservo3_repos);
myservo4.attach(11);
pinMode(11, OUTPUT);
myservo4.write(myservo4_repos);
}
void loop()
//Servo1
{
if (digitalRead(coinInsert)==LOW)
{
buttonState1 = digitalRead(buttonPin1);
if (buttonState1 == LOW)
{
myservo1.write(myservo1_action);
delay(4000);
myservo1.write(myservo1_repos);
}
}
//Servo2
{
while (digitalRead(coinInsert) == LOW) {
buttonState2 = digitalRead(buttonPin2);
if (buttonState2 == LOW)
{
myservo2.write(myservo2_action);
delay(4000);
myservo2.write(myservo2_repos);
}
break;
}
}
//Servo3
{
while (digitalRead(coinInsert) == LOW) {
buttonState3 = digitalRead(buttonPin3);
if (buttonState3 == LOW)
{
myservo3.write(myservo3_action);
delay(4000);
myservo3.write(myservo3_repos);
}
break;
}
}
//Servo4
{
while (digitalRead(coinInsert) == LOW) {
buttonState4 = digitalRead(buttonPin4);
if (buttonState4 == LOW)
{
myservo4.write(myservo4_action);
delay(4000);
myservo4.write(myservo4_repos);
}
break;
}
}
}
si j'ai mis une pièce, le prg regarde si j'appuie sur BP1. on va dire que je n'appuie pas sur BP1
le prg passe au while suivant, donc
tant que j'ai le signal que j'ai mis une pièce, le prg regarde si j'appuie sur le BP2. on va dire que je n'appuie pas sur BP2.
que fais le prg maintenant ??
il reste dans le "tant que" et n'en sort que lorsque je n'ai plus l'info qu'il y a une pièce introduite
et bien sur le reste du prg est strappé
Oui je viens de voir que la version du code que je vous ai mis est celle sans le break; pour le servo1, mais si je rajoute le break sa me fait toujours pareil je crois que celui viens du monnayeur qui n'est pas bien configurer dans le code.
tant que ça ne fonctionne pas, pas la peine d'aller chercher plus loin.
Sur la [page 2 de la documentation](https://jr-international.fr/kiosque/notices/C5251%20FR%20NOT.pdf) vous avez quelques réglages et choix à effectuer. comment tout cela est il configuré?
hello
je suis chagriné par ton cablage du signal insertcoin
ton monnayeur sort une impulsion en 12 V avec lequel tu commandes un relais en 12 V : c'est ok
ensuite, le commun des contacts est relié au 5 V : c'est ok
ton contact travail envoie du 5V sur l'entrée 13: c'est ok.
ce qui me gene:
ton contact repos n'envoie pas de 0V sur la 'entrée 13 et celle ci est configurée en INPUT_PULLUP.
donc s'il n'y a pas de signal appliqué, elle est au 5 V.
en résumé, signal ou pas, elle est toujours au 5 V.
de plus, dans ton programme, tu testes si l'entrée 13 est à 0V.
il faut :
mettre le commun des contacts du relais sur l'entrée 13
mettre le contact travail sur le 5 volts
mettre le contact repos sur le GND