Bonjour
Merci; Il est vrai que j'avais omis d'ajouter l'alimentation sur mon schéma comme ceci:
Lorsque j'ai ajouté l'"include" et modifié les deux lignes des boutons 3 et 4 sans rien changer au montage, les moteurs ont fonctionnés au départ comme voulu puis ont cessés de tourner.
#include "MTulnStepper.h" // Voir http://arduino.dansetrad.fr/MTobjects
#include "MTbutton.h" // Voir http://arduino.dansetrad.fr/MTobjects
#include "MTcheckButton.h" // Voir http://arduino.dansetrad.fr/MTobjects
int goutte=500;
int pinBoutonTreize=13;
int pinBoutonQuatre=4;
int pinBoutonTrois=3;
int pinBoutonDeux=2;
const byte pinPotRouge = A1;
const byte pinPotBleu = A2;
const int minPotRouge = 0;
const int maxPotRouge = 1023;
const int minPotBleu = 0;
const int maxPotBleu = 1023;
// Le moteur mpap1
MTulnStepper mpap1(pin_A1 9, pin_B1 10, pin_A2 11, pin_B2 6, PAS_ENTIERS, 4000 micro_secondes_par_pas);
// Le moteur mpap2
MTulnStepper mpap2(pin_A1 7, pin_B1 8, pin_A2 12, pin_B2 5, PAS_ENTIERS, 4000 micro_secondes_par_pas);
int ratio(int nb1, int nb2) {
if ((nb1 == 0) && (nb2 == 0)) return 0;
return (100.0 * nb1) / (nb1 + nb2);
}
void avance(void)
{
mpap1.move(500);
}
void avance2(void){
mpap2.move(500);
}
void marcheMpap1(void)
{
mpap1.move(CONTINUE);
mpap2.move(CONTINUE);
}
void arretMpap1(void){
mpap1.stop();
mpap2.stop();
}
void marcheMpap2(void)
{
mpap1.move(-CONTINUE);
mpap2.move(-CONTINUE);
}
void arretMpap2(void){
mpap1.stop();
mpap2.stop();
}
MTbutton Bouton(pinBoutonTreize, avance);
MTbutton Bouton2(pinBoutonQuatre, avance2);
MTcheckButton Bouton3(pinBoutonTrois, marcheMpap1, arretMpap1);
MTcheckButton Bouton4(pinBoutonDeux, marcheMpap2, arretMpap2);
void setup(){
// put your setup code here, to run once:
Serial.begin(115200);
pinMode(pinBoutonTreize, INPUT);
}
void loop(){
int bleu = constrain(map(analogRead(pinPotBleu), minPotBleu, maxPotBleu, 0, 100), 0, 100);
int rouge = constrain(map(analogRead(pinPotRouge), minPotRouge, maxPotRouge, 0, 100), 0, 100);
Serial.print("Rouge: "); Serial.print(ratio(bleu, rouge)); Serial.print("%\t");
Serial.print("Bleu: "); Serial.print(ratio(rouge, bleu)); Serial.println("%");
delay(500);
}
J'ai alors modifié le câblage au niveau des boutons comme ceci:
Alors les moteurs se mettent tantôt à tourner d'un pas, tantôt à ignorer les pressions sur le boutons. Toujours avec le même câblage et en enlevant la ligne:
pinMode(pinBoutonTreize, INPUT);
Cette fois un des deux moteurs se met à tourner à l'infini sans qu'on ne lui demande rien et l'autre attend un appui d'un des deux boutons pour tourner que d'un seul pas.
J'essai d'ajouter la ligne suivante pour activer la résistance interne:
pinMode(pinBoutonTreize, INPUT_PULLUP);
Mais les moteurs ont un comportement étrange sur les deux boutons 3 et 4: Ils mettent du temps avant d'écouter le deuxième appui, ils changent de sens de rotation, l'arduino s'éteint parfois, la led TX de l'arduino se met à clignoter, etc.
#include "MTulnStepper.h" // Voir http://arduino.dansetrad.fr/MTobjects
#include "MTbutton.h" // Voir http://arduino.dansetrad.fr/MTobjects
#include "MTcheckButton.h" // Voir http://arduino.dansetrad.fr/MTobjects
int goutte=500;
int pinBoutonTreize=13;
int pinBoutonQuatre=4;
int pinBoutonTrois=3;
int pinBoutonDeux=2;
const byte pinPotRouge = A1;
const byte pinPotBleu = A2;
const int minPotRouge = 0;
const int maxPotRouge = 1023;
const int minPotBleu = 0;
const int maxPotBleu = 1023;
// Le moteur mpap1
MTulnStepper mpap1(pin_A1 9, pin_B1 10, pin_A2 11, pin_B2 6, PAS_ENTIERS, 4000 micro_secondes_par_pas);
// Le moteur mpap2
MTulnStepper mpap2(pin_A1 7, pin_B1 8, pin_A2 12, pin_B2 5, PAS_ENTIERS, 4000 micro_secondes_par_pas);
int ratio(int nb1, int nb2) {
if ((nb1 == 0) && (nb2 == 0)) return 0;
return (100.0 * nb1) / (nb1 + nb2);
}
void avance(void)
{
mpap1.move(500);
}
void avance2(void){
mpap2.move(500);
}
void marcheMpap1(void)
{
mpap1.move(CONTINUE);
mpap2.move(CONTINUE);
}
void arretMpap1(void){
mpap1.stop();
mpap2.stop();
}
void marcheMpap2(void)
{
mpap1.move(-CONTINUE);
mpap2.move(-CONTINUE);
}
void arretMpap2(void){
mpap1.stop();
mpap2.stop();
}
MTbutton Bouton(pinBoutonTreize, avance);
MTbutton Bouton2(pinBoutonQuatre, avance2);
MTcheckButton Bouton3(pinBoutonTrois, marcheMpap1, arretMpap1);
MTcheckButton Bouton4(pinBoutonDeux, marcheMpap2, arretMpap2);
void setup(){
// put your setup code here, to run once:
Serial.begin(115200);
pinMode(pinBoutonTreize, INPUT_PULLUP);
}
void loop(){
int bleu = constrain(map(analogRead(pinPotBleu), minPotBleu, maxPotBleu, 0, 100), 0, 100);
int rouge = constrain(map(analogRead(pinPotRouge), minPotRouge, maxPotRouge, 0, 100), 0, 100);
Serial.print("Rouge: "); Serial.print(ratio(bleu, rouge)); Serial.print("%\t");
Serial.print("Bleu: "); Serial.print(ratio(rouge, bleu)); Serial.println("%");
delay(500);
}
Ensuite j'ai essayé un autre programme en ajoutant la ligne pour activer la résistance interne au cas ou ce ne serait pas fait avec la bibliothèque:
pinMode(pinBoutonTrois, INPUT_PULLUP);
Mais seuls les bouton 2 et 4 fonctionnent à peu près correctement
#include "MTulnStepper.h" // Voir http://arduino.dansetrad.fr/MTobjects
#include "MTbutton.h" // Voir http://arduino.dansetrad.fr/MTobjects
#include "MTcheckButton.h" // Voir http://arduino.dansetrad.fr/MTobjects
int goutte=500;
int pinBoutonTreize=13;
int pinBoutonQuatre=4;
int pinBoutonTrois=3;
int pinBoutonDeux=2;
const byte pinPotRouge = A1;
const byte pinPotBleu = A2;
const int minPotRouge = 0;
const int maxPotRouge = 1023;
const int minPotBleu = 0;
const int maxPotBleu = 1023;
// Le moteur mpap1
MTulnStepper mpap1(pin_A1 9, pin_B1 10, pin_A2 11, pin_B2 6, PAS_ENTIERS, 4000 micro_secondes_par_pas);
// Le moteur mpap2
MTulnStepper mpap2(pin_A1 7, pin_B1 8, pin_A2 12, pin_B2 5, PAS_ENTIERS, 4000 micro_secondes_par_pas);
int ratio(int nb1, int nb2) {
if ((nb1 == 0) && (nb2 == 0)) return 0;
return (100.0 * nb1) / (nb1 + nb2);
}
void avance(void)
{
mpap1.move(500);
}
void avance2(void){
mpap2.move(500);
}
void marcheMpap1(void)
{
mpap1.move(CONTINUE);
mpap2.move(CONTINUE);
}
void arretMpap1(void){
mpap1.stop();
mpap2.stop();
}
void marcheMpap2(void)
{
mpap1.move(-CONTINUE);
mpap2.move(-CONTINUE);
}
void arretMpap2(void){
mpap1.stop();
mpap2.stop();
}
MTbutton Bouton(pinBoutonTreize, avance);
MTbutton Bouton2(pinBoutonQuatre, avance2);
MTcheckButton Bouton3(pinBoutonTrois, marcheMpap1, arretMpap1);
MTcheckButton Bouton4(pinBoutonDeux, marcheMpap2, arretMpap2);
void setup(){
// put your setup code here, to run once:
Serial.begin(115200);
pinMode(pinBoutonTreize, INPUT_PULLUP);
pinMode(pinBoutonTrois, INPUT_PULLUP);
}
void loop(){
int bleu = constrain(map(analogRead(pinPotBleu), minPotBleu, maxPotBleu, 0, 100), 0, 100);
int rouge = constrain(map(analogRead(pinPotRouge), minPotRouge, maxPotRouge, 0, 100), 0, 100);
Serial.print("Rouge: "); Serial.print(ratio(bleu, rouge)); Serial.print("%\t");
Serial.print("Bleu: "); Serial.print(ratio(rouge, bleu)); Serial.println("%");
delay(500);
}
Qu'ai je fait d'incorrect ? Merci d'avance
Cordialement