ENIB 2022 - groupe A : Shooter Xtrem : Différence entre versions

De Les Fabriques du Ponant
Aller à : navigation, rechercher
(Liste des composants)
(Code)
Ligne 35 : Ligne 35 :
  
 
rgb_lcd lcd;
 
rgb_lcd lcd;
 +
 
const int colorR = 0;
 
const int colorR = 0;
 
const int colorG = 255;
 
const int colorG = 255;
 
const int colorB = 0;
 
const int colorB = 0;
int photocellPin = 0; // the cell and 10K pulldown are connected to a0
 
int photocellReading; // the analog reading from the analog resistor divider
 
 
int tps = 0;
 
int tps = 0;
int tps_restant = 0;
+
int tps_restant = 0;  
 
int val = 0;  
 
int val = 0;  
int i =0;
+
int i =0;
 
unsigned long chrono;
 
unsigned long chrono;
unsigned long temps = 1000;
+
unsigned long temps = 600;
unsigned long tempsled = 500; // Durée d'allumage des leds des joueurs
 
 
int tempsmax; // Temps max par manche
 
int tempsmax; // Temps max par manche
 +
byte nb_pts1;    // NB DE POINTS (0 à 255) joueur 1 
 +
int bouton = 2;
 +
int points; 
  
 
+
void setup()  
void setup(void)  
 
 
{
 
{
  // We'll send debugging information via the Serial monitor
+
    //Initialisation de l'entrée
  // set up the LCD's number of columns and rows:
+
    pinMode(bouton, INPUT_PULLUP);
 +
    // Initialisation du nombre de colonnes et de lignes
 
     lcd.begin(16, 2);
 
     lcd.begin(16, 2);
     lcd.setRGB(colorR, colorG, colorB);
+
    //Définition de la couleur de l'écran
 +
     lcd.setRGB(colorR, colorG, colorB);  
 
     delay(1000);
 
     delay(1000);
 +
    Serial.begin(9600);
 
}
 
}
  
int loop_lumiere()
+
void affichetemps(int temps)  
 
{
 
{
// Mesure la tension sur la broche A0
+
    byte minutes = temps / 60;
  int lumiere = analogRead(A0);
+
    byte secondes = temps % 60;
  // Envoi la mesure au PC pour affichage et attends 250ms
+
    int tempsaff = minutes + secondes;
  lcd.setCursor(13,1);  
+
    //affichage du temps restant à la première colonne et la première ligne car on ne met pas de setCursor
  //Serial.println(lumiere);
+
    lcd.print("Tps restant:");
  lcd.print(lumiere);
+
    lcd.print(tempsaff);
  if (lumiere < 965)
 
    {
 
    val += 1;
 
    }
 
  delay(50);
 
  return lumiere;
 
 
}
 
}
  
void affichetemps(int temps) {
+
void initjeu () {
  byte minutes = temps / 60;
+
    // Temps max 01:00
  byte secondes = temps % 60;
+
    tempsmax = 60 * SECONDES;
  int tempsaff = minutes * 100 + secondes;
+
    // NB DE POINTS (0 à 255) joueur 1
  timer.showNumberDecEx(tempsaff, 0b01000000, true, 4);
+
    val = 0;  
 +
    //appel de la fonction tempsmax
 +
    affichetemps(tempsmax);
 +
    // Initialisation de d'un chrono avec la fonction millis()
 +
    chrono = millis();
 
}
 
}
  
 +
 
 
void loop()  
 
void loop()  
 
{
 
{
  
  if (millis() - chrono >= temps) { // une seconde est passée
+
    if (millis() - chrono >= temps) { // une seconde est passée
 
     tempsmax --;
 
     tempsmax --;
    affichetemps(tempsmax);
 
 
     if (tempsmax <= 0) {
 
     if (tempsmax <= 0) {
    lcd.print ("Score final : ");  
+
    //Affichage du Score final
 +
    lcd.print ("Score final : ");  
 
     lcd.print(val);
 
     lcd.print(val);
 +
    //appel de la fonction initjeu()
 +
    initjeu();
 
     }
 
     }
 
     chrono = millis();
 
     chrono = millis();
 +
    }
  
  for (tps==0; tps<=30; tps+=1){  
+
    //initialisation de la boucle de jeu
      tps_restant = 30-tps;
+
    for (tps==0; tps<=600; tps+=1)
      lcd.print("Tps restant : ");
+
    {  
      lcd.print(tps_restant);
+
        //calcul du temps restant et affichage
      lcd.setCursor(0,1);  
+
        tps_restant = 600-tps;
      lcd.print("Score : ");
+
        lcd.print("Tps restant:");
      lcd.print(val);
+
        lcd.print(tps_restant);
      loop_lumiere();
+
        //Mise du curseur sur la 1ere ligne (réellement la 2eme car commence a 0)
      delay(1000);
+
        lcd.setCursor(0,1);
      lcd.clear();
+
        //Lecture du Pin 2(correspond à la variable bouton)
     }
+
        points = digitalRead(bouton);
 +
        //Compteur de points, nous l'avons d'abord défini en INPUT_PULLUP donc on va ajouter un point lorsque l'état sera au niveau bas
 +
        if (points == LOW)
 +
        {
 +
          val+=1;
 +
          //On rajoute un délai pour prévoir les rebonds des ballons et pas que cela compte 2 fois
 +
          delay(50); 
 +
        }
 +
        //Affichage du score en temps réel
 +
        lcd.print("Score:");
 +
        lcd.print(val);
 +
        delay(100);
 +
        //Effacage de la valeur du score précédente pour afficher le nouveau score
 +
        lcd.clear();
 +
    }
 +
     //Affichage du score final
 
     lcd.print ("Score final : ");  
 
     lcd.print ("Score final : ");  
 
     lcd.print(val);
 
     lcd.print(val);
     delay (10000);
+
    //Fin du programme et qu'il ne tourne pas en boucle
 +
    exit(0);
 +
     delay (1000);
 
}
 
}
  

Version du 14 janvier 2022 à 16:33

photo avancement projet

270071326 447600900357691 1530611859194850467 n.jpg 270024821 391452386068089 3789371443119279615 n.jpg Sss269612951 629632591698040 3242314274375280698 n.jpg 271783785 268596031880956 6703405487252758256 n.jpg

Que fait ce projet ?

Shooter Xtrem : C'est une borne de basket tel que l'on peut voir dans les fêtes foraine ou bowling, Qui fonctionne à l'aide d'une photo résistance et d'un afficheur.

Le premier but notre jeu est de marquer un maximum de panier en un temps donné, Ensuite si deux machines similaires sont côte à côte il sera possible de s'affronter pour faire le meilleur score.

Liste des composants

  • Carte Arduino Nano
  • Aluminium
  • Afficheur LCD
  • Câbles électronique
  • Carton
  • Panier de basket
  • Bois

Code

ici je pose mon code documenté !

#include <Wire.h>
#include "rgb_lcd.h"

#define MINUTES 60
#define SECONDES 1

rgb_lcd lcd;

const int colorR = 0;
const int colorG = 255;
const int colorB = 0;
int tps = 0;
int tps_restant = 0; 
int val = 0; 
int i =0;
unsigned long chrono;
unsigned long temps = 600;
int tempsmax; // Temps max par manche
byte nb_pts1;     // NB DE POINTS (0 à 255) joueur 1  
int bouton = 2;
int points;  

void setup() 
{
    //Initialisation de l'entrée 
    pinMode(bouton, INPUT_PULLUP);
    // Initialisation du nombre de colonnes et de lignes
    lcd.begin(16, 2);
    //Définition de la couleur de l'écran 
    lcd.setRGB(colorR, colorG, colorB); 
    delay(1000);
    Serial.begin(9600);
}

void affichetemps(int temps) 
{
    byte minutes = temps / 60;
    byte secondes = temps % 60;
    int tempsaff = minutes + secondes;
    //affichage du temps restant à la première colonne et la première ligne car on ne met pas de setCursor
    lcd.print("Tps restant:");
    lcd.print(tempsaff);
}

void initjeu () {
    // Temps max 01:00
    tempsmax = 60 * SECONDES;
    // NB DE POINTS (0 à 255) joueur 1 
    val = 0; 
    //appel de la fonction tempsmax
    affichetemps(tempsmax);
    // Initialisation de d'un chrono avec la fonction millis()
    chrono = millis();
}

  
void loop() 
{

    if (millis() - chrono >= temps) { // une seconde est passée
    tempsmax --;
    if (tempsmax <= 0) {
    //Affichage du Score final
    lcd.print ("Score final : "); 
    lcd.print(val);
    //appel de la fonction initjeu()
    initjeu();
    }
    chrono = millis();
    }

    //initialisation de la boucle de jeu 
    for (tps==0; tps<=600; tps+=1)
    { 
        //calcul du temps restant et affichage 
        tps_restant = 600-tps;
        lcd.print("Tps restant:");
        lcd.print(tps_restant);
        //Mise du curseur sur la 1ere ligne (réellement la 2eme car commence a 0) 
        lcd.setCursor(0,1);
        //Lecture du Pin 2(correspond à la variable bouton)
        points = digitalRead(bouton);
        //Compteur de points, nous l'avons d'abord défini en INPUT_PULLUP donc on va ajouter un point lorsque l'état sera au niveau bas
        if (points == LOW)
        { 
          val+=1;
          //On rajoute un délai pour prévoir les rebonds des ballons et pas que cela compte 2 fois 
          delay(50);  
        }
        //Affichage du score en temps réel 
        lcd.print("Score:");
        lcd.print(val);
        delay(100);
        //Effacage de la valeur du score précédente pour afficher le nouveau score 
        lcd.clear();
     }
    //Affichage du score final 
    lcd.print ("Score final : "); 
    lcd.print(val);
    //Fin du programme et qu'il ne tourne pas en boucle
    exit(0);
    delay (1000);
}

Catégories