Aide pour Nouveau projet TERMINATOR

Oui, si tu le positionne dans loop() { il se joura à chaque boucle.

Si tu le positionne dans le setup(), il se jouera qu'une seul fois.
(il faut le remettre juste après le reglage de volume si c'est ce que tu souhaites)

// Set volume to maximum (0 to 30).
player.volume(23);
// Play the first MP3 file on the SD card
player.play(1);
delay(40000);

IMPECCABLE Merci beaucoup je te garde sous le coude :grin: :wink: :ok_hand: :+1:

:wave: c'est encore moi :grin:
Je pensais maintenant que le code est fonctionnel, est t'il possible de le faire marcher en Infra Rouge, commander avec une télécommande je dirai que oui mais comment ?



Exemple:
Bouton 1 code actuelle (Mp3 + LED et Servo)
Bouton 2 à 9 (Mp3 + LED) a voir

Et ma deuxième question:
J'aimerai faire un arrêt des Led et du servo moteur au bout de 2m54 au bout de la bande son je met Delay(...) dans le void setup() ?
Merci encore de votre aide

Dans la loop(){ il se passe quoi si :

Tu mets le code suivant en commentaire : t.handle();

:wave: Vu qu'il y était déjà je sais pas sa fonction, mais normalement cela devrai s’arrêter non ?

// Stop random eye movement when sequence ends and then we fade off.
#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);

    // Play the first MP3 file on the SD card
  player.play(1);
  delay(40000);
  
  } 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() {
  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.
    }
  }
}

Oui, je pense que c'est lui qui déclenche LED + Mouvement, il faudrait contrôler.

Voir également si en le remontant dans le Setup, il n'y a qu'une serie d'action qui se déclenche ou plusieurs.

Une fois que tu maitriseras quelle partie du code fait quoi, tu pourras plus facilement modifier les enchainements, et les lancer sur des actions.

Oui tout est la je vais me pencher sur le probleme mais pas evident pour moi ce que jai pu comprendre en détail est :

  • 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

En gros ce que j’ai fait comme installation
Donc si j'ai bien compris avec ces instructions la, je peux l'installer dans un code IR ?

Pour commencer je peux prendre ça comme base ?
la chose que j'arrive pas a fixer les code de la télécommande qui sont toujours différent
j’essaye de suivre ce lien Comment utiliser un récepteur IR et une télécommande avec Arduino

/* IR remote and receiver Arduino example code. Print key values in the Serial Monitor. More info: https://www.makerguides.com */
#include <IRremote.h> // include the IRremote library
#define RECEIVER_PIN 2 // define the IR receiver pin
IRrecv receiver(RECEIVER_PIN); // create a receiver object of the IRrecv class
decode_results results; // create a results object of the decode_results class
unsigned long key_value = 0; // variable to store the key value
void setup() {
 Serial.begin(9600); // begin serial communication with a baud rate of 9600
 receiver.enableIRIn(); // enable the receiver
 receiver.blink13(true); // enable blinking of the built-in LED when an IR signal is received
}
void loop() {
if (receiver.decode(&results)) { // decode the received signal and store it in results
if (results.value == 0xFFFFFFFF) { // if the value is equal to 0xFFFFFFFF
 results.value = key_value; // set the value to the key value
}
switch (results.value) { // compare the value to the following cases
case 0xFD00FF: // if the value is equal to 0xFD00FF
 Serial.println(“POWER”); // print “POWER” in the Serial Monitor
break;
case 0xFD807F:
 Serial.println(“VOL+”);
break;
case 0xFD40BF:
 Serial.println(“FUNC/STOP”);
break;
case 0xFD20DF:
 Serial.println(“|<<“);
break;
case 0xFDA05F:
 Serial.println(“>||”);
break ;
case 0xFD609F:
 Serial.println(“>>|”);
break ;
case 0xFD10EF:
 Serial.println(“DOWN”);
break ;
case 0xFD906F:
 Serial.println(“VOL-“);
break ;
case 0xFD50AF:
 Serial.println(“UP”);
break ;
case 0xFD30CF:
 Serial.println(“0”);
break ;
case 0xFDB04F:
 Serial.println(“EQ”);
break ;
case 0xFD708F:
 Serial.println(“ST/REPT”);
break ;
case 0xFD08F7:
 Serial.println(“1”);
break ;
case 0xFD8877:
 Serial.println(“2”);
break ;
case 0xFD48B7:
 Serial.println(“3”);
break ;
case 0xFD28D7:
 Serial.println(“4”);
break ;
case 0xFDA857:
En série. println ( “5” ) ;
pause ;
cas  0xFD6897 :
En série. println ( “6” ) ;
pause ;
cas  0xFD18E7 :
En série. println ( “7” ) ;
pause ;
cas  0xFD9867 :
En série. println ( “8” ) ;
pause ;
cas  0xFD58A7 :
En série. println ( “9” ) ;
pause ;
}
key_value = résultats. valeur ; // stocke la valeur sous la forme key_value
destinataire. reprendre () ; // réinitialise le récepteur pour le code suivant
}
}

:wave:
Ma compil est fini mais non tester
Quand pensez-vous ?

/* IR remote and receiver Arduino example code. Print key values in the Serial Monitor. More info: https://www.makerguides.com */
#include <IRremote.h> // include the IRremote library
#define RECEIVER_PIN 2 // define the IR receiver pin
Récepteur IRrecv ( RECEIVER_PIN ) ; // crée un objet récepteur de la classe IRrecv
IRrecv receiver(RECEIVER_PIN); // create a receiver object of the IRrecv class
decode_results results; // create a results object of the decode_results class
unsigned long key_value = 0; // variable pour stocker la valeur de la clé
#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() {
  Serial.begin(9600); // begin serial communication with a baud rate of 9600
  receiver.enableIRIn(); // enable the receiver
  receiver.blink13(true); // enable blinking of the built-in LED when an IR signal is received
}
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);

    // Play the first MP3 file on the SD card
  player.play(1);
  delay(40000);
  
  } 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 (receiver.decode(&results)) { // decode the received signal and store it in results
    if (results.value == 0xFFFFFFFF) { // if the value is equal to 0xFFFFFFFF
      results.value = key_value; // set the value to the key value
    }
    switch (results.value) { // compare the value to the following cases
      case  0xFD00FF : // si la valeur est égale à 0xFD00FF
        En série. println ( “PUISSANCE” ) ; // imprime “POWER” dans le moniteur série
        break;
      case 0xFFA857:
        Serial.println(“VOL + ”);
        break;
      case 0xFFA25D:
        Serial.println(“CH - ”);
        break;
      case 0xFF22DD:
        Serial.println(“ | << “);
        break;
      case 0xFFC23D:
        Serial.println(“ > || ”);
        break ;
      case 0xFF02FD:
        Serial.println(“ >> | ”);
        break ;
      case 0xFF629D:
        Serial.println(“CH”);
        break ;
      case 0xFFE01F:
        Serial.println(“VOL - “);
        break ;
      case 0xFFE21D:
        Serial.println(“CH + ”);
        break ;
      case 0xFF6897F:
        Serial.println(“0”);
        break ;
      case 0xFF906F:
        Serial.println(“EQ”);
        break ;
      case 0xFD708F:
        Serial.println(“ST / REPT”);
        break ;
      case 0xFF30CF:
        Serial.println(“1”);
        break ;
      case 0xFF18E7:
        Serial.println(“2”);
        break ;
      case 0xFF7A85:
        Serial.println(“3”);
        break ;
      case 0xFF10EF:
        Serial.println(“4”);
        break ;
      case 0xFF38C7:
        En série. println (“5”);
        pause ;
cas  0xFF5AA5:
        En série. println (“6”);
        pause ;
cas  0xFF42BD:
        En série. println (“7”);
        pause ;
cas  0xFF4AB5:
        En série. println (“8”);
        pause ;
cas  0xFF52AD:
        En série. println (“9”);
        pause ;
        delay(500);
    }
    key_value = résultats. valeur ; // stocke la valeur sous la forme key_value
    destinataire. reprendre () ; // réinitialise le récepteur pour le code suivant
  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.
    }
  }
}

Erreur
key_value = résultats. valeur ; // stocke la valeur sous la forme key_value

Non utilisé : C:\Users\scher\OneDrive\Documents\Arduino\libraries\SoftwareSerial
exit status 1
stray '\303' in program

La question est comment je peut fait pour faire mode lecture (case 0xFDA05F: Serial.println(“>||”);) DFplayer + Led et servo je le place ou dans le code svp ?
serait t'il avec cette variable results.value

Tu peux placer ce code dans loop() ; au lieu du setup, et le lancer quand tu recois le signal "play" de la telecomande.

Pour le reste, j'ai du mal a comprendre le code pour mouvement / led.
Tu dois facilemet pouvoir appeler moveEyes() avec un appui de touche.

Mais pour mouvement / led, sans avoir le montage impossible pour moi de t'aider plus !

Ok merci bien

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.