Airsoft Krispies

Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
Airsoft Krispies

Bonjour à tous et bienvenue

Le Deal du moment : -40%
-40% sur le Pack Gaming Mario PDP Manette filaire + ...
Voir le deal
29.99 €

    NR-GLM 40MM SMOKE GRENADE LAUNCHER

    avatar
    Lechimistedu13


    Messages : 18
    Date d'inscription : 09/04/2023
    Age : 27
    Localisation : Marseille

    NR-GLM 40MM SMOKE GRENADE LAUNCHER Empty NR-GLM 40MM SMOKE GRENADE LAUNCHER

    Message par Lechimistedu13 Lun 11 Sep - 0:47

    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(Cool; // 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(Cool {
    // Code pour déplacer le troisième servomoteur
    servo6.write(90); // Angle de 90 degrés (à adapter selon vos besoins)
    }
    void resetAllServos(6, 7, Cool {
    // 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 > Cool {
    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;
    }
    }

      La date/heure actuelle est Mar 7 Mai - 13:14