Programme Afficheur Besoin d'aide please

Salut les amis,

Donc voila j'aurais besoin d'un peu d'aide concernant mon projet Laser Game Maison

Voici mon programme:

#include <LiquidCrystal.h> //ajout de la library LCD

LiquidCrystal lcd(12,11,4,5,6,7); //liaison 4 bits de données
int LED = 13;
int LED1 = 8;
int LED2 = 9;
int LED3 = 10;
int Afficheur = A1;
const String pseudo = "TitoGam3";





// Fonction setup(), appelée au démarrage de la carte Arduino
void setup() 
{

  // Initialise la communication avec le PC
  Serial.begin(9600);
  lcd.begin(16, 2);
  lcd.setCursor(0,0);
  lcd.print(pseudo);
  pinMode(LED,OUTPUT); //on définie le pin de sortie "LED" pin 2 du Arduino
  pinMode(LED1,OUTPUT);
  pinMode(LED2,OUTPUT);
  pinMode(LED3,OUTPUT);
  pinMode(Afficheur,OUTPUT);

  
}



// Fonction loop(), appelée continuellement en boucle tant que la carte Arduino est alimentée
void loop() 
{
  // Mesure la tension sur la broche A0
  int cibleAtteinte = analogRead(A0);
 
  // Envoi la mesure au PC pour affichage
  Serial.println(cibleAtteinte);
  

  if(cibleAtteinte>900) // si la cible à été touchée
  {
    clignote(500,3000); // clignote avec 0.5s d'interval pendant 3s  
    clignote(100,3000); // clignote avec 0.1s d'interval pendant 10s
    clignote(100,4000);
  }
    
 
}

// un appel à cette fonction fera clignoter la led pendant "temps" temps (en millisecondes)
// l'interval de temps entre la diode allumée et éteinte est spécifié par "interval" (en millisecondes)
void clignote(unsigned int interval, unsigned int temps)
{                                
  unsigned long debut_clignotement = millis(); // le temps (en ms) auquel on commence à clignoter   
  while(millis() - debut_clignotement < temps) // tant que le temps spécifié en paramètre ne s'est pas écoulé, on clignote à la vitesse spécifiée en paramètre
  {      
    
    digitalWrite(LED,HIGH);
    digitalWrite(LED1,HIGH);
    digitalWrite(LED2,HIGH);
    digitalWrite(LED3,HIGH); 
     
    delay(interval);
  
    digitalWrite(LED,LOW);
    digitalWrite(LED1,LOW);
    digitalWrite(LED2,LOW);
    digitalWrite(LED3,LOW);

    digitalWrite(LED,HIGH);
    delay(100);
    
    digitalWrite(LED,LOW);
    digitalWrite(LED1,HIGH);
    delay(100);
    
    digitalWrite(LED1,LOW); 
    digitalWrite(LED2,HIGH);
    delay(100);
    
    digitalWrite(LED2,LOW);
    digitalWrite(LED3,HIGH);
    delay(100);
    
    digitalWrite(LED3,LOW);
    delay(interval);

  }
}

Ce que j'aimerais, c'est que lorsque cibleAtteinte est supérieur à 900, alors ont allument les LED ce qui est déjà le cas donc pas de soucis, mes je voudrais également que mon afficheur affiche le score du joueur.

l'idée est de commencer avec 10.000 point et chaque fois que la cible est touche alors ont décrémente de 500 point arriver à zéro on affiche Game Over et pour ça je galère malgré mes heures d’effort.

hello

déclare une nouvelle fonction:

void lcd_score()
{
lcd.setCursor(1,0);
score = score-500;
if (score==0){lcd.print("termine");}
else {lcd.print(score);}
}

appelle là dans la loop juste après avoir fait clignoter tes leds
if(cibleAtteinte>900) // si la cible à été touchée
{
clignote(500,3000); // clignote avec 0.5s d'interval pendant 3s
clignote(100,3000); // clignote avec 0.1s d'interval pendant 10s
clignote(100,4000);
lcd_score();
}

sans oublier de déclarer la variable score avant le set up
LiquidCrystal lcd(12,11,4,5,6,7); //liaison 4 bits de données
int LED = 13;
int LED1 = 8;
int LED2 = 9;
int LED3 = 10;
int Afficheur = A1;
const String pseudo = "TitoGam3";
int score =10000;

non testé mais cela doit fonctionner
si l'affichage laisse des traces de l'ancien score, affiche une chaine d'espaces avant d'affiche le nouveau score

Du coup voici ce que ça donne, et ça fonctionne toujours pas le score n'est même pas affiché:

#include <LiquidCrystal.h> //ajout de la library LCD

LiquidCrystal lcd(12,11,4,5,6,7); //liaison 4 bits de données
int LED = 13;
int LED1 = 8;
int LED2 = 9;
int LED3 = 10;
int Afficheur = A1;
const String pseudo = "TitoGam3";
int score = 10000;


void lcdScore()
{
  lcd.setCursor(5,1);
  lcd.print(score);
  score = score - 500;
  if(score==0){lcd.print("Game Over");}
  else {lcd.print(score);}
}


// Fonction setup(), appelée au démarrage de la carte Arduino
void setup() 
{

  // Initialise la communication avec le PC
  Serial.begin(9600);
  lcd.begin(16, 2);
  lcd.setCursor(0,0);
  lcd.print(pseudo);
  pinMode(LED,OUTPUT); //on définie le pin de sortie "LED" pin 2 du Arduino
  pinMode(LED1,OUTPUT);
  pinMode(LED2,OUTPUT);
  pinMode(LED3,OUTPUT);
  pinMode(Afficheur,OUTPUT);

  
}



// Fonction loop(), appelée continuellement en boucle tant que la carte Arduino est alimentée
void loop() 
{
  // Mesure la tension sur la broche A0
  int cibleAtteinte = analogRead(A0);

 
  // Envoi la mesure au PC pour affichage
  Serial.println(cibleAtteinte);

  

  if(cibleAtteinte>900) // si la cible à été touchée  
  {
    clignote(500,3000); // clignote avec 0.5s d'interval pendant 3s  
    clignote(100,3000); // clignote avec 0.1s d'interval pendant 10s
    clignote(100,4000);
    lcdScore();
  }  

 
}

// un appel à cette fonction fera clignoter la led pendant "temps" temps (en millisecondes)
// l'interval de temps entre la diode allumée et éteinte est spécifié par "interval" (en millisecondes)
void clignote(unsigned int interval, unsigned int temps)
{                                
  unsigned long debut_clignotement = millis(); // le temps (en ms) auquel on commence à clignoter   
  while(millis() - debut_clignotement < temps) // tant que le temps spécifié en paramètre ne s'est pas écoulé, on clignote à la vitesse spécifiée en paramètre
  {      
    digitalWrite(LED,HIGH);
    digitalWrite(LED1,HIGH);
    digitalWrite(LED2,HIGH);
    digitalWrite(LED3,HIGH); 
     
    delay(interval);
  
    digitalWrite(LED,LOW);
    digitalWrite(LED1,LOW);
    digitalWrite(LED2,LOW);
    digitalWrite(LED3,LOW);

    digitalWrite(LED,HIGH);
    delay(100);
    
    digitalWrite(LED,LOW);
    digitalWrite(LED1,HIGH);
    delay(100);
    
    digitalWrite(LED1,LOW); 
    digitalWrite(LED2,HIGH);
    delay(100);
    
    digitalWrite(LED2,LOW);
    digitalWrite(LED3,HIGH);
    delay(100);
    
    digitalWrite(LED3,LOW);
    delay(interval);

  }

  






}

hello chez moi, le code suivant fonctionne.
la différence avec ton code: l'affectation des pinoches du LCD et des leds

pour tester, j'ai relié A0 et le +5V avec un fil.
tu verras le score se décrémenter en fonction des délais de ta fonction de clignotement

#include <LiquidCrystal.h> //ajout de la library LCD
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
//LiquidCrystal lcd(12,11,4,5,6,7); //liaison 4 bits de données
int LED = 13;
int LED1 = 12;
int LED2 = 11;
int LED3 = 3;
int Afficheur = A1;
const String pseudo = "TitoGam3";
int score = 10000;



// Fonction setup(), appelée au démarrage de la carte Arduino
void setup()
{

  // Initialise la communication avec le PC
  Serial.begin(9600);
  lcd.begin(16, 2);
  lcd.setCursor(0, 0);
  lcd.print(pseudo);
  pinMode(LED, OUTPUT); //on définie le pin de sortie "LED" pin 2 du Arduino
  pinMode(LED1, OUTPUT);
  pinMode(LED2, OUTPUT);
  pinMode(LED3, OUTPUT);
  pinMode(Afficheur, OUTPUT);


}



// Fonction loop(), appelée continuellement en boucle tant que la carte Arduino est alimentée
void loop()
{
  // Mesure la tension sur la broche A0
  int cibleAtteinte = analogRead(A0);

  // Envoi la mesure au PC pour affichage
  Serial.println(cibleAtteinte);


  if (cibleAtteinte > 900) // si la cible à été touchée
  {
    clignote(500, 3000); // clignote avec 0.5s d'interval pendant 3s
    clignote(100, 3000); // clignote avec 0.1s d'interval pendant 10s
    clignote(100, 4000);
    lcd_score();
  }
}
void lcd_score()
{
  lcd.setCursor(0, 1);
  lcd.print("              ");
  lcd.setCursor(0, 1);
  score = score - 500;
  if (score == 0) {
    lcd.print("termine");
  }
  else {
    lcd.print(score);
  }
  delay(1000);
}


// un appel à cette fonction fera clignoter la led pendant "temps" temps (en millisecondes)
// l'interval de temps entre la diode allumée et éteinte est spécifié par "interval" (en millisecondes)

void clignote(unsigned int interval, unsigned int temps)
{
  unsigned long debut_clignotement = millis(); // le temps (en ms) auquel on commence à clignoter
  while (millis() - debut_clignotement < temps) // tant que le temps spécifié en paramètre ne s'est pas écoulé, on clignote à la vitesse spécifiée en paramètre
  {

    digitalWrite(LED, HIGH);
    digitalWrite(LED1, HIGH);
    digitalWrite(LED2, HIGH);
    digitalWrite(LED3, HIGH);

    delay(interval);

    digitalWrite(LED, LOW);
    digitalWrite(LED1, LOW);
    digitalWrite(LED2, LOW);
    digitalWrite(LED3, LOW);

    digitalWrite(LED, HIGH);
    delay(100);

    digitalWrite(LED, LOW);
    digitalWrite(LED1, HIGH);
    delay(100);

    digitalWrite(LED1, LOW);
    digitalWrite(LED2, HIGH);
    delay(100);

    digitalWrite(LED2, LOW);
    digitalWrite(LED3, HIGH);
    delay(100);

    digitalWrite(LED3, LOW);
    delay(interval);

  }
}

En faite j'ai écris ça et ça fonctionne, le seul problème c'est qu'une fois qu'il reste 500 point si la cible est touché on affiche bien Game Over mais parcontre les LEDS ne clignote plus

#include <LiquidCrystal.h> //ajout de la library LCD
LiquidCrystal lcd(12,11,4,5,6,7); //liaison 4 bits de données
int LED = 13;
int LED1 = 8;
int LED2 = 9;
int LED3 = 10;
int Afficheur = A1;
const String pseudo = "TitoGam3";


int score = 500; // val

// Fonction setup(), appelée au démarrage de la carte Arduino
void setup() 
{
  // Initialise la communication avec le PC
  Serial.begin(9600);
  lcd.begin(16, 2);
  lcd.setCursor(0,0);
  lcd.print(pseudo);
  lcd.setCursor(5,1);
  lcd.print(score);
  pinMode(LED,OUTPUT); //on définie le pin de sortie "LED" pin 2 du Arduino
  pinMode(LED1,OUTPUT);
  pinMode(LED2,OUTPUT);
  pinMode(LED3,OUTPUT);
  pinMode(Afficheur,OUTPUT);
  
}
// Fonction loop(), appelée continuellement en boucle tant que la carte Arduino est alimentée
void loop() 
{
  
  // Mesure la tension sur la broche A0
  int cibleAtteinte = analogRead(A0);
 
  // Envoi la mesure au PC pour affichage
  Serial.println(cibleAtteinte);
  if(cibleAtteinte>900) // si la cible à été touchée  
  {
  score -= 500; 
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print(pseudo);
  lcd.setCursor(5,1);
  lcd.print(score);
  
  if(score <= 0)
  { 
    lcd.clear();
    lcd.setCursor(3,0);
    lcd.print("Game Over");
  
  }
  else 
  { 
    clignote(500,3000); // clignote avec 0.5s d'interval pendant 3s  
    clignote(100,3000); // clignote avec 0.1s d'interval pendant 10s
    clignote(100,4000);
  } 
    
  }  
 
}
// un appel à cette fonction fera clignoter la led pendant "temps" temps (en millisecondes)
// l'interval de temps entre la diode allumée et éteinte est spécifié par "interval" (en millisecondes)
void clignote(unsigned int interval, unsigned int temps)
{                                
  unsigned long debut_clignotement = millis(); // le temps (en ms) auquel on commence à clignoter   
  while(millis() - debut_clignotement < temps) // tant que le temps spécifié en paramètre ne s'est pas écoulé, on clignote à la vitesse spécifiée en paramètre
  {      
    digitalWrite(LED,HIGH);
    digitalWrite(LED1,HIGH);
    digitalWrite(LED2,HIGH);
    digitalWrite(LED3,HIGH); 
     
    delay(interval);
  
    digitalWrite(LED,LOW);
    digitalWrite(LED1,LOW);
    digitalWrite(LED2,LOW);
    digitalWrite(LED3,LOW);
    digitalWrite(LED,HIGH);
    delay(100);
    
    digitalWrite(LED,LOW);
    digitalWrite(LED1,HIGH);
    delay(100);
    
    digitalWrite(LED1,LOW); 
    digitalWrite(LED2,HIGH);
    delay(100);
    
    digitalWrite(LED2,LOW);
    digitalWrite(LED3,HIGH);
    delay(100);
    
    digitalWrite(LED3,LOW);
    delay(interval);
  }
  
}

tu es débloqué maintenant, si tu veux que cette expérience te soit bénéfique, il te suffit de réfléchir un peu

#include <LiquidCrystal.h> //ajout de la library LCD
LiquidCrystal lcd(12, 11, 4, 5, 6, 7); //liaison 4 bits de données
int LED = 13;
int LED1 = 8;
int LED2 = 9;
int LED3 = 10;
int Afficheur = A1;
const String pseudo = "TitoGam3";


int score = 500; // val

// Fonction setup(), appelée au démarrage de la carte Arduino
void setup()
{
  // Initialise la communication avec le PC
  Serial.begin(9600);
  lcd.begin(16, 2);
  lcd.setCursor(0, 0);
  lcd.print(pseudo);
  lcd.setCursor(5, 1);
  lcd.print(score);
  pinMode(LED, OUTPUT); //on définie le pin de sortie "LED" pin 2 du Arduino
  pinMode(LED1, OUTPUT);
  pinMode(LED2, OUTPUT);
  pinMode(LED3, OUTPUT);
  pinMode(Afficheur, OUTPUT);

}
// Fonction loop(), appelée continuellement en boucle tant que la carte Arduino est alimentée
void loop()
{

  // Mesure la tension sur la broche A0
  int cibleAtteinte = analogRead(A0);

  // Envoi la mesure au PC pour affichage
  Serial.println(cibleAtteinte);
  if (cibleAtteinte > 900) // si la cible à été touchée
  {
    score -= 500;
    if (score <= 0)
    {
      lcd.clear();
      lcd.setCursor(3, 0);
      lcd.print("Game Over");
    }
    else
    {
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print(pseudo);
    lcd.setCursor(5, 1);
    lcd.print(score);
    clignote(500, 3000); // clignote avec 0.5s d'interval pendant 3s
    clignote(100, 3000); // clignote avec 0.1s d'interval pendant 10s
    clignote(100, 4000);
    }
  }
}
// un appel à cette fonction fera clignoter la led pendant "temps" temps (en millisecondes)
// l'interval de temps entre la diode allumée et éteinte est spécifié par "interval" (en millisecondes)
void clignote(unsigned int interval, unsigned int temps)
{
  unsigned long debut_clignotement = millis(); // le temps (en ms) auquel on commence à clignoter
  while (millis() - debut_clignotement < temps) // tant que le temps spécifié en paramètre ne s'est pas écoulé, on clignote à la vitesse spécifiée en paramètre
  {
    digitalWrite(LED, HIGH);
    digitalWrite(LED1, HIGH);
    digitalWrite(LED2, HIGH);
    digitalWrite(LED3, HIGH);

    delay(interval);

    digitalWrite(LED, LOW);
    digitalWrite(LED1, LOW);
    digitalWrite(LED2, LOW);
    digitalWrite(LED3, LOW);
    digitalWrite(LED, HIGH);
    delay(100);

    digitalWrite(LED, LOW);
    digitalWrite(LED1, HIGH);
    delay(100);

    digitalWrite(LED1, LOW);
    digitalWrite(LED2, HIGH);
    delay(100);

    digitalWrite(LED2, LOW);
    digitalWrite(LED3, HIGH);
    delay(100);

    digitalWrite(LED3, LOW);
    delay(interval);
  }

}

Merci pour ton aide en tout cas :slight_smile: