ENIB 2022 - groupe A : Shooter Xtrem : Différence entre versions
(→ytyooghbjhbjhde l'équipe) |
(→photo avancement projet) |
||
(18 révisions intermédiaires par le même utilisateur non affichées) | |||
Ligne 1 : | Ligne 1 : | ||
==photo avancement projet== | ==photo avancement projet== | ||
− | [[Fichier:270071326_447600900357691_1530611859194850467_n.jpg|400px]] | + | [[Fichier:270071326_447600900357691_1530611859194850467_n.jpg|200px]] |
− | [[Fichier: | + | [[Fichier:270024821_391452386068089_3789371443119279615_n.jpg|400px]] |
+ | [[Fichier:Sss269612951_629632591698040_3242314274375280698_n.jpg|200px]] | ||
+ | [[Fichier:271783785_268596031880956_6703405487252758256_n.jpg|200px]] | ||
+ | [[Fichier:271537616_474585730862874_1246142850589936233_n.jpg|300px]] | ||
+ | [[Fichier:271526522_657575475371940_7368155090033568803_n.jpg|400px]] | ||
==Que fait ce projet ? == | ==Que fait ce projet ? == | ||
Shooter Xtrem : | Shooter Xtrem : | ||
− | C'est une borne de basket tel que l'on peut voir dans les fêtes foraine ou bowling, | + | C'est une borne de basket tel que l'on peut voir dans les fêtes foraine ou au bowling, |
− | + | qui fonctionne à l'aide de 2 feuilles d'aluminium qui auront le même fonctionnement comme un bouton poussoir et d'un afficheur. | |
− | Le | + | == Explication du projet == |
− | + | ||
+ | Lorsque le ballon passera par le panier, un morceau de carton avec du papier aluminium collé dessus touchera (il y aura contact) un morceau d'aluminium en dessous. | ||
+ | Ceci formera une boucle fermé ce qui aura le même principe qu'un bouton poussoir. | ||
+ | |||
+ | == Objectif de notre projet == | ||
+ | |||
+ | Le but de notre jeu est de marquer un maximum de panier en un temps donné. | ||
==Liste des composants== | ==Liste des composants== | ||
* Carte Arduino Nano | * Carte Arduino Nano | ||
− | * | + | * Aluminium |
− | |||
* Afficheur LCD | * Afficheur LCD | ||
− | * | + | * Câbles électronique |
− | * | + | * Carton |
+ | * Panier de basket | ||
+ | * Bois (pour renforcer) | ||
==Code== | ==Code== | ||
Ligne 32 : | Ligne 43 : | ||
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); | ||
} | } | ||
</pre> | </pre> | ||
+ | |||
+ | == Schéma du projet == | ||
+ | |||
+ | [[Fichier:271493921_998424577409400_5886261970793847143_n.jpg|800px]] | ||
==Catégories== | ==Catégories== | ||
[[Catégorie:Enib2022]] | [[Catégorie:Enib2022]] |
Version actuelle datée du 14 janvier 2022 à 17:21
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 au bowling, qui fonctionne à l'aide de 2 feuilles d'aluminium qui auront le même fonctionnement comme un bouton poussoir et d'un afficheur.
Explication du projet
Lorsque le ballon passera par le panier, un morceau de carton avec du papier aluminium collé dessus touchera (il y aura contact) un morceau d'aluminium en dessous. Ceci formera une boucle fermé ce qui aura le même principe qu'un bouton poussoir.
Objectif de notre projet
Le but de notre jeu est de marquer un maximum de panier en un temps donné.
Liste des composants
- Carte Arduino Nano
- Aluminium
- Afficheur LCD
- Câbles électronique
- Carton
- Panier de basket
- Bois (pour renforcer)
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); }