ENIB 2022 - groupe A : Shooter Xtrem : Différence entre versions
(→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 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 = | + | unsigned long temps = 600; |
| − | |||
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( | ||
{ | { | ||
| − | + | //Initialisation de l'entrée | |
| − | + | 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 | + | 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 | + | 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() | void loop() | ||
{ | { | ||
| − | + | if (millis() - chrono >= temps) { // une seconde est passée | |
tempsmax --; | tempsmax --; | ||
| − | |||
if (tempsmax <= 0) { | if (tempsmax <= 0) { | ||
| − | + | //Affichage du Score final | |
| + | lcd.print ("Score final : "); | ||
lcd.print(val); | lcd.print(val); | ||
| + | //appel de la fonction initjeu() | ||
| + | initjeu(); | ||
} | } | ||
chrono = millis(); | 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 ("Score final : "); | ||
lcd.print(val); | lcd.print(val); | ||
| − | delay ( | + | //Fin du programme et qu'il ne tourne pas en boucle |
| + | exit(0); | ||
| + | delay (1000); | ||
} | } | ||
Version du 14 janvier 2022 à 15:33
Sommaire
photo avancement projet
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);
}
