Bombe factice airsoft,scenario sabotage mw2

Bonjour
Je cherche à faire une bombe factice type valise à grosse puissance sonore,pour l'airsoft, pour qu'elle soit localisable et que les joueurs entendent où en sont les étapes de la partie.
Je veux qu'elle fonctionne comme le scenario sabotage de call of duty modern warfare 2 que j'ai connu sur ps3.
Donc je débute, grâce à du copier coller ,je peux déclencher un compte à rebours tm1637 et je peux lancer une piste mp3 avec mon arduino et un Dfplayermini .
Etape actuelle,j'essaie de lancer une piste mp3 à un moment donné du compte à rebours.
Je me documente,je fais des essais mais j'arrive pas

Il y a une partie "void comptearebours" dans le programme et la variable "tpsRestant"semble propre à cette partie de programme et inutlilsable dans le loop
Comment je pourrais utiliser cette valeur pour déclencher des lecture de pistes mp3?

Exemple quand il reste 4 minutes la piste qui annonce "4 minutes restantes" est lue.
Voilà je pense que ça ne sera pas le seul problème où je vais caler mais ça serait déjà une grande avancée de traiter celui là
Je remercie à l'avance ceux qui vont m'aider!
Et je joins mon programme tm1637

Bonjour,
Sauf erreur, le code n'est pas là !

include <TM1637Display.h>

// Broches du 4 digits
#define CLK 2
#define DIO 3
TM1637Display display(CLK, DIO);

#define nbMilliSecondes(temps) ((temps % 1000) /10)
#define nbSecondes(temps) ((temps / 1000) % 60)
#define nbMinutes(temps) (((temps / 1000) /60) % 60)

// Broches du bouton de depart et de stop
byte bouton_start=4;
byte bouton_stop=5;

// Temps de jeu en millisecondes
unsigned long chrono= 80000;

void setup() {
pinMode(bouton_start,INPUT_PULLUP);
pinMode(bouton_stop, INPUT_PULLUP);
display.setBrightness(7);
display.showNumberDecEx((nbMinutes(chrono) * 100) + nbSecondes(chrono),0b11100000,true);
}

void comptearebours (long tpsLimite) {
long tpsRestant;
do {
tpsRestant = tpsLimite - millis();
if (tpsRestant>60000) display.showNumberDecEx((nbMinutes(tpsRestant) * 100) + nbSecondes(tpsRestant),0b11100000,true);
else if (tpsRestant<=0) display.showNumberDecEx(0000,0b11100000,true);
else display.showNumberDecEx((nbSecondes(tpsRestant) * 100) + nbMilliSecondes(tpsRestant),0b00000000,true);
} while((tpsRestant >0)&&(digitalRead(bouton_stop)));
}

void loop() {
if (digitalRead(bouton_start)==LOW) comptearebours(chrono+millis());
delay(200);
}

Oui l'appli me demandait de formater le code😅

Hello, sans le code....
Il est probable que la variable "temps restant" est déclarée en local.
Déclaré la en globale de elle sera vue de tout le programme et non que de la fonction où elle est déclarée.
Édit: vous êtes rapides😁

Oui ça semble être ça
J'ai essayé de la declarer mais ça marche pas
Bon j'essaie de mettre plus d'éléments d'ici ce soir
Donc le programme dfplayermini et mon mix des 2 programmes

Bonjour et bienvenue,

Merci de prendre quelques minutes pour lire les bonnes pratiques du forum francophone et les appliquer.

En particulier, la mise en forme du code avec les balises <code/>

Donc je dois me présenter sur le lien si j'ai compris
N'hésitez pas à me rappeler si il y a autre chose que j'ai omis

Bonjour kristof19

Pas forcément, par contre, mettre ton code du post #3 entre les balises
image

oui :wink:

Cordialement
jpbbricole


#include <TM1637Display.h>

// Broches du 4 digits
#define CLK 2
#define DIO 3
TM1637Display display(CLK, DIO);

#define nbMilliSecondes(_temps_) ((_temps_ % 1000) /10)
#define nbSecondes(_temps_) ((_temps_ / 1000) % 60)
#define nbMinutes(_temps_) (((_temps_ / 1000) /60) % 60)

// Broches du bouton de depart et de stop
byte bouton_start=4;
byte bouton_stop=5;

// Temps de jeu en millisecondes
unsigned long chrono= 80000;

void setup() {
  pinMode(bouton_start,INPUT_PULLUP);
  pinMode(bouton_stop, INPUT_PULLUP);
  display.setBrightness(7);
  display.showNumberDecEx((nbMinutes(chrono) * 100) + nbSecondes(chrono),0b11100000,true);
}

void comptearebours (long tpsLimite) {
  long tpsRestant;
  do {
    tpsRestant = tpsLimite - millis();
    if (tpsRestant>60000) display.showNumberDecEx((nbMinutes(tpsRestant) * 100) + nbSecondes(tpsRestant),0b11100000,true);
    else if (tpsRestant<=0) display.showNumberDecEx(0000,0b11100000,true);
    else display.showNumberDecEx((nbSecondes(tpsRestant) * 100) + nbMilliSecondes(tpsRestant),0b00000000,true);
  } while((tpsRestant >0)&&(digitalRead(bouton_stop)));
}

void loop() {
  if (digitalRead(bouton_start)==LOW) comptearebours(chrono+millis());
  delay(200);
}

C mieux comme ça ?

Non :woozy_face:
Ti cliques sur
image
Tu as ceci qui vient
image
et tu colles ton programme.

Corriges ton post #10 en mettant
image
au début du programme et
image
à la fin

Laisse pas traîner ton montage à la gare ou dans le métro, tu risques d'avoir des ennuis... :wink:

1 Like

Et tu peux rééditer ton post pour ajouter les balises code au lieu d'en créer un nouveau.
Petite icône en forme de crayon sous le message à corriger.

Merci mais c'est pas l'idée :smile:

Mon post #10 est il conforme?

tu affiches ton post dans lequel il y a ton code.
tu le "surlignes" et le "coupes".
tu cliques sur l'icone "code".

tu "colles" ton code entre les deux "balises code", la ou il y a "saisissez ou collez du code ici"

image

Cette fois c'est bon
Merci dfgh!
La communauté va vite en avoir marre de moi😅

1 Like

Du coup "long tpsRestant" dans void comptearebours n'est plus qu'un commentaire et est donc supprimé
C'est bien ça ?