AIDE-Commande RF Leds+servo

Bonjour a tous :wave:

Je réalise un projet sur le Terminator que je réalise en impression 3D comme ceci,
T-800
Et j'aimerai avoir votre aide précieuse :pray: :pray:
pour lui incorporer sur l’Arduino UNO :

  • Commande RF commander le tous avec la touche "lecture ou 1"
    (part la suite d'autre bouton pourrai être utiliser avec des fonction pour le pistolet Plasma.)
  • 6X LEDs (2 avant, 2 arrier, 2 pour les yeux)
  • 1X Servo mini (mouvement gauche, droite)
  • DFplayer (band sond)
  • Ecran LCD (pour la video) "ajout perso"

Le code compiler que j'ai actuellement est un peu compliquer a déchiffrer mais expliquer sur le lien

#include <SoftwareSerial.h>

#include "DFRobotDFPlayerMini.h"
#include <Servo.h>        // Tools -> Manage Libraries...
#include <ServoEasing.h>  // ServoEasing v2.3.4
#include <AsyncTimer.h>   // AsyncTimer v2.2.0
#include <jled.h>         // JLed v4.8.0


//
// Eye LED settings...
//
#define LED_A 5
#define LED_B 6
#define LED_C 7

#define FADE_ON 125
#define FADE_ON_WAIT 500

#define FLICKER_TIME 2500

#define EYES_ON_WAIT 500

#define FADE_OFF 1500
#define FADE_OFF_WAIT 2500


//
// Eye Servo settings...
//
#define EYE_SERVO_A 9
#define EYE_SERVO_B 10
#define EYE_SERVO_C 11

#define EYE_SPEED 150

#define EYE_MIN 20
#define EYE_MAX 160
#define EYE_CENTER 90

#define EYE_INTERVAL 900


//
// Random eye movement...
//
AsyncTimer t;
ServoEasing eyeServoA;
ServoEasing eyeServoB;
ServoEasing eyeServoC;
unsigned short eyeTimer;
unsigned short scanTimer;
bool eyeMoveA = true;
bool eyeMoveB = true;
bool eyeMoveC = true;


//
// Eye flickering & fading movement.
//
JLed ledsA[] = {
  JLed(LED_A).FadeOn(FADE_ON).DelayAfter(FADE_ON_WAIT * 2),
  JLed(LED_A).Candle(6, 100, FLICKER_TIME * 2),
  JLed(LED_A).On().DelayAfter(EYES_ON_WAIT * 2),
  //    JLed(LED_A).FadeOff(FADE_OFF).DelayAfter(FADE_OFF_WAIT * 2)
};
auto seqA = JLedSequence(JLedSequence::eMode::SEQUENCE, ledsA);
auto ledA = JLed(LED_A).FadeOff(FADE_OFF).DelayAfter(FADE_OFF_WAIT * 2);

JLed ledsB[] = {
  JLed(LED_B).FadeOn(FADE_ON).DelayAfter(FADE_ON_WAIT * 2),
  JLed(LED_B).Candle(6, 100, FLICKER_TIME * 2),
  JLed(LED_B).On().DelayAfter(EYES_ON_WAIT * 2),
  //    JLed(LED_B).FadeOff(FADE_OFF).DelayAfter(FADE_OFF_WAIT * 2)
};
auto seqB = JLedSequence(JLedSequence::eMode::SEQUENCE, ledsB);
auto ledB = JLed(LED_B).FadeOff(FADE_OFF).DelayAfter(FADE_OFF_WAIT * 2);


//
// Generate variation for range -> range * 2
//
int vary(int range, int v = 11) {
  return range + random(v) * range / v;
}


//
// Change JLed timings so each flicker is independent.
//
void retime(JLed (&leds)[3], JLed &led) {
  leds[0].FadeOn(FADE_ON).DelayAfter(vary(FADE_ON_WAIT));
  leds[1].Candle(6, 100, vary(FLICKER_TIME));
  leds[2].On().DelayAfter(vary(EYES_ON_WAIT));
  led.FadeOff(FADE_OFF).DelayAfter(vary(FADE_OFF_WAIT));
}


//
// Random eye movement.
//
void moveEyes() {
  if (eyeMoveA) {
    eyeServoA.startEaseTo(random(EYE_MIN, EYE_MAX + 1));
  }

  if (eyeMoveB) {
    eyeServoB.startEaseTo(random(EYE_MIN, EYE_MAX + 1));
  }
}


//
// Scan eyes back and forth.
//
void scanEyes() {
  eyeServoC.startEaseTo(eyeMoveC ? EYE_MIN : EYE_MAX);
  eyeMoveC = !eyeMoveC;
}


//
// Standard setup function.
//


// Use pins 2 and 3 to communicate with DFPlayer Mini
static const uint8_t PIN_MP3_TX = 2; // Connects to module's RX
static const uint8_t PIN_MP3_RX = 3; // Connects to module's TX
SoftwareSerial softwareSerial(PIN_MP3_RX, PIN_MP3_TX);

// Create the Player object
DFRobotDFPlayerMini player;

void setup() {
  void playMp3Folder(int fileNumber);

  // Init serial port for DFPlayer Mini
  softwareSerial.begin(9600);

  // Start communication with DFPlayer Mini
  if (player.begin(softwareSerial)) {
    Serial.println("OK");

    // Set volume to maximum (0 to 30).
    player.volume(20);

    delay(45700);

  } else {
    Serial.println("Connecting to DFPlayer Mini failed!");
  }

  Serial.begin(9600); // For debugging.
  randomSeed(analogRead(0)); // Init random number generator.

  eyeServoA.attach(EYE_SERVO_A); // Init eyes.
  eyeServoA.write(EYE_CENTER);
  eyeServoA.setSpeed(EYE_SPEED);

  eyeServoB.attach(EYE_SERVO_B);
  eyeServoB.write(EYE_CENTER);
  eyeServoB.setSpeed(EYE_SPEED);

  eyeServoC.attach(EYE_SERVO_C);
  eyeServoC.write(EYE_CENTER);
  eyeServoC.setSpeed(EYE_SPEED / 2); // Run slower is scanning mode.

  pinMode(LED_C, OUTPUT); // Make Led C constantly on (for scanning mode).
  digitalWrite(LED_C, HIGH);

  t.setup();
  eyeTimer = t.setInterval(moveEyes, EYE_INTERVAL);
  scanTimer = t.setInterval(scanEyes, EYE_INTERVAL * 5);
}



//
// Standard loop.
//
void loop() {
  // Play the first MP3 file on the SD card
    player.play(1);
    
  t.handle();

  if (!seqA.Update()) {
    eyeMoveA = false; // Stop random eye movement when sequence ends and then we fade off.
    if (!ledA.Update()) {
      retime(ledsA, ledA);
      seqA.Reset();
      ledA.Reset();
      eyeMoveA = true; // Restart eye movement for next eye flickering sequence.
    }
  }

  if (!seqB.Update()) {
    eyeMoveB = false; // Stop random eye movement when sequence ends and then we fade off.
    if (!ledB.Update()) {
      retime(ledsB, ledB);
      seqB.Reset();
      ledB.Reset();
      eyeMoveB = true; // Restart eye movement for next eye flickering sequence.
    }
  }
}
  • Les broches 5, 6 et 7 contrôlent les LED. Les broches 5 et 6 passent par la mise sous tension, le scintillement et la disparition. Ils fonctionnent sur des cycles aléatoires indépendants. La broche 7 est toujours allumée.
LED_A  5
LED_B  6
LED_C  7
  • Les broches 9, 10 et 11 contrôlent les servos. Les broches 9 et 10 se déplacent de manière aléatoire vers la gauche et vers la droite en synchronisation avec le scintillement des LED (les broches 9 + 5 et 6 + 10 sont synchronisées). La broche 11 scanne à plusieurs reprises à gauche et à droite.
    Vous n'avez pas besoin de câbler toutes les broches LED et servo, ni de les garder ensemble. Vous pouvez câbler les yeux de la tête à la broche 7 et leur servo aux broches 9 ou 10 afin qu'ils se déplacent de manière aléatoire (ils s'arrêteront momentanément de temps en temps) afin que votre terminateur puisse regarder autour de vous. Alternativement, vous pouvez câbler le servo oculaire à la broche 11 afin que le Terminator balaye la pièce à gauche et à droite.

EYE_SERVO_C 11

Ce que j’ai fait comme installation



Premier Test
comment puis-je incorporer dans une commande RF ?
et la commande DFplayer est t'il nécessaire pour l'ecran LCD ?
Je vous remercie d'avance de votre aide, être novice c'est pas facile ^^
Pour + de renseignement je reste a votre disposition.

C'est quoi pour toi une commande RF?
Tu as déjà les composants?

module RF 433MHz avec Arduino oui dsl et non pas encore commandé quel références pouvez-vous me conseiller ?

Bonjour @rico95

module radio OOK/ASK 433MHz ? Pourquoi le choix d'une liaison radio aussi primitive ?

As-tu un impératif imposant cette solution préhistorique , du genre 'je veux commander mon appareil avec télécommande 433MHz existante' ?

S'il s'agit par contre de réaliser la télécommande , tu as les mains libres et peux envisager une liaison 'radiofréquence' plus fiable : modules HC12, nRF24L01....etc....il ya du choix !!

PS : pas pu voir ton code , mon smartphone ne sait pas gérer les fichiers .ino

Ok bein dsl en cherchant des réponses un peu partout on ma proposer ca, apret ma première proposition était en infrarouge donc si il y a mieux et plus simple je suis preneur.

Contrôler les tous en Bluetooth avec son mobile peut être pas mal aussi non ?
si je prends le schéma du mec il s'est servi du HC-06 Bluetooth

Slt
Donc j'ai commander HC-06 Bluetooth
Pour le code si j'ai bien compris je compile ceci
Basé sur ce lien Tutoriel basique d’usage du module bluetooth HC-06 avec Arduino.

#include <SoftwareSerial.h>
SoftwareSerial BT(4,2); 

void setup(){
  Serial.begin(9600);
  BT.begin(9600);
}

void loop(){
  if (BT.available()){
    Serial.write(BT.read());  // les données reçues par le port BT sont envoyées au moniteur série
  }
  if(Serial.available()) {
    BT.write(Serial.read()); // les données reçues par le moniteur série sont envoyées au port BT
  }
}

Avec mon code


#include "DFRobotDFPlayerMini.h"
#include <Servo.h>        // Tools -> Manage Libraries...
#include <ServoEasing.h>  // ServoEasing v2.3.4
#include <AsyncTimer.h>   // AsyncTimer v2.2.0
#include <jled.h>         // JLed v4.8.0


//
// Eye LED settings...
//
#define LED_A 5
#define LED_B 6
#define LED_C 7

#define FADE_ON 125
#define FADE_ON_WAIT 500

#define FLICKER_TIME 2500

#define EYES_ON_WAIT 500

#define FADE_OFF 1500
#define FADE_OFF_WAIT 2500


//
// Eye Servo settings...
//
#define EYE_SERVO_A 9
#define EYE_SERVO_B 10
#define EYE_SERVO_C 11

#define EYE_SPEED 150

#define EYE_MIN 20
#define EYE_MAX 160
#define EYE_CENTER 90

#define EYE_INTERVAL 900


//
// Random eye movement...
//
AsyncTimer t;
ServoEasing eyeServoA;
ServoEasing eyeServoB;
ServoEasing eyeServoC;
unsigned short eyeTimer;
unsigned short scanTimer;
bool eyeMoveA = true;
bool eyeMoveB = true;
bool eyeMoveC = true;


//
// Eye flickering & fading movement.
//
JLed ledsA[] = {
  JLed(LED_A).FadeOn(FADE_ON).DelayAfter(FADE_ON_WAIT * 2),
  JLed(LED_A).Candle(6, 100, FLICKER_TIME * 2),
  JLed(LED_A).On().DelayAfter(EYES_ON_WAIT * 2),
  //    JLed(LED_A).FadeOff(FADE_OFF).DelayAfter(FADE_OFF_WAIT * 2)
};
auto seqA = JLedSequence(JLedSequence::eMode::SEQUENCE, ledsA);
auto ledA = JLed(LED_A).FadeOff(FADE_OFF).DelayAfter(FADE_OFF_WAIT * 2);

JLed ledsB[] = {
  JLed(LED_B).FadeOn(FADE_ON).DelayAfter(FADE_ON_WAIT * 2),
  JLed(LED_B).Candle(6, 100, FLICKER_TIME * 2),
  JLed(LED_B).On().DelayAfter(EYES_ON_WAIT * 2),
  //    JLed(LED_B).FadeOff(FADE_OFF).DelayAfter(FADE_OFF_WAIT * 2)
};
auto seqB = JLedSequence(JLedSequence::eMode::SEQUENCE, ledsB);
auto ledB = JLed(LED_B).FadeOff(FADE_OFF).DelayAfter(FADE_OFF_WAIT * 2);


//
// Generate variation for range -> range * 2
//
int vary(int range, int v = 11) {
  return range + random(v) * range / v;
}


//
// Change JLed timings so each flicker is independent.
//
void retime(JLed (&leds)[3], JLed &led) {
  leds[0].FadeOn(FADE_ON).DelayAfter(vary(FADE_ON_WAIT));
  leds[1].Candle(6, 100, vary(FLICKER_TIME));
  leds[2].On().DelayAfter(vary(EYES_ON_WAIT));
  led.FadeOff(FADE_OFF).DelayAfter(vary(FADE_OFF_WAIT));
}


//
// Random eye movement.
//
void moveEyes() {
  if (eyeMoveA) {
    eyeServoA.startEaseTo(random(EYE_MIN, EYE_MAX + 1));
  }

  if (eyeMoveB) {
    eyeServoB.startEaseTo(random(EYE_MIN, EYE_MAX + 1));
  }
}


//
// Scan eyes back and forth.
//
void scanEyes() {
  eyeServoC.startEaseTo(eyeMoveC ? EYE_MIN : EYE_MAX);
  eyeMoveC = !eyeMoveC;
}


//
// Standard setup function.
//


// Use pins 2 and 3 to communicate with DFPlayer Mini
static const uint8_t PIN_MP3_TX = 2; // Connects to module's RX
static const uint8_t PIN_MP3_RX = 3; // Connects to module's TX
SoftwareSerial softwareSerial(PIN_MP3_RX, PIN_MP3_TX);

// Create the Player object
DFRobotDFPlayerMini player;

void setup() {
  void playMp3Folder(int fileNumber);

  // Init serial port for DFPlayer Mini
  softwareSerial.begin(9600);

  // Start communication with DFPlayer Mini
  if (player.begin(softwareSerial)) {
    Serial.println("OK");

    // Set volume to maximum (0 to 30).
    player.volume(20);

    delay(45700);

  } else {
    Serial.println("Connecting to DFPlayer Mini failed!");
  }

  Serial.begin(9600); // For debugging.
  randomSeed(analogRead(0)); // Init random number generator.

  eyeServoA.attach(EYE_SERVO_A); // Init eyes.
  eyeServoA.write(EYE_CENTER);
  eyeServoA.setSpeed(EYE_SPEED);

  eyeServoB.attach(EYE_SERVO_B);
  eyeServoB.write(EYE_CENTER);
  eyeServoB.setSpeed(EYE_SPEED);

  eyeServoC.attach(EYE_SERVO_C);
  eyeServoC.write(EYE_CENTER);
  eyeServoC.setSpeed(EYE_SPEED / 2); // Run slower is scanning mode.

  pinMode(LED_C, OUTPUT); // Make Led C constantly on (for scanning mode).
  digitalWrite(LED_C, HIGH);

  t.setup();
  eyeTimer = t.setInterval(moveEyes, EYE_INTERVAL);
  scanTimer = t.setInterval(scanEyes, EYE_INTERVAL * 5);
}



//
// Standard loop.
//
void loop() {
  // Play the first MP3 file on the SD card
    player.play(1);
    
  t.handle();

  if (!seqA.Update()) {
    eyeMoveA = false; // Stop random eye movement when sequence ends and then we fade off.
    if (!ledA.Update()) {
      retime(ledsA, ledA);
      seqA.Reset();
      ledA.Reset();
      eyeMoveA = true; // Restart eye movement for next eye flickering sequence.
    }
  }

  if (!seqB.Update()) {
    eyeMoveB = false; // Stop random eye movement when sequence ends and then we fade off.
    if (!ledB.Update()) {
      retime(ledsB, ledB);
      seqB.Reset();
      ledB.Reset();
      eyeMoveB = true; // Restart eye movement for next eye flickering sequence.
    }
  }
}

Qui donne ça
Mais avec une erreur 'BT' was not declared in this scope
Pas compris :thinking:

#include <SoftwareSerial.h>

#include "DFRobotDFPlayerMini.h"
#include <Servo.h>        // Tools -> Manage Libraries...
#include <ServoEasing.h>  // ServoEasing v2.3.4
#include <AsyncTimer.h>   // AsyncTimer v2.2.0
#include <jled.h>         // JLed v4.8.0


//
// Eye LED settings...
//
#define LED_A 5
#define LED_B 6
#define LED_C 7

#define FADE_ON 125
#define FADE_ON_WAIT 500

#define FLICKER_TIME 2500

#define EYES_ON_WAIT 500

#define FADE_OFF 1500
#define FADE_OFF_WAIT 2500


//
// Eye Servo settings...
//
#define EYE_SERVO_A 9
#define EYE_SERVO_B 10
#define EYE_SERVO_C 11

#define EYE_SPEED 150

#define EYE_MIN 20
#define EYE_MAX 160
#define EYE_CENTER 90

#define EYE_INTERVAL 900


//
// Random eye movement...
//
AsyncTimer t;
ServoEasing eyeServoA;
ServoEasing eyeServoB;
ServoEasing eyeServoC;
unsigned short eyeTimer;
unsigned short scanTimer;
bool eyeMoveA = true;
bool eyeMoveB = true;
bool eyeMoveC = true;


//
// Eye flickering & fading movement.
//
JLed ledsA[] = {
  JLed(LED_A).FadeOn(FADE_ON).DelayAfter(FADE_ON_WAIT * 2),
  JLed(LED_A).Candle(6, 100, FLICKER_TIME * 2),
  JLed(LED_A).On().DelayAfter(EYES_ON_WAIT * 2),
  //    JLed(LED_A).FadeOff(FADE_OFF).DelayAfter(FADE_OFF_WAIT * 2)
};
auto seqA = JLedSequence(JLedSequence::eMode::SEQUENCE, ledsA);
auto ledA = JLed(LED_A).FadeOff(FADE_OFF).DelayAfter(FADE_OFF_WAIT * 2);

JLed ledsB[] = {
  JLed(LED_B).FadeOn(FADE_ON).DelayAfter(FADE_ON_WAIT * 2),
  JLed(LED_B).Candle(6, 100, FLICKER_TIME * 2),
  JLed(LED_B).On().DelayAfter(EYES_ON_WAIT * 2),
  //    JLed(LED_B).FadeOff(FADE_OFF).DelayAfter(FADE_OFF_WAIT * 2)
};
auto seqB = JLedSequence(JLedSequence::eMode::SEQUENCE, ledsB);
auto ledB = JLed(LED_B).FadeOff(FADE_OFF).DelayAfter(FADE_OFF_WAIT * 2);


//
// Generate variation for range -> range * 2
//
int vary(int range, int v = 11) {
  return range + random(v) * range / v;
}


//
// Change JLed timings so each flicker is independent.
//
void retime(JLed (&leds)[3], JLed &led) {
  leds[0].FadeOn(FADE_ON).DelayAfter(vary(FADE_ON_WAIT));
  leds[1].Candle(6, 100, vary(FLICKER_TIME));
  leds[2].On().DelayAfter(vary(EYES_ON_WAIT));
  led.FadeOff(FADE_OFF).DelayAfter(vary(FADE_OFF_WAIT));
}


//
// Random eye movement.
//
void moveEyes() {
  if (eyeMoveA) {
    eyeServoA.startEaseTo(random(EYE_MIN, EYE_MAX + 1));
  }

  if (eyeMoveB) {
    eyeServoB.startEaseTo(random(EYE_MIN, EYE_MAX + 1));
  }
}


//
// Scan eyes back and forth.
//
void scanEyes() {
  eyeServoC.startEaseTo(eyeMoveC ? EYE_MIN : EYE_MAX);
  eyeMoveC = !eyeMoveC;
}


//
// Standard setup function.
//


// Use pins 2 and 3 to communicate with DFPlayer Mini
static const uint8_t PIN_MP3_TX = 2; // Connects to module's RX
static const uint8_t PIN_MP3_RX = 3; // Connects to module's TX
SoftwareSerial softwareSerial(PIN_MP3_RX, PIN_MP3_TX);

// Create the Player object
DFRobotDFPlayerMini player;

void setup() {
  BT.begin(9600);
  
  void playMp3Folder(int fileNumber);

  // Init serial port for DFPlayer Mini
  softwareSerial.begin(9600);

  // Start communication with DFPlayer Mini
  if (player.begin(softwareSerial)) {
    Serial.println("OK");

    // Set volume to maximum (0 to 30).
    player.volume(20);

    delay(45700);

  } else {
    Serial.println("Connecting to DFPlayer Mini failed!");
  }

  Serial.begin(9600); // For debugging.
  randomSeed(analogRead(0)); // Init random number generator.

  eyeServoA.attach(EYE_SERVO_A); // Init eyes.
  eyeServoA.write(EYE_CENTER);
  eyeServoA.setSpeed(EYE_SPEED);

  eyeServoB.attach(EYE_SERVO_B);
  eyeServoB.write(EYE_CENTER);
  eyeServoB.setSpeed(EYE_SPEED);

  eyeServoC.attach(EYE_SERVO_C);
  eyeServoC.write(EYE_CENTER);
  eyeServoC.setSpeed(EYE_SPEED / 2); // Run slower is scanning mode.

  pinMode(LED_C, OUTPUT); // Make Led C constantly on (for scanning mode).
  digitalWrite(LED_C, HIGH);

  t.setup();
  eyeTimer = t.setInterval(moveEyes, EYE_INTERVAL);
  scanTimer = t.setInterval(scanEyes, EYE_INTERVAL * 5);
}



//
// Standard loop.
//
void loop() {
   if (BT.available()){
    Serial.write(BT.read());  // les données reçues par le port BT sont envoyées au moniteur série
  }
  if(Serial.available()) {
    BT.write(Serial.read()); // les données reçues par le moniteur série sont envoyées au port BT

    player.play(1); // Play the first MP3 file on the SD card
    
  t.handle();

  if (!seqA.Update()) {
    eyeMoveA = false; // Stop random eye movement when sequence ends and then we fade off.
    if (!ledA.Update()) {
      retime(ledsA, ledA);
      seqA.Reset();
      ledA.Reset();
      eyeMoveA = true; // Restart eye movement for next eye flickering sequence.
    }
  }

  if (!seqB.Update()) {
    eyeMoveB = false; // Stop random eye movement when sequence ends and then we fade off.
    if (!ledB.Update()) {
      retime(ledsB, ledB);
      seqB.Reset();
      ledB.Reset();
      eyeMoveB = true; // Restart eye movement for next eye flickering sequence.
    }
  }
}

Merci de votre aide :sos:

Bonjour, il ne me semble pas que tu es déclaré BT dans ton code.
Si c'est le cas, c'est normal que le compilateur ne trouve pas l'instance de ton objet.

En gros dans le code d'exemple que tu as donné, il y a la déclaration suivante:
SoftwareSerial BT(4,2);

Houps un oublie maintenant c'est mieux ^^
Merci

#include <SoftwareSerial.h>
SoftwareSerial BT(4,2); 

#include "DFRobotDFPlayerMini.h"
#include <Servo.h>        // Tools -> Manage Libraries...
#include <ServoEasing.h>  // ServoEasing v2.3.4
#include <AsyncTimer.h>   // AsyncTimer v2.2.0
#include <jled.h>         // JLed v4.8.0


//
// Eye LED settings...
//
#define LED_A 5
#define LED_B 6
#define LED_C 7

#define FADE_ON 125
#define FADE_ON_WAIT 500

#define FLICKER_TIME 2500

#define EYES_ON_WAIT 500

#define FADE_OFF 1500
#define FADE_OFF_WAIT 2500


//
// Eye Servo settings...
//
#define EYE_SERVO_A 9
#define EYE_SERVO_B 10
#define EYE_SERVO_C 11

#define EYE_SPEED 150

#define EYE_MIN 20
#define EYE_MAX 160
#define EYE_CENTER 90

#define EYE_INTERVAL 900


//
// Random eye movement...
//
AsyncTimer t;
ServoEasing eyeServoA;
ServoEasing eyeServoB;
ServoEasing eyeServoC;
unsigned short eyeTimer;
unsigned short scanTimer;
bool eyeMoveA = true;
bool eyeMoveB = true;
bool eyeMoveC = true;


//
// Eye flickering & fading movement.
//
JLed ledsA[] = {
  JLed(LED_A).FadeOn(FADE_ON).DelayAfter(FADE_ON_WAIT * 2),
  JLed(LED_A).Candle(6, 100, FLICKER_TIME * 2),
  JLed(LED_A).On().DelayAfter(EYES_ON_WAIT * 2),
  //    JLed(LED_A).FadeOff(FADE_OFF).DelayAfter(FADE_OFF_WAIT * 2)
};
auto seqA = JLedSequence(JLedSequence::eMode::SEQUENCE, ledsA);
auto ledA = JLed(LED_A).FadeOff(FADE_OFF).DelayAfter(FADE_OFF_WAIT * 2);

JLed ledsB[] = {
  JLed(LED_B).FadeOn(FADE_ON).DelayAfter(FADE_ON_WAIT * 2),
  JLed(LED_B).Candle(6, 100, FLICKER_TIME * 2),
  JLed(LED_B).On().DelayAfter(EYES_ON_WAIT * 2),
  //    JLed(LED_B).FadeOff(FADE_OFF).DelayAfter(FADE_OFF_WAIT * 2)
};
auto seqB = JLedSequence(JLedSequence::eMode::SEQUENCE, ledsB);
auto ledB = JLed(LED_B).FadeOff(FADE_OFF).DelayAfter(FADE_OFF_WAIT * 2);


//
// Generate variation for range -> range * 2
//
int vary(int range, int v = 11) {
  return range + random(v) * range / v;
}


//
// Change JLed timings so each flicker is independent.
//
void retime(JLed (&leds)[3], JLed &led) {
  leds[0].FadeOn(FADE_ON).DelayAfter(vary(FADE_ON_WAIT));
  leds[1].Candle(6, 100, vary(FLICKER_TIME));
  leds[2].On().DelayAfter(vary(EYES_ON_WAIT));
  led.FadeOff(FADE_OFF).DelayAfter(vary(FADE_OFF_WAIT));
}


//
// Random eye movement.
//
void moveEyes() {
  if (eyeMoveA) {
    eyeServoA.startEaseTo(random(EYE_MIN, EYE_MAX + 1));
  }

  if (eyeMoveB) {
    eyeServoB.startEaseTo(random(EYE_MIN, EYE_MAX + 1));
  }
}

//
// Scan eyes back and forth.
//
void scanEyes() {
  eyeServoC.startEaseTo(eyeMoveC ? EYE_MIN : EYE_MAX);
  eyeMoveC = !eyeMoveC;
}


//
// Standard setup function.
//


// Use pins 2 and 3 to communicate with DFPlayer Mini
static const uint8_t PIN_MP3_TX = 2; // Connects to module's RX
static const uint8_t PIN_MP3_RX = 3; // Connects to module's TX
SoftwareSerial softwareSerial(PIN_MP3_RX, PIN_MP3_TX);

// Create the Player object
DFRobotDFPlayerMini player;

void setup() {
  BT.begin(9600);
  
  void playMp3Folder(int fileNumber);

  // Init serial port for DFPlayer Mini
  softwareSerial.begin(9600);

  // Start communication with DFPlayer Mini
  if (player.begin(softwareSerial)) {
    Serial.println("OK");

    // Set volume to maximum (0 to 30).
    player.volume(20);

    delay(45700);

  } else {
    Serial.println("Connecting to DFPlayer Mini failed!");
  }

  Serial.begin(9600); // For debugging.
  randomSeed(analogRead(0)); // Init random number generator.

  eyeServoA.attach(EYE_SERVO_A); // Init eyes.
  eyeServoA.write(EYE_CENTER);
  eyeServoA.setSpeed(EYE_SPEED);

  eyeServoB.attach(EYE_SERVO_B);
  eyeServoB.write(EYE_CENTER);
  eyeServoB.setSpeed(EYE_SPEED);

  eyeServoC.attach(EYE_SERVO_C);
  eyeServoC.write(EYE_CENTER);
  eyeServoC.setSpeed(EYE_SPEED / 2); // Run slower is scanning mode.

  pinMode(LED_C, OUTPUT); // Make Led C constantly on (for scanning mode).
  digitalWrite(LED_C, HIGH);

  t.setup();
  eyeTimer = t.setInterval(moveEyes, EYE_INTERVAL);
  scanTimer = t.setInterval(scanEyes, EYE_INTERVAL * 5);
}



//
// Standard loop.
//
void loop() {
   if (BT.available()){
    Serial.write(BT.read());  // les données reçues par le port BT sont envoyées au moniteur série
  }
  if(Serial.available()) {
    BT.write(Serial.read()); // les données reçues par le moniteur série sont envoyées au port BT
  }
    player.play(1); // Play the first MP3 file on the SD card
    
  t.handle();

  if (!seqA.Update()) {
    eyeMoveA = false; // Stop random eye movement when sequence ends and then we fade off.
    if (!ledA.Update()) {
      retime(ledsA, ledA);
      seqA.Reset();
      ledA.Reset();
      eyeMoveA = true; // Restart eye movement for next eye flickering sequence.
    }
  }

  if (!seqB.Update()) {
    eyeMoveB = false; // Stop random eye movement when sequence ends and then we fade off.
    if (!ledB.Update()) {
      retime(ledsB, ledB);
      seqB.Reset();
      ledB.Reset();
      eyeMoveB = true; // Restart eye movement for next eye flickering sequence.
    }
  }
}

Ca arrive :slight_smile:

1 Like

Maintenant il manque plu qu'a tester :slight_smile:
Sinon j'aurai voulu ajouter un écran pour lire la vidéo de la bande son en même temps
est t'il possible ?
que pouvez vous me dire cette installation ?
Merci

slt :wave:
avec ceci Module d'écran tactile LCD couleur TFT en 2.8 pouces
est t'il possible de faire une lecture direct de la video avec mon code en rajoutant un programme :thinking:
Comme ceci Utilisation d’un Shield TFT LCD avec Arduino
Es-que le DFplayer est utile dans ce cas :thinking:
En attente de vos réponse.
Merci

bon en cherchant un peu je suis tomber sur ca pour repondre a ma question

Ça ne va pas marcher.. l’arduino uno ou mega n’est pas assez rapide pour lire sur la SD, décoder une vidéo, et l’envoyer à l’écran. (Et l’écran sans doute trop lent aussi pour soutenir 24 FPS)

Un RPi est plus adapté

je crois bien que c'est mort vu le prix, sauf si il y a une autre soluce

je crois bien que c'est mort vu le prix,

Sur le Bon Coin on trouve encore de temps en temps des Raspberry Pi modèles B, B+ ou 2 des prix raisonnables

1 Like

Merci j'en est trouver un Raspberry Pi modèles B qui suffira je pense et sinon on peut le raccorder a la carte UNO ?

Oui il a des GPIO pour l'UART normalement.

Cool merci

a priori GPGIO14 et 15

1 Like

Bonjour

:warning:Les GPIO des Raspberry Pi n'aiment pas beaucoup recevoir des tensions de 5V !!

Insérer une adaptation de niveau de tension dans le cas d'une liaison par UARTs entre UNO (5V) et Raspberry PI (3,3V)

2 Likes

Ok merci c'est noté
C'est ce qui faudra ?