Bonjour, Déjà désolé de poster dans "le bar" mais impossible de poster dans le forum "francais" car contrairement a ce qui est indiqué dans le sujet "Créer un nouveau sujet" il n'existe pas d'onglet "New Topic" [bizarre...]
J'ai un petit soucis qui me prends la tête depuis plusieurs heures et j'ai besoin qu'on m'aide a sortir de cette situation.
Avec mes neveux qui adorent les pistolets a flèches, on fait souvent des batailles et pour pimenter le tout j'ai développer des cibles qui détectent les impacts...
Chaque cible est équipée d'un module radio 433Mhz en émission et réception et j'ai un boitier "maitre" équipé aussi en radio émetteur et récepteur qui "pilote" le tout.
Une photo parle mieux que beaucoup d'écrit :
Jusque là tout ce passe bien, pour l'instant je n'ai qu'un mode de jeu en appuyant sur le bouton vert, une cible s'allume rouge et bleu et le nombre d'impact s'affiche sur l’écran LCD du boitier. Quand j'appuie sur un bouton STOP du boitier les cibles deviennent jaune et attende un nouveau mode de jeu.
Le problème vient maintenant : si j’appuie une nouvelle fois sur le bouton vert pour relancer une partie, le boitier maitre affiche bien les scores ( 0 à 0 ) et continu de fonctionner mais les cibles restent en attentent comme si le boitier n'avait pas émis l'ordre ???
Si je redémarre SEULEMENT le boitier ça refonctionne une seule fois (une mise en route du jeu et un arrêt) pas plus.
Comme si la mémoire de l'arduino etait saturée et que la commande : mySwitch.send(XXX, 24);
ne fonctionne plus... et que seul un redémarrage permet de refaire fonctionner une seul et unique fois...
Je vous mets une partie (sinon je dépasse les 9000 caractères) du code du boitier maitre puisque je suis casi certain que le problème vient de lui :
if (boutonVert)
{
// Affichage des scores sur le LCD
lcd.clear();
lcd.setCursor(0, 0);// Colone 1 Ligne 0
lcd.print(F("Equipe bleue:")) ;
lcd.print(CompteurBleu);
lcd.setCursor(0, 1);// Colone 1 Ligne 0
lcd.print(F("Equipe rouge:")) ;
lcd.print(CompteurRouge);
// transmet le debut du jeu
delay(1000);
mySwitch.send(120, 24);
mySwitch.setRepeatTransmit(2);// repete 2 fois l'envoi
delay(1000);
int Cible1;
int Cible2;
int Cible3;
int Cible4;
CompteurRouge = 0;
CompteurBleu = 0;
do{
if (mySwitch.available()) {
Reception = mySwitch.getReceivedValue();
mySwitch.resetAvailable();
if( (Reception > 1000) && (Reception < 1999) )// c'est la cible 1 qui envoie le signal d'un nouveau compte
Cible1 = Reception-1000;
if( (Reception > 2000) && (Reception < 2999) )// c'est la cible 2 qui envoie le signal d'un nouveau compte
Cible2 = Reception-2000;
if( (Reception > 3000) && (Reception < 3999) )// c'est la cible 3 qui envoie le signal d'un nouveau compte
Cible3 = Reception-3000;
if( (Reception > 4000) && (Reception < 4999) )// c'est la cible 4 qui envoie le signal d'un nouveau compte
Cible4 = Reception-4000;
CompteurBleu = Cible2 + Cible4;
CompteurRouge = Cible1 + Cible3;
Reception = 0;
// Affichage des scores sur le LCD
lcd.clear();
lcd.setCursor(0, 0);// Colone 1 Ligne 0
lcd.print(F("Equipe bleue:")) ;
lcd.print(CompteurRouge);
lcd.setCursor(0, 1);// Colone 1 Ligne 0
lcd.print(F("Equipe rouge:")) ;
lcd.print(CompteurBleu);
}
boutonStop.actualiser();
}while( boutonStop != true );
// Affichage des scores sur le LCD
lcd.clear();
lcd.setCursor(0, 0);// Colone 1 Ligne 0
lcd.print(F("Fin de partie")) ;
//transmet la fin du jeu
delay(1000);
mySwitch.send(67, 24);
mySwitch.send(67, 24);
lcd.clear();
}// fin du IF d'appui sur le bouton vert
Je me tiens a dispo pour de plus amples informations si nécessaire...