bonjour a tous
j'ai pour projet de faire un lance grenade multiple ligne téléguidé servant pour des scénario mais aussi pour de l'attaque défense.
A l'aide d'un arduino et plusieurs composant je realise ce modele en 9 tir au lieu de 15 malheureusement pas fort en arduino
si quelqu'un peut m'aider a corriger mon code sa serai plus facile svp
#include
#include
Servo servo1;
Servo servo2;
Servo servo3;
Servo servo4;
Servo servo5;
Servo servo6;
Servo servo7;
Servo servo8;
Servo servo9;
bool infoDisplayed = false; // Indique si les informations ont été affichées
int infraredLED = 13; // Pin pour la source de lumière infrarouge (exemple)
int currentServo = 0; // Indice du servomoteur actuel (0, 1, ou 2)
bool allServosActivated = false; // Indique si tous les servomoteurs ont été activés
Servo servoHorizontal;
Servo servoVertical;
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
int joystickX;
int joystickY;
int buttonPin[1, 2, 3, 4, 5, 6] = {6, 7, 8, 9, 10, 13}; // Pins des boutons
int buttonState[1, 2, 3, 4, 5, 6] = {HIGH, HIGH, HIGH, HIGH, HIGH, HIGH};
int lastButtonState[1, 2, 3, 4, 5, 6] = {HIGH, HIGH, HIGH, HIGH, HIGH, HIGH};
void setup() {
servoHorizontal.attach(9);
servoVertical.attach(10);
Serial.begin(9600); // Démarrez la communication série (pour afficher les informations)
lcd.begin(16, 2);
lcd.print("Camera Control");
servo1.attach(3); // Connectez le premier servo à la broche 3
servo2.attach(4); // Connectez le deuxieme servo à la broche 4
servo3.attach(5); // Connectez le troisieme servo à la broche 5
servo4.attach(6); // Connectez le quatrieme servo à la broche 6
servo5.attach(7); // Connectez le cinquieme servo à la broche 7
servo6.attach(; // Connectez le sixieme servo à la broche 8
servo7.attach(9); // Connectez le septieme servo à la broche 9
servo8.attach(10); // Connectez le huitieme servo à la broche 10
servo9.attach(11); // Connectez le neuvieme servo à la broche 11
pinMode(buttonPin[i], INPUT_PULLUP); // Configurez le bouton-poussoir en entrée avec résistance pull-up
pinMode(infraredLED, OUTPUT); // Configurez la source de lumière infrarouge en sortie
digitalWrite(infraredLED, LOW); // Éteignez la lumière infrarouge au démarrage
Serial.begin(9600); // Démarrez la communication série (pour afficher l'état de la vision nocturne)
for (int i = 0; i < 9; i++) {
servos[i].attach(i + 3); // Attachez les servomoteurs aux broches de 3 à 11
pinMode(buttonPin, INPUT_PULLUP); // Configurez le bouton-poussoir en entrée avec résistance pull-up
joystickX = analogRead(A0);
joystickY = analogRead(A1);
}
}
}
void loop() {
// Lire l'état des boutons
for (int i = 0; i < 6; i++) {
buttonState[1] = digitalRead(buttonPin[1]);
// Si le bouton est enfoncé et l'état précédent était relâché
if (buttonState[1] == LOW && lastButtonState[1] == HIGH) {
handleButtonPress(1);
}
lastButtonState[1] = buttonState[1];
}
// Contrôler les moteurs de la caméra avec le joystick
int horizontalAngle = map(joystickX, 0, 1023, 0, 180);
int verticalAngle = map(joystickY, 0, 1023, 0, 180);
servoHorizontal.write(horizontalAngle);
servoVertical.write(verticalAngle);
}
void handleButtonPress(int buttonIndex) {
// Réagir aux actions des boutons ici
switch (buttonIndex) {
case 0:
// Lire l'état du bouton
int buttonState = digitalRead(1);
// Si le bouton est enfoncé et l'état précédent était relâché
if (buttonState == LOW) {
if (!allServosActivated) {
// Incrémentation de l'indice du servomoteur
currentServo++;
// Si l'indice dépasse 2 (3 servomoteurs au total), revenez au premier servomoteur
if (currentServo > 2) {
currentServo = 0;
allServosActivated = true; // Tous les servomoteurs ont été activés
}
// Effectuez l'action du servomoteur actuel en fonction de l'indice
activateCurrentServo(1, 2, 3);
} else {
// Si tous les servomoteurs ont été activés, réinitialisez-les
resetAllServos(1, 2, 3);
allServosActivated = false; // Réinitialisation de l'indicateur
}
// Attendez un peu pour éviter les pressions multiples
delay(1000);
}
}
void activateCurrentServo() {
// Activez le servomoteur actuel
switch (currentServo) {
case 0:
moveServo1(0);
break;
case 1:
moveServo2(0);
break;
case 2:
moveServo3(0);
break;
}
}
void moveServo1(3) {
// Code pour déplacer le premier servomoteur
servo1.write(90); // Angle de 90 degrés (à adapter selon vos besoins)
delay(1000); // Délai pour maintenir la position du servo
servo1.write(0); // Ramenez le servo à la position initiale
}
void moveServo2(4) {
// Code pour déplacer le deuxième servomoteur
servo2.write(90); // Angle de 90 degrés (à adapter selon vos besoins)
delay(1000); // Délai pour maintenir la position du servo
servo2.write(0); // Ramenez le servo à la position initiale
}
void moveServo3(5) {
// Code pour déplacer le troisième servomoteur
servo3.write(90); // Angle de 90 degrés (à adapter selon vos besoins)
delay(1000); // Délai pour maintenir la position du servo
servo3.write(0); // Ramenez le servo à la position initiale
}
void resetAllServos(3, 4, 5) {
// Réinitialisez tous les servomoteurs à leur position initiale
servo1.write(0);
servo2.write(0);
servo3.write(0);
}// Code pour le premier bouton
break;
case 1:
// Lire l'état du bouton
int buttonState = digitalRead(2);
// Si le bouton est enfoncé et l'état précédent était relâché
if (buttonState == LOW) {
if (!allServosActivated) {
// Incrémentation de l'indice du servomoteur
currentServo++;
// Si l'indice dépasse 2 (3 servomoteurs au total), revenez au premier servomoteur
if (currentServo > 2) {
currentServo = 0;
allServosActivated = true; // Tous les servomoteurs ont été activés
}
// Effectuez l'action du servomoteur actuel en fonction de l'indice
activateCurrentServo(4, 5, 6);
} else {
// Si tous les servomoteurs ont été activés, réinitialisez-les
resetAllServos(4, 5, 6);
allServosActivated = false; // Réinitialisation de l'indicateur
}
// Attendez un peu pour éviter les pressions multiples
delay(1000);
}
}
void activateCurrentServo() {
// Activez le servomoteur actuel
switch (currentServo) {
case 0:
moveServo4(0);
break;
case 1:
moveServo5(0);
break;
case 2:
moveServo6(0);
break;
}
}
void moveServo4(6) {
// Code pour déplacer le premier servomoteur
servo4.write(90); // Angle de 90 degrés (à adapter selon vos besoins)
}
void moveServo5(7) {
// Code pour déplacer le deuxième servomoteur
servo5.write(90); // Angle de 90 degrés (à adapter selon vos besoins)
}
void moveServo6( {
// Code pour déplacer le troisième servomoteur
servo6.write(90); // Angle de 90 degrés (à adapter selon vos besoins)
}
void resetAllServos(6, 7, {
// Réinitialisez tous les servomoteurs à leur position initiale
servo4.write(0);
servo5.write(0);
servo6.write(0);
}
// Code pour le deuxième bouton
break;
case 2:
// Lire l'état du bouton
int buttonState = digitalRead(2);
// Si le bouton est enfoncé et l'état précédent était relâché
if (buttonState == LOW) {
if (!allServosActivated) {
// Incrémentation de l'indice du servomoteur
currentServo++;
// Si l'indice dépasse 2 (3 servomoteurs au total), revenez au premier servomoteur
if (currentServo > 2) {
currentServo = 0;
allServosActivated = true; // Tous les servomoteurs ont été activés
}
// Effectuez l'action du servomoteur actuel en fonction de l'indice
activateCurrentServo();
} else {
// Si tous les servomoteurs ont été activés, réinitialisez-les
resetAllServos();
allServosActivated = false; // Réinitialisation de l'indicateur
}
// Attendez un peu pour éviter les pressions multiples
delay(1000);
}
}
void activateCurrentServo() {
// Activez le servomoteur actuel
switch (currentServo) {
case 0:
moveServo7(0);
break;
case 1:
moveServo8(0);
break;
case 2:
moveServo9(0);
break;
}
}
void moveServo7(9) {
// Code pour déplacer le premier servomoteur
servo7.write(90); // Angle de 90 degrés (à adapter selon vos besoins)
}
void moveServo8(10) {
// Code pour déplacer le deuxième servomoteur
servo8.write(90); // Angle de 90 degrés (à adapter selon vos besoins)
}
void moveServo9(11) {
// Code pour déplacer le troisième servomoteur
servo9.write(90); // Angle de 90 degrés (à adapter selon vos besoins)
}
void resetAllServos(9, 10, 11) {
// Réinitialisez tous les servomoteurs à leur position initiale
servo7.write(0);
servo8.write(0);
servo9.write(0);
}
// Code pour le troisième bouton
break;
case 3:
// Lire l'état du bouton
int buttonState = digitalRead(3);
// Si le bouton est enfoncé et l'état précédent était relâché
if (buttonState == LOW) {
// Déplacez le servomoteur actuel à une position spécifique
moveCurrentServo(0);
// Passez au servomoteur suivant
currentServo++;
// Si l'indice dépasse 8 (9 servomoteurs au total), revenez au premier servomoteur
if (currentServo > {
currentServo = 0;
}
// Attendez un peu pour éviter les pressions multiples
delay(1000);
}
}
void moveCurrentServo(0) {
// Code pour déplacer le servomoteur actuel à une position spécifique
int servoPosition = 90; // Angle de 90 degrés (à adapter selon vos besoins)
servos[1, 2, 3, 4, 5, 6, 7, 8, 9].write(10);
}
// Code pour le quatrième bouton
break;
case 4:
// Lire l'état du bouton
int buttonState = digitalRead(buttonPin);
// Si le bouton est enfoncé et l'état précédent était relâché
if (buttonState == LOW) {
// Inversez l'état de la vision nocturne (activée/désactivée) lorsque le bouton est pressé
nightVisionActive = !nightVisionActive;
// Activez ou désactivez la source de lumière infrarouge en fonction de l'état de la vision nocturne
if (nightVisionActive) {
digitalWrite(infraredLED, HIGH); // Allumez la lumière infrarouge
} else {
digitalWrite(infraredLED, LOW); // Éteignez la lumière infrarouge
}
// Affichez l'état de la vision nocturne
Serial.print("Vision nocturne ");
Serial.println(nightVisionActive ? "activée" : "désactivée");
// Attendez un peu pour éviter les pressions multiples
delay(1000);
}
// Code pour le cinquième bouton
break;
case 5:
// Lire l'état du bouton
int buttonState = digitalRead(buttonPin);
// Si le bouton est enfoncé et l'état précédent était relâché
if (buttonState == LOW) {
// Affichez les informations si elles n'ont pas encore été affichées
if (!infoDisplayed) {
displayInfo();
infoDisplayed = true; // Indiquez que les informations ont été affichées
}
} else {
infoDisplayed = false; // Réinitialisez l'indicateur lorsque le bouton est relâché
}
}
void displayInfo() {
// Affichez ici les informations que vous souhaitez montrer
Serial.println("Informations Arduino :");
Serial.println("Version du logiciel : 1.0");
Serial.println("État des servomoteurs : OK");
// Ajoutez d'autres informations pertinentes
}
Ce code configure un bouton-poussoir sur la broche 2 de l'Arduino et utilise la communication série (via le port série USB) pour afficher des informations lorsque le bouton est pressé. Lorsque le bouton est enfoncé, les informations sont affichées une fois, puis l'indicateur infoDisplayed est activé pour éviter une répétition.
Vous pouvez personnaliser la fonction displayInfo() pour afficher les informations spécifiques que vous souhaitez sur votre Arduino. Une fois que vous avez téléversé ce code sur votre Arduino et ouvert le moniteur série dans l'IDE Arduino (à 9600 bauds), vous pourrez voir les informations lorsque vous appuierez sur le bouton.
// Code pour le sixième bouton
break;
}
}
j'ai pour projet de faire un lance grenade multiple ligne téléguidé servant pour des scénario mais aussi pour de l'attaque défense.
A l'aide d'un arduino et plusieurs composant je realise ce modele en 9 tir au lieu de 15 malheureusement pas fort en arduino
si quelqu'un peut m'aider a corriger mon code sa serai plus facile svp
#include
#include
Servo servo1;
Servo servo2;
Servo servo3;
Servo servo4;
Servo servo5;
Servo servo6;
Servo servo7;
Servo servo8;
Servo servo9;
bool infoDisplayed = false; // Indique si les informations ont été affichées
int infraredLED = 13; // Pin pour la source de lumière infrarouge (exemple)
int currentServo = 0; // Indice du servomoteur actuel (0, 1, ou 2)
bool allServosActivated = false; // Indique si tous les servomoteurs ont été activés
Servo servoHorizontal;
Servo servoVertical;
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
int joystickX;
int joystickY;
int buttonPin[1, 2, 3, 4, 5, 6] = {6, 7, 8, 9, 10, 13}; // Pins des boutons
int buttonState[1, 2, 3, 4, 5, 6] = {HIGH, HIGH, HIGH, HIGH, HIGH, HIGH};
int lastButtonState[1, 2, 3, 4, 5, 6] = {HIGH, HIGH, HIGH, HIGH, HIGH, HIGH};
void setup() {
servoHorizontal.attach(9);
servoVertical.attach(10);
Serial.begin(9600); // Démarrez la communication série (pour afficher les informations)
lcd.begin(16, 2);
lcd.print("Camera Control");
servo1.attach(3); // Connectez le premier servo à la broche 3
servo2.attach(4); // Connectez le deuxieme servo à la broche 4
servo3.attach(5); // Connectez le troisieme servo à la broche 5
servo4.attach(6); // Connectez le quatrieme servo à la broche 6
servo5.attach(7); // Connectez le cinquieme servo à la broche 7
servo6.attach(; // Connectez le sixieme servo à la broche 8
servo7.attach(9); // Connectez le septieme servo à la broche 9
servo8.attach(10); // Connectez le huitieme servo à la broche 10
servo9.attach(11); // Connectez le neuvieme servo à la broche 11
pinMode(buttonPin[i], INPUT_PULLUP); // Configurez le bouton-poussoir en entrée avec résistance pull-up
pinMode(infraredLED, OUTPUT); // Configurez la source de lumière infrarouge en sortie
digitalWrite(infraredLED, LOW); // Éteignez la lumière infrarouge au démarrage
Serial.begin(9600); // Démarrez la communication série (pour afficher l'état de la vision nocturne)
for (int i = 0; i < 9; i++) {
servos[i].attach(i + 3); // Attachez les servomoteurs aux broches de 3 à 11
pinMode(buttonPin, INPUT_PULLUP); // Configurez le bouton-poussoir en entrée avec résistance pull-up
joystickX = analogRead(A0);
joystickY = analogRead(A1);
}
}
}
void loop() {
// Lire l'état des boutons
for (int i = 0; i < 6; i++) {
buttonState[1] = digitalRead(buttonPin[1]);
// Si le bouton est enfoncé et l'état précédent était relâché
if (buttonState[1] == LOW && lastButtonState[1] == HIGH) {
handleButtonPress(1);
}
lastButtonState[1] = buttonState[1];
}
// Contrôler les moteurs de la caméra avec le joystick
int horizontalAngle = map(joystickX, 0, 1023, 0, 180);
int verticalAngle = map(joystickY, 0, 1023, 0, 180);
servoHorizontal.write(horizontalAngle);
servoVertical.write(verticalAngle);
}
void handleButtonPress(int buttonIndex) {
// Réagir aux actions des boutons ici
switch (buttonIndex) {
case 0:
// Lire l'état du bouton
int buttonState = digitalRead(1);
// Si le bouton est enfoncé et l'état précédent était relâché
if (buttonState == LOW) {
if (!allServosActivated) {
// Incrémentation de l'indice du servomoteur
currentServo++;
// Si l'indice dépasse 2 (3 servomoteurs au total), revenez au premier servomoteur
if (currentServo > 2) {
currentServo = 0;
allServosActivated = true; // Tous les servomoteurs ont été activés
}
// Effectuez l'action du servomoteur actuel en fonction de l'indice
activateCurrentServo(1, 2, 3);
} else {
// Si tous les servomoteurs ont été activés, réinitialisez-les
resetAllServos(1, 2, 3);
allServosActivated = false; // Réinitialisation de l'indicateur
}
// Attendez un peu pour éviter les pressions multiples
delay(1000);
}
}
void activateCurrentServo() {
// Activez le servomoteur actuel
switch (currentServo) {
case 0:
moveServo1(0);
break;
case 1:
moveServo2(0);
break;
case 2:
moveServo3(0);
break;
}
}
void moveServo1(3) {
// Code pour déplacer le premier servomoteur
servo1.write(90); // Angle de 90 degrés (à adapter selon vos besoins)
delay(1000); // Délai pour maintenir la position du servo
servo1.write(0); // Ramenez le servo à la position initiale
}
void moveServo2(4) {
// Code pour déplacer le deuxième servomoteur
servo2.write(90); // Angle de 90 degrés (à adapter selon vos besoins)
delay(1000); // Délai pour maintenir la position du servo
servo2.write(0); // Ramenez le servo à la position initiale
}
void moveServo3(5) {
// Code pour déplacer le troisième servomoteur
servo3.write(90); // Angle de 90 degrés (à adapter selon vos besoins)
delay(1000); // Délai pour maintenir la position du servo
servo3.write(0); // Ramenez le servo à la position initiale
}
void resetAllServos(3, 4, 5) {
// Réinitialisez tous les servomoteurs à leur position initiale
servo1.write(0);
servo2.write(0);
servo3.write(0);
}// Code pour le premier bouton
break;
case 1:
// Lire l'état du bouton
int buttonState = digitalRead(2);
// Si le bouton est enfoncé et l'état précédent était relâché
if (buttonState == LOW) {
if (!allServosActivated) {
// Incrémentation de l'indice du servomoteur
currentServo++;
// Si l'indice dépasse 2 (3 servomoteurs au total), revenez au premier servomoteur
if (currentServo > 2) {
currentServo = 0;
allServosActivated = true; // Tous les servomoteurs ont été activés
}
// Effectuez l'action du servomoteur actuel en fonction de l'indice
activateCurrentServo(4, 5, 6);
} else {
// Si tous les servomoteurs ont été activés, réinitialisez-les
resetAllServos(4, 5, 6);
allServosActivated = false; // Réinitialisation de l'indicateur
}
// Attendez un peu pour éviter les pressions multiples
delay(1000);
}
}
void activateCurrentServo() {
// Activez le servomoteur actuel
switch (currentServo) {
case 0:
moveServo4(0);
break;
case 1:
moveServo5(0);
break;
case 2:
moveServo6(0);
break;
}
}
void moveServo4(6) {
// Code pour déplacer le premier servomoteur
servo4.write(90); // Angle de 90 degrés (à adapter selon vos besoins)
}
void moveServo5(7) {
// Code pour déplacer le deuxième servomoteur
servo5.write(90); // Angle de 90 degrés (à adapter selon vos besoins)
}
void moveServo6( {
// Code pour déplacer le troisième servomoteur
servo6.write(90); // Angle de 90 degrés (à adapter selon vos besoins)
}
void resetAllServos(6, 7, {
// Réinitialisez tous les servomoteurs à leur position initiale
servo4.write(0);
servo5.write(0);
servo6.write(0);
}
// Code pour le deuxième bouton
break;
case 2:
// Lire l'état du bouton
int buttonState = digitalRead(2);
// Si le bouton est enfoncé et l'état précédent était relâché
if (buttonState == LOW) {
if (!allServosActivated) {
// Incrémentation de l'indice du servomoteur
currentServo++;
// Si l'indice dépasse 2 (3 servomoteurs au total), revenez au premier servomoteur
if (currentServo > 2) {
currentServo = 0;
allServosActivated = true; // Tous les servomoteurs ont été activés
}
// Effectuez l'action du servomoteur actuel en fonction de l'indice
activateCurrentServo();
} else {
// Si tous les servomoteurs ont été activés, réinitialisez-les
resetAllServos();
allServosActivated = false; // Réinitialisation de l'indicateur
}
// Attendez un peu pour éviter les pressions multiples
delay(1000);
}
}
void activateCurrentServo() {
// Activez le servomoteur actuel
switch (currentServo) {
case 0:
moveServo7(0);
break;
case 1:
moveServo8(0);
break;
case 2:
moveServo9(0);
break;
}
}
void moveServo7(9) {
// Code pour déplacer le premier servomoteur
servo7.write(90); // Angle de 90 degrés (à adapter selon vos besoins)
}
void moveServo8(10) {
// Code pour déplacer le deuxième servomoteur
servo8.write(90); // Angle de 90 degrés (à adapter selon vos besoins)
}
void moveServo9(11) {
// Code pour déplacer le troisième servomoteur
servo9.write(90); // Angle de 90 degrés (à adapter selon vos besoins)
}
void resetAllServos(9, 10, 11) {
// Réinitialisez tous les servomoteurs à leur position initiale
servo7.write(0);
servo8.write(0);
servo9.write(0);
}
// Code pour le troisième bouton
break;
case 3:
// Lire l'état du bouton
int buttonState = digitalRead(3);
// Si le bouton est enfoncé et l'état précédent était relâché
if (buttonState == LOW) {
// Déplacez le servomoteur actuel à une position spécifique
moveCurrentServo(0);
// Passez au servomoteur suivant
currentServo++;
// Si l'indice dépasse 8 (9 servomoteurs au total), revenez au premier servomoteur
if (currentServo > {
currentServo = 0;
}
// Attendez un peu pour éviter les pressions multiples
delay(1000);
}
}
void moveCurrentServo(0) {
// Code pour déplacer le servomoteur actuel à une position spécifique
int servoPosition = 90; // Angle de 90 degrés (à adapter selon vos besoins)
servos[1, 2, 3, 4, 5, 6, 7, 8, 9].write(10);
}
// Code pour le quatrième bouton
break;
case 4:
// Lire l'état du bouton
int buttonState = digitalRead(buttonPin);
// Si le bouton est enfoncé et l'état précédent était relâché
if (buttonState == LOW) {
// Inversez l'état de la vision nocturne (activée/désactivée) lorsque le bouton est pressé
nightVisionActive = !nightVisionActive;
// Activez ou désactivez la source de lumière infrarouge en fonction de l'état de la vision nocturne
if (nightVisionActive) {
digitalWrite(infraredLED, HIGH); // Allumez la lumière infrarouge
} else {
digitalWrite(infraredLED, LOW); // Éteignez la lumière infrarouge
}
// Affichez l'état de la vision nocturne
Serial.print("Vision nocturne ");
Serial.println(nightVisionActive ? "activée" : "désactivée");
// Attendez un peu pour éviter les pressions multiples
delay(1000);
}
// Code pour le cinquième bouton
break;
case 5:
// Lire l'état du bouton
int buttonState = digitalRead(buttonPin);
// Si le bouton est enfoncé et l'état précédent était relâché
if (buttonState == LOW) {
// Affichez les informations si elles n'ont pas encore été affichées
if (!infoDisplayed) {
displayInfo();
infoDisplayed = true; // Indiquez que les informations ont été affichées
}
} else {
infoDisplayed = false; // Réinitialisez l'indicateur lorsque le bouton est relâché
}
}
void displayInfo() {
// Affichez ici les informations que vous souhaitez montrer
Serial.println("Informations Arduino :");
Serial.println("Version du logiciel : 1.0");
Serial.println("État des servomoteurs : OK");
// Ajoutez d'autres informations pertinentes
}
Ce code configure un bouton-poussoir sur la broche 2 de l'Arduino et utilise la communication série (via le port série USB) pour afficher des informations lorsque le bouton est pressé. Lorsque le bouton est enfoncé, les informations sont affichées une fois, puis l'indicateur infoDisplayed est activé pour éviter une répétition.
Vous pouvez personnaliser la fonction displayInfo() pour afficher les informations spécifiques que vous souhaitez sur votre Arduino. Une fois que vous avez téléversé ce code sur votre Arduino et ouvert le moniteur série dans l'IDE Arduino (à 9600 bauds), vous pourrez voir les informations lorsque vous appuierez sur le bouton.
// Code pour le sixième bouton
break;
}
}