ENIB 2022 - groupe C : Jeu de la corde : Différence entre versions
(→Catégories) |
|||
(19 révisions intermédiaires par 2 utilisateurs non affichées) | |||
Ligne 1 : | Ligne 1 : | ||
==photo de l'équipe== | ==photo de l'équipe== | ||
− | [[Fichier: | + | [[Fichier:Regle-tir-corde.png|600 px]] |
==Que fait ce projet ? == | ==Que fait ce projet ? == | ||
− | Il s’articule comme un jeu du tir à la corde, avec deux boutons pour le jeu, un bouton d'initialisation , un ruban de led et une carte | + | Il s’articule comme un jeu du tir à la corde, avec deux boutons pour le jeu, un bouton d'initialisation , un ruban de led et une carte D1 mini.<br> |
− | A chaque appuie sur le bouton la led se déplace du coté du joueur. L’adversaire fait de même de son côté. | + | A chaque appuie sur le bouton la led se déplace du coté du joueur. L’adversaire fait de même de son côté.<br> |
− | But du jeu, mettre la led de son côté. | + | But du jeu, mettre la led de son côté.<br> |
− | Le bouton d'initialisation permet de redémarrer le jeu a zéro. | + | Le bouton d'initialisation permet de redémarrer le jeu a zéro.<br> |
+ | |||
+ | [[Fichier:271283375 663960811312375 2742679284613237478 n.jpg|440px]] | ||
+ | [[Fichier:271354244 478487547023891 7814625120603058233 n.jpg|440px]] | ||
+ | [[Fichier:271493392 1128680897671462 5164840374888400180 n.jpg|250px]] | ||
+ | [[Fichier:Schema2.jpg|vignette]] | ||
==Liste des composants== | ==Liste des composants== | ||
Ligne 20 : | Ligne 25 : | ||
==Code== | ==Code== | ||
− | < | + | <syntaxhighlight lang="Arduino" line> |
/* | /* | ||
Ligne 64 : | Ligne 69 : | ||
bool anti_rebond_1 = true; //pour prendre le front montant du bouton 1 | bool anti_rebond_1 = true; //pour prendre le front montant du bouton 1 | ||
bool anti_rebond_2 = true; //pour prendre le front montant du bouton 2 | bool anti_rebond_2 = true; //pour prendre le front montant du bouton 2 | ||
+ | |||
+ | int presence=0; | ||
//Variables | //Variables | ||
Ligne 81 : | Ligne 88 : | ||
FastLED.addLeds<LED_TYPE, stripPin, COLOR_ORDER>(leds, NUM_LEDS); | FastLED.addLeds<LED_TYPE, stripPin, COLOR_ORDER>(leds, NUM_LEDS); | ||
FastLED.setBrightness( BRIGHTNESS ); | FastLED.setBrightness( BRIGHTNESS ); | ||
− | + | animation(); | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
} | } | ||
Ligne 128 : | Ligne 96 : | ||
void ledScenario(void ) { /* function ledScenario */ | void ledScenario(void ) { /* function ledScenario */ | ||
+ | |||
////LEDS Strip scenario | ////LEDS Strip scenario | ||
− | + | non_presence(); | |
//============ | //============ | ||
// bouton init | // bouton init | ||
Ligne 213 : | Ligne 182 : | ||
− | delay(0. | + | delay(0.1); //delai pour anti rebond |
Ligne 236 : | Ligne 205 : | ||
void loop_infiny(){ | void loop_infiny(){ | ||
while (digitalRead(button_init)){ //tant que le bouton init n'est pas activé | while (digitalRead(button_init)){ //tant que le bouton init n'est pas activé | ||
− | delay(1); | + | delay(0.1); |
+ | non_presence(); | ||
} | } | ||
ini();// | ini();// | ||
Ligne 251 : | Ligne 221 : | ||
FastLED.show(); | FastLED.show(); | ||
} | } | ||
− | </ | + | |
+ | void non_presence(){ | ||
+ | if (digitalRead(button_1)==1 and digitalRead(button_2)==1 and digitalRead(button_init)==1){ | ||
+ | presence ++; | ||
+ | Serial.println(presence); | ||
+ | if(presence>=3000) | ||
+ | { | ||
+ | while (test_bouton()==false) | ||
+ | { | ||
+ | animation(); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | } | ||
+ | else{Serial.println("else"); | ||
+ | presence =0;} | ||
+ | } | ||
+ | bool test_bouton(){ | ||
+ | if (digitalRead(button_1)==1 and digitalRead(button_2)==1 and digitalRead(button_init)==1) | ||
+ | { | ||
+ | return false; | ||
+ | } | ||
+ | else{return true;} | ||
+ | } | ||
+ | void eteind(){ | ||
+ | for (int j = 0; j < NUM_LEDS; j++) //eteint tout les lumieres et met la led du milieu allumé | ||
+ | { | ||
+ | leds[j] = CRGB::Black; | ||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | bool animation(){ | ||
+ | //================================================ | ||
+ | //annimation debut | ||
+ | //================================================ | ||
+ | i = 23; | ||
+ | |||
+ | for(int j = 0; j < NUM_LEDS/2; j++){ //les leds se rejoigne vers la led du milieu | ||
+ | if (test_bouton()==false) | ||
+ | { | ||
+ | leds[j].setRGB(15+j*8, 15+j*8, 255-j*8); | ||
+ | leds[NUM_LEDS-1-j].setRGB(15+j*8, 15+j*8, 255-j*8); | ||
+ | |||
+ | FastLED.show(); | ||
+ | delay(25); | ||
+ | } | ||
+ | else{eteind();return false;} | ||
+ | |||
+ | |||
+ | } | ||
+ | |||
+ | for(int j = 0; j < NUM_LEDS/2; j++) | ||
+ | { if (test_bouton()==false) | ||
+ | { //les leds se supprime vers la led du milieu | ||
+ | leds[j] = CRGB::Black; | ||
+ | leds[NUM_LEDS-1-j] = CRGB::Black; | ||
+ | FastLED.show(); | ||
+ | delay(25); | ||
+ | } | ||
+ | else{eteind();return false;} | ||
+ | } | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | leds[i].setRGB(255, 0, 255); //pareil mais dans l'autre sens | ||
+ | for(int j = 0; j < NUM_LEDS/2; j++) | ||
+ | { | ||
+ | if (test_bouton()==false) | ||
+ | { | ||
+ | leds[i+j].setRGB(15+j*8, 255-j*8,15+j*8); | ||
+ | leds[i-j].setRGB(15+j*8, 255-j*8, 15+j*8); | ||
+ | Serial.println(j); | ||
+ | FastLED.show(); | ||
+ | delay(25); | ||
+ | } | ||
+ | else{eteind();return false;} | ||
+ | } | ||
+ | |||
+ | for(int j = NUM_LEDS/2; j > 0; j--) | ||
+ | { | ||
+ | if (test_bouton()==false) | ||
+ | { | ||
+ | leds[i+j] = CRGB::Black; | ||
+ | leds[i-j] = CRGB::Black; | ||
+ | FastLED.show(); | ||
+ | delay(25); | ||
+ | } | ||
+ | else{eteind();return false;} | ||
+ | } | ||
+ | |||
+ | |||
+ | |||
+ | leds[i].setRGB(255, 0, 255); //allumage de la led du milieu pour le debut | ||
+ | leds[i+1].setRGB(255, 0, 255); //allumage de la led du milieu pour le debut | ||
+ | FastLED.show(); //affichage sur le ruban de led | ||
+ | return true; | ||
+ | |||
+ | } | ||
+ | |||
+ | </syntaxhighlight> | ||
==Catégories== | ==Catégories== | ||
Ligne 257 : | Ligne 328 : | ||
[[Catégorie:Enib2022]] | [[Catégorie:Enib2022]] | ||
[[Catégorie:arduino]] | [[Catégorie:arduino]] | ||
+ | [[Catégorie:led]][[Catégorie:ruban de led]][[Catégorie:WS1812B]] |
Version actuelle datée du 3 décembre 2023 à 12:21
photo de l'équipe
Que fait ce projet ?
Il s’articule comme un jeu du tir à la corde, avec deux boutons pour le jeu, un bouton d'initialisation , un ruban de led et une carte D1 mini.
A chaque appuie sur le bouton la led se déplace du coté du joueur. L’adversaire fait de même de son côté.
But du jeu, mettre la led de son côté.
Le bouton d'initialisation permet de redémarrer le jeu a zéro.
Liste des composants
- 3 boutons poussoir
- câbles
- ruban led (ici 48 led)
- arduino d1 mini
- breadboard
- Câble usb micro usb
Code
1 /*
2
3 BROCHAGE
4 _________________
5 / D1 mini \
6 |[ ]RST TX[ ]|
7 |[ ]A0 -GPIO RX[ ]|
8 |[ ]D0-16 5-D1[X]| - Button Init
9 |[ ]D5-14 4-D2[ ]| - Button 1
10 |[ ]D6-12 0-D3[ ]| - Ruban led
11 |[ ]D7-13 2-D4[ ]| - Button 2
12 |[ ]D8-15 GND[X]| - masse du ruban
13 |[ ]3V3 . 5V[X]| - Alim du ruban
14 | +---+ |
15 |_______|USB|_______|
16 Matériel :
17 - des fils dupont.
18 - un ruban de led
19 - un D1 mini
20 - ...*/
21 //Libraries
22 #include <FastLED.h>//https://github.com/FastLED/FastLED
23
24 //Constants
25 #define NUM_STRIPS 1 //un seul ruban de led
26 #define NUM_LEDS 48 // nombre de led dans le ruban
27 #define BRIGHTNESS 15 // luminosité
28 #define LED_TYPE WS2812B // type de LED
29 #define COLOR_ORDER RGB//BRG //ordre des couleurs
30 #define FASTLED_ALLOW_INTERRUPTS 0
31 #define FASTLED_INTERRUPT_RETRY_COUNT 1
32 #define FRAMES_PER_SECOND 60
33 #define COOLING 55
34 #define SPARKING 120
35
36 //Parameters
37 const int stripPin = 0; //ruban led D3
38 const int button_1 = 4; //broche D2
39 const int button_2 = 2; //broche D4
40 const int button_init = 5; //broche D1
41 int i = 23; //initialisation de la possition de la led
42 bool anti_rebond_1 = true; //pour prendre le front montant du bouton 1
43 bool anti_rebond_2 = true; //pour prendre le front montant du bouton 2
44
45 int presence=0;
46
47 //Variables
48 bool gReverseDirection = false;
49
50 //Objects
51 CRGB leds[NUM_LEDS]; //initialisation de tout les led
52
53 void setup() {
54 //Init Serial USB
55 Serial.begin(9600);
56 pinMode(button_1,INPUT_PULLUP);
57 pinMode(button_2,INPUT_PULLUP);
58 pinMode(button_init,INPUT_PULLUP);
59 Serial.println(F("Initialize System"));
60 //Init led strips
61 FastLED.addLeds<LED_TYPE, stripPin, COLOR_ORDER>(leds, NUM_LEDS);
62 FastLED.setBrightness( BRIGHTNESS );
63 animation();
64 }
65
66 void loop() {
67 ledScenario();
68 }
69
70 void ledScenario(void ) { /* function ledScenario */
71
72 ////LEDS Strip scenario
73 non_presence();
74 //============
75 // bouton init
76
77 if (digitalRead(button_init)==0){
78 ini();}
79
80 //============
81
82 //============
83 // bouton 1
84 if (digitalRead(button_1) == 0 ){
85 if (anti_rebond_1 == true){ // verifi si le bouton etait deja allumer ou pas
86 i++;
87 anti_rebond_1 = false;
88 if (i>=47){i=47;} // dans le cas ou la led est arriver au bout
89 leds[i].setRGB(255, 0, 255); //avancer la led
90 leds[i-1].setRGB(255, 0, 255); //avancer la led
91
92 if (i==0){leds[47] = CRGB::Black;} //
93 else {leds[i-2] = CRGB::Black;} // mets l'aute led eteint
94 FastLED.show(); // affiche les modification
95
96 }}
97 else{
98 anti_rebond_1 = true; // le bouton n'est pas appuié
99 }
100 //============
101
102 //============
103 // bouton 2 (même principe que le bouton 2 mais dans l'autre sens)
104 if (digitalRead(button_2) == 0 ){
105
106 if (anti_rebond_2 == true){
107 i--;
108 anti_rebond_2 = false;
109
110 if (i<=0){i=0;}
111 leds[i].setRGB(255, 0, 255);
112 leds[i+1].setRGB(255, 0, 255);
113
114
115 if (i==0){leds[1] = CRGB::Black;}
116 else{leds[i+2] = CRGB::Black;}
117 FastLED.show();
118 Serial.println(i);
119
120 }
121 }
122 else{
123 anti_rebond_2 = true;
124 }
125
126 //============
127
128 //===========
129 // verifie si le joueur 1 a gagné
130 if (i==47){
131 for(int j = 0; j < NUM_LEDS/2; j++){ //allume en vert le coté du joueur 1 et en rouge celui du joueur 2
132 leds[j].setRGB(0, 255, 0); //vert
133 leds[NUM_LEDS-1-j].setRGB(255, 0, 0); //rouge
134 FastLED.show();
135 delay(50);
136 }
137 Serial.println("gagner joueur 1");
138 loop_infiny(); //va dans une boucle infini
139 }
140
141 //===========
142
143 //===========
144 // verifie si le joueur 2 a gagné
145 if (i==0){
146 for(int j = 0; j < NUM_LEDS/2; j++){ //allume en vert le coté du joueur 2 et en rouge celui du joueur 1
147 leds[NUM_LEDS-1-j].setRGB(0, 255, 0);//vert
148 leds[j].setRGB(255, 0, 0); //rouge
149 FastLED.show();
150 delay(50);
151 }
152 Serial.println("gagner joueur 2");
153 loop_infiny();//va dans une boucle infini
154 }
155
156
157 delay(0.1); //delai pour anti rebond
158
159
160
161 /*
162 for (int i = 0; i < NUM_LEDS; i++) {
163 //leds[i] = CRGB::Goldenrod;
164 leds[i].setRGB(255, 0, 0);
165
166 FastLED.show();
167 delay(10);
168
169
170 }
171 for (int i = 0; i < NUM_LEDS; i++) {
172 leds[i] = CRGB::Black;
173 FastLED.show();
174 delay(10);
175 }
176 }*/
177 }
178 void loop_infiny(){
179 while (digitalRead(button_init)){ //tant que le bouton init n'est pas activé
180 delay(0.1);
181 non_presence();
182 }
183 ini();//
184
185 }
186
187 void ini(){
188 i = 23;
189 for (int j = 0; j < NUM_LEDS; j++) { //eteint tout les lumieres et met la led du milieu allumé
190 leds[j] = CRGB::Black;
191 }
192 leds[i].setRGB(255, 0, 255);
193 leds[i+1].setRGB(255, 0, 255);
194 FastLED.show();
195 }
196
197 void non_presence(){
198 if (digitalRead(button_1)==1 and digitalRead(button_2)==1 and digitalRead(button_init)==1){
199 presence ++;
200 Serial.println(presence);
201 if(presence>=3000)
202 {
203 while (test_bouton()==false)
204 {
205 animation();
206 }
207 }
208
209 }
210 else{Serial.println("else");
211 presence =0;}
212 }
213 bool test_bouton(){
214 if (digitalRead(button_1)==1 and digitalRead(button_2)==1 and digitalRead(button_init)==1)
215 {
216 return false;
217 }
218 else{return true;}
219 }
220 void eteind(){
221 for (int j = 0; j < NUM_LEDS; j++) //eteint tout les lumieres et met la led du milieu allumé
222 {
223 leds[j] = CRGB::Black;
224 }
225
226 }
227
228 bool animation(){
229 //================================================
230 //annimation debut
231 //================================================
232 i = 23;
233
234 for(int j = 0; j < NUM_LEDS/2; j++){ //les leds se rejoigne vers la led du milieu
235 if (test_bouton()==false)
236 {
237 leds[j].setRGB(15+j*8, 15+j*8, 255-j*8);
238 leds[NUM_LEDS-1-j].setRGB(15+j*8, 15+j*8, 255-j*8);
239
240 FastLED.show();
241 delay(25);
242 }
243 else{eteind();return false;}
244
245
246 }
247
248 for(int j = 0; j < NUM_LEDS/2; j++)
249 { if (test_bouton()==false)
250 { //les leds se supprime vers la led du milieu
251 leds[j] = CRGB::Black;
252 leds[NUM_LEDS-1-j] = CRGB::Black;
253 FastLED.show();
254 delay(25);
255 }
256 else{eteind();return false;}
257 }
258
259
260
261
262 leds[i].setRGB(255, 0, 255); //pareil mais dans l'autre sens
263 for(int j = 0; j < NUM_LEDS/2; j++)
264 {
265 if (test_bouton()==false)
266 {
267 leds[i+j].setRGB(15+j*8, 255-j*8,15+j*8);
268 leds[i-j].setRGB(15+j*8, 255-j*8, 15+j*8);
269 Serial.println(j);
270 FastLED.show();
271 delay(25);
272 }
273 else{eteind();return false;}
274 }
275
276 for(int j = NUM_LEDS/2; j > 0; j--)
277 {
278 if (test_bouton()==false)
279 {
280 leds[i+j] = CRGB::Black;
281 leds[i-j] = CRGB::Black;
282 FastLED.show();
283 delay(25);
284 }
285 else{eteind();return false;}
286 }
287
288
289
290 leds[i].setRGB(255, 0, 255); //allumage de la led du milieu pour le debut
291 leds[i+1].setRGB(255, 0, 255); //allumage de la led du milieu pour le debut
292 FastLED.show(); //affichage sur le ruban de led
293 return true;
294
295 }