Bonjour,
Je suis en train de réaliser un robot avec des servomoteurs. Ces servomoteurs sont sur un joy-it motorino lui-même relié à une carte arduino uno. Des boutons reliés à la carte permettent de réaliser des actiond. Un premier bouton permet de lancer le programme. Celui-ci fonctionne. Cependant lorsquie j'intègre une autre fonction, le second bouton fonctionne pas ni même n'apparaît. J'ai essayé il fonctionne et est bien branché.
Pouvez-vous m'aider ?
Ci dessous le programme
#include <Wire.h>
#include <Adafruit_PWMServoDriver.h>
Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver();
#define SERVOMIN 150
#define SERVOMAX 600
#define USMIN 600
#define USMAX 2400
#define SERVO_FREQ 50
#define BUTTON_PIN_2 3
#define BUTTON_PIN_1 2
bool programmeEnCours = false;
void setup() {
Serial.begin(9600);
pinMode(BUTTON_PIN_2, INPUT_PULLUP);
pinMode(BUTTON_PIN_1, INPUT_PULLUP);
Serial.println("GRIDUS");
pwm.begin();
pwm.setOscillatorFrequency(27000000);
pwm.setPWMFreq(SERVO_FREQ);
}
void setServoPulse(uint8_t n, double pulse) {
double pulselength;
pulselength = 1000000;
pulselength /= SERVO_FREQ;
Serial.print(pulselength); Serial.println(" us per period");
pulselength /= 4096;
Serial.print(pulselength); Serial.println(" us per bit");
pulse *= 1000000;
pulse /= pulselength;
Serial.println(pulse);
pwm.setPWM(n, 0, pulse);
delay(100); // Attendre delayTime millisecondes après chaque position
}
void loop() {
int buttonState1 = digitalRead(BUTTON_PIN_1);
if (buttonState1 == LOW ) {
programmeEnCours = true;
delay(500);
// Démarrer le programme
Serial.println("Début du programme");
delay(500); // Délai pour éviter les rebonds du bouton
}
while (programmeEnCours == true) {
int buttonState2 = digitalRead(BUTTON_PIN_2);
if (buttonState2 == LOW ) {
programmeEnCours = false;
Serial.println("pause");
delay(500); // Délai pour éviter les rebonds du bouton
}
else {// Utilisation du canal 0 pour le servomoteur
uint8_t servoChannel = 0;
// Passage de 0 à 70 degrés
uint16_t targetAngle = 70;
uint16_t pulseValue = map(targetAngle, 0, 180, SERVOMIN, SERVOMAX);
pwm.setPWM(servoChannel, 0, pulseValue);
setServoPulse(servoChannel, pulseValue); // Attendre 10 millisecondes entre chaque position
delay(2000); // Attendre 2 secondes
// Utilisation du canal 1 pour le servomoteur
servoChannel = 1;
// Retour de passage de 0 à 10 degré
targetAngle = 10;
pulseValue = map(targetAngle, 0, 180, SERVOMIN, SERVOMAX);
pwm.setPWM(servoChannel, 0, pulseValue);
setServoPulse(servoChannel, pulseValue); // Attendre 10 millisecondes entre chaque position
// Utilisation du canal 2 pour le servomoteur
servoChannel = 2;
// Passage de 0 à 85 degré
targetAngle =85;
pulseValue = map(targetAngle, 0, 180, SERVOMIN, SERVOMAX);
pwm.setPWM(servoChannel, 0, pulseValue);
setServoPulse(servoChannel, pulseValue); // Attendre 10 millisecondes entre chaque position
delay(2000); // Attendre 2 secondes
// Utilisation du canal 1 pour le servomoteur
servoChannel = 1;
// Retour de 10 à 30 degré
targetAngle = 30;
pulseValue = map(targetAngle, 0, 180, SERVOMIN, SERVOMAX);
pwm.setPWM(servoChannel, 0, pulseValue);
setServoPulse(servoChannel, pulseValue); // Attendre 10 millisecondes entre chaque position
// Utilisation du canal 1 pour le servomoteur
servoChannel = 2;
// Passage de 85 à 100 degré
targetAngle = 100;
pulseValue = map(targetAngle, 0, 180, SERVOMIN, SERVOMAX);
pwm.setPWM(servoChannel, 0, pulseValue);
setServoPulse(servoChannel, pulseValue); // Attendre 10 millisecondes entre chaque position
// Utilisation du canal 0 pour le servomoteur
servoChannel = 0;
// Retour de 70 à 60 degré
targetAngle = 60;
pulseValue = map(targetAngle, 0, 180, SERVOMIN, SERVOMAX);
pwm.setPWM(servoChannel, 0, pulseValue);
setServoPulse(servoChannel, pulseValue); // Attendre 10 millisecondes entre chaque position
delay(2000); // Attendre 2 secondes
// Utilisation du canal 0 pour le servomoteur
servoChannel = 0;
// Retour de 60 à 0 degré
targetAngle = 0;
pulseValue = map(targetAngle, 0, 180, SERVOMIN, SERVOMAX);
pwm.setPWM(servoChannel, 0, pulseValue);
setServoPulse(servoChannel, pulseValue); // Attendre 10 millisecondes entre chaque position
delay(2000); // Attendre 2 secondes
// Utilisation du canal 2 pour le servomoteur
servoChannel = 2;
// Passage de 85 à 120 degré
targetAngle = 120;
pulseValue = map(targetAngle, 0, 180, SERVOMIN, SERVOMAX);
pwm.setPWM(servoChannel, 0, pulseValue);
setServoPulse(servoChannel, pulseValue); // Attendre 10 millisecondes entre chaque position
// Utilisation du canal 1 pour le servomoteur
servoChannel = 1;
// Retour de 0 à 0 degré
targetAngle = 30;
pulseValue = map(targetAngle, 0, 180, SERVOMIN, SERVOMAX);
pwm.setPWM(servoChannel, 0, pulseValue);
setServoPulse(servoChannel, pulseValue); // Attendre 10 millisecondes entre chaque position
Serial.println("FIN PROGRAMME");
delay(5000); // Attendre 5 secondes
programmeEnCours = false;
}
}
}