Bonjours
Mon projet et de faire un drone téléguider.
J'ai donc fait mon programme pour me déplacer qui marche bien mais les profs mon demander de faire une variation de vitesse mais je n'arrive pas modifier mon programme pour l'intégrer.
Je connais le fonctionnement du PWM mais après plusieur test je ne trouve pas de solution.
const byte PIN_VITESSE_MOTEUR_A = 3;
const byte PIN_SENS_MOTEUR_A = 12;
const byte PIN_FREIN_MOTEUR_A = 9;
const byte PIN_VITESSE_MOTEUR_B = 11;
const byte PIN_SENS_MOTEUR_B = 13;
const byte PIN_FREIN_MOTEUR_B = 8;
int TEST;
const byte PIN_JOYSTICK_X = A2;
const byte PIN_JOYSTICK_Y = A3;
const byte PIN_JOYSTICK_Z = A4; // Bouton, pas potentiomètre /!\
// Variables "axe1Joystick" et "axe2Joystick": pas besoin d'avoir des variables globales
void setup() {
Serial.begin(115200);
pinMode(PIN_VITESSE_MOTEUR_A, OUTPUT);
digitalWrite(PIN_VITESSE_MOTEUR_A, LOW);
pinMode(PIN_VITESSE_MOTEUR_B, OUTPUT);
digitalWrite(PIN_VITESSE_MOTEUR_B, LOW);
pinMode(PIN_SENS_MOTEUR_A, OUTPUT);
digitalWrite(PIN_SENS_MOTEUR_A, LOW);
pinMode(PIN_SENS_MOTEUR_B, OUTPUT);
digitalWrite(PIN_SENS_MOTEUR_B, LOW);
pinMode(PIN_FREIN_MOTEUR_A, OUTPUT);
digitalWrite(PIN_FREIN_MOTEUR_A, LOW);
pinMode(PIN_FREIN_MOTEUR_B, OUTPUT);
digitalWrite(PIN_FREIN_MOTEUR_B, LOW);
pinMode(PIN_JOYSTICK_Z, INPUT_PULLUP); // L'activation de la résistance de tirage est obligatoire pour le bouton poussoir en Z sinon les valeurs lues seront aléatoires.
}
void loop() {
int joystickX = analogRead(PIN_JOYSTICK_X);
int joystickY = analogRead(PIN_JOYSTICK_Y);
byte joystickZ = digitalRead(PIN_JOYSTICK_Z);
if (joystickZ == LOW) {
// Si le bouton Z est actif les moteurs sont éteints
digitalWrite(PIN_VITESSE_MOTEUR_A, LOW);
digitalWrite(PIN_VITESSE_MOTEUR_B, LOW);
}
else { // Sinon, si le bouton Z n'est pas actif
if (joystickX > 700) { //AVANCE
// Si la valeur X est strictement supérieur à 700 le moteur A avance
digitalWrite(PIN_VITESSE_MOTEUR_B, HIGH);
digitalWrite(PIN_SENS_MOTEUR_B, HIGH);
digitalWrite(PIN_VITESSE_MOTEUR_A, HIGH);
digitalWrite(PIN_SENS_MOTEUR_A, LOW);
TEST = 1;
}
else if (joystickX < 300) { //RECULER
// Sinon si la valeur X est strictement inférieur à 300 le moteur A recule
digitalWrite(PIN_VITESSE_MOTEUR_B, HIGH);
digitalWrite(PIN_SENS_MOTEUR_B, LOW);
digitalWrite(PIN_VITESSE_MOTEUR_A,HIGH);
digitalWrite(PIN_SENS_MOTEUR_A, HIGH);
TEST = 1;
}
else {
// Sinon si la valeur X est comprise entre 300 et 700 (bornes inclusent) le moteur A ne bouge pas
digitalWrite(PIN_VITESSE_MOTEUR_A, LOW);
digitalWrite(PIN_VITESSE_MOTEUR_B, LOW);
}
if (joystickY > 700) { // fait tourner le drone
// Si la valeur Y est strictement supérieur à 700 le moteur B avance
digitalWrite(PIN_VITESSE_MOTEUR_B,HIGH);
digitalWrite(PIN_SENS_MOTEUR_B, HIGH);
digitalWrite(PIN_VITESSE_MOTEUR_A, HIGH);
digitalWrite(PIN_SENS_MOTEUR_A, HIGH);
TEST = 0;
}
else if (joystickY < 300) {
// Sinon si la valeur Y est strictement inférieur à 300 le moteur B recule
digitalWrite(PIN_VITESSE_MOTEUR_B, HIGH);
digitalWrite(PIN_SENS_MOTEUR_B, LOW);
digitalWrite(PIN_VITESSE_MOTEUR_A, HIGH);
digitalWrite(PIN_SENS_MOTEUR_A, LOW);
TEST = 0;
}
else {
if( TEST == 0 ){
// Sinon si la valeur Y est comprise entre 300 et 700 (bornes inclusent) le moteur B ne bouge pas
digitalWrite(PIN_VITESSE_MOTEUR_B,LOW);
}
}
}
}
Merci de vos future réponses