Contrôle de 2 servo nano nrf24l01 et stop des servo

pour ce que ca intéresse voici un code fonctionnelle pour contrôle 2 servo d'un support camera avec un joystick et nrf24l01 a distance , petit plus le bouton permet de bloquer la camera dans sa position et une simple pression le débloque

code TX

#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"

struct packet {
  byte posx;
  byte posy;
  byte button;  // Un seul bouton pour contrôler l'état
} State;

RF24 radio(9, 10);  // Pins CE, CSN pour le NRF24L01
#define MY_RF24_PA_LEVEL RF24_PA_HIGH
const uint64_t pipe = 0xE8E8F0F0E1LL;  // Adresse du canal de communication

unsigned long lastSend;
const unsigned int sendInterval = 50;  // Intervalle d'envoi en millisecondes

const byte button1Pin = A2;  // Un seul bouton utilisé pour le contrôle

void setup(void) {
  Serial.begin(9600);
  
  // Initialiser le bouton comme entrée avec résistance de pull-up
  pinMode(button1Pin, INPUT_PULLUP);  // Utilise la résistance interne de pull-up

  // Initialiser la communication radio
  radio.begin();
  radio.setPALevel(MY_RF24_PA_LEVEL);  // Définir le niveau de puissance
  radio.openWritingPipe(pipe);  // Ouvrir le pipe de communication pour l'envoi
}

void loop(void) {
  // Vérifier si l'intervalle d'envoi est atteint
  if (millis() - lastSend >= sendInterval) {
    lastSend = millis();

    // Lire la position du joystick
    State.posx = map(analogRead(A0), 0, 1023, 0, 140);  // Axe X du joystick
    State.posy = map(analogRead(A1), 0, 1023, 20, 180); // Axe Y du joystick

    // Lire l'état du bouton
    State.button = digitalRead(button1Pin);  // Lecture du bouton (état HIGH ou LOW)

    // Afficher les valeurs dans le moniteur série pour débogage
    Serial.print("X: ");
    Serial.print(State.posx);
    Serial.print(" Y: ");
    Serial.print(State.posy);
    Serial.print(" Button: ");
    Serial.println(State.button);

    // Envoyer les données via radio
    radio.write(&State, sizeof(State));
  }
}

code rx

#include <Servo.h>
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"

struct packet {
  byte posx;
  byte posy;
  byte button;  // Un seul bouton pour contrôler l'état
} State;

#define MY_RF24_PA_LEVEL RF24_PA_LOW
RF24 radio(9, 10);  // Pins CE, CSN pour le NRF24L01
const uint64_t pipe = 0xE8E8F0F0E1LL;  // Adresse du canal de communication

Servo myservo;
Servo myservo2;

const byte buttonPin = 2;  // Pin pour le bouton de contrôle (bloquer/débloquer les servos)
const byte LED1 = 6;       // Pin pour LED1
const byte LED2 = 7;       // Pin pour LED2

bool servosBlocked = false;  // État du blocage des servos
unsigned long lastButtonPress = 0;  // Variable pour éviter les appuis multiples du bouton
const unsigned long debounceDelay = 300;  // Temps de débounçage pour le bouton

void setup(void) {
  myservo.attach(4);  // Pin pour servo 1
  myservo2.attach(5); // Pin pour servo 2
  Serial.begin(9600);

  // Initialisation de la communication radio
  radio.begin();
  radio.openReadingPipe(1, pipe);  // Ouvrir le pipe en lecture
  radio.startListening();  // Commencer à écouter

  // Initialisation du bouton et des LEDs
  pinMode(buttonPin, INPUT_PULLUP);  // Utilisation de la résistance de pull-up interne pour le bouton
  pinMode(LED1, OUTPUT);
  pinMode(LED2, OUTPUT);
}

void loop(void) {
  // Vérifier si des données ont été reçues
  if (radio.available()) {
    // Lire les données reçues
    radio.read(&State, sizeof(State));

    // Affichage des données dans le moniteur série pour débogage
    Serial.print(State.posx);
    Serial.print(F(", "));
    Serial.print(State.posy);
    Serial.print(F(", "));
    Serial.println(State.button);

    // Vérifier l'état du bouton pour alterner entre bloqué et débloqué
    if (State.button == LOW && millis() - lastButtonPress > debounceDelay) {
      servosBlocked = !servosBlocked;  // Inverser l'état des servos
      lastButtonPress = millis();  // Enregistrer le temps de la dernière pression
    }

    // Si les servos sont débloqués, les contrôler avec les valeurs du joystick
    if (!servosBlocked) {
      int mappedPosX = map(State.posx, 0, 140, 0, 180);  // Mapper l'axe X du joystick
      int mappedPosY = map(State.posy, 20, 180, 0, 180); // Mapper l'axe Y du joystick

      // Déplacer les servos
      myservo.write(mappedPosX);
      myservo2.write(mappedPosY);
    } else {
      // Si les servos sont bloqués, les maintenir dans leur position actuelle
      myservo.write(myservo.read());
      myservo2.write(myservo2.read());
    }

    // Gestion des LEDs : Allumer ou éteindre en fonction du bouton
    if (State.button == LOW) {
      digitalWrite(LED1, HIGH);  // Allumer LED1 si le bouton est pressé
      digitalWrite(LED2, HIGH);  // Allumer LED2 si le bouton est pressé
    } else {
      digitalWrite(LED1, LOW);   // Éteindre LED1 si le bouton est relâché
      digitalWrite(LED2, LOW);   // Éteindre LED2 si le bouton est relâché
    }
  }
}

comme je joystick a un retour au neutre ca me permet de bloquer la cam et utiliser la pince en FPV pour un meilleur visuelle et controle

Hello,

Une photo côté Rx et une côté Tx aurait aussi était sympa pour illustrer ton nouveau sujet.

Elles se trouvent où les Les 1 et 2 STP?

Monsieur est difficile, j'ai ajouter les photos post 1, j'ai ajouter une fonction klaxon avec un bouton supplémentaire et améliorer le controle ce sera une prochaine mise a jour du post :rofl:

Salut,

Non, c'est juste qu'étant donné que tu a crée un nouveau sujet, je me disais que ce serait cool (pour ceux qui n'ont pas lu le premier sujet où tu a mis toutes ces photos) de remettre dans ce nouveau sujet les photos de l'objet en question.

:roll_eyes:

C'est tout.

Je te taquine, j'ai pas de souci a partager même si c'est un vieux projet de grand enfant un peux fous😂

Moi aussi. :nerd_face:

Une question pour Monsieur le technicien explorateur.

Le bras caméra, mécanique, servos, ..., c'est ton invention ou un produit dit fini en vente chez les bons vendeurs?

En tout cas j'aime bien le côté débrouille multi carte Arduino.

C'est une façon de résoudre les probléme par morceaux, et d'avancer.

C'est sûr, un grand crack de l'info, celui qui réflechit et vérifie tout sur papier avant de commencer aurait sûrement tout mit sur une seule carte Arduino côté récepteur, avec 1 seul code.

c'est de l'invention en roue libre , en premier j'avais acheter une chenille de chez wich puis je me suis dit je veut en métal , tien je mettrai bien un bras, maintenant fpv ce serait cool, manque de lumière le soir et la dernière folie que serait un engin de chantier sans un pin pon :rofl:

c'est imagination en roue libre et non il volera pas c'est trop lourd :rofl:

je fait qqe recherche et j'adapte avec ou sans arduino

T'as plus qu'à y mettre une tondeuse pour faire tes bordures de pelouse ja nuit confortablement installée dans ton fauteuil.

Heu, mais laisse le chat en paix, pauvre bête :roll_eyes:

c'est lui qui vient vers le robot moi je ne fait que jouer avec :rofl: