ENIB 2022 - groupe C : Snarkade : Différence entre versions
(→Programme principal) |
|||
Ligne 24 : | Ligne 24 : | ||
<pre> | <pre> | ||
+ | |||
+ | Nous allons utiliser le module vector afin de rassembler les éléments du serpent, le module snake que nous avons fait, et le module ledcontrol afin de gérer plus facilement les matrices de led. | ||
#include <Vector.h> | #include <Vector.h> | ||
#include "snake.h" | #include "snake.h" | ||
#include "LedControl.h" | #include "LedControl.h" | ||
+ | |||
snake::snake(int l = 1, char dir ='r' , Vector<int> initial_pos ={}): | snake::snake(int l = 1, char dir ='r' , Vector<int> initial_pos ={}): | ||
Ligne 49 : | Ligne 52 : | ||
− | void snake::grow(){ | + | void snake::grow(){ //la fonction qui fait grandir le serpent |
lenght += 1; | lenght += 1; | ||
Vector<int> v; | Vector<int> v; | ||
Ligne 81 : | Ligne 84 : | ||
}; | }; | ||
− | void snake::move(){ | + | void snake::move(){ //déplacement du serpent |
Vector<int> v; | Vector<int> v; | ||
Vector<Vector<int>> b; | Vector<Vector<int>> b; | ||
Ligne 118 : | Ligne 121 : | ||
}; | }; | ||
− | void snake::death(){ | + | void snake::death(){ |
alive = false; | alive = false; | ||
}; | }; | ||
− | bool snake::getAlive(){ | + | bool snake::getAlive(){ les gets pour récupérer les informations du serpent. |
return alive; | return alive; | ||
} | } | ||
Ligne 142 : | Ligne 145 : | ||
} | } | ||
− | LedControl lc1=LedControl(12,11,10,2); | + | //Début de la partie d'affichage. |
− | LedControl lc2=LedControl(9,8,7,2); | + | |
+ | LedControl lc1=LedControl(12,11,10,2); //Création des séries de matrices, 12 11 10 sont les pin pour Din, CLK, CS, et 2 pour le nombres de matrices branchées dans la série. | ||
+ | LedControl lc2=LedControl(9,8,7,2); | ||
int longueur; | int longueur; | ||
int ligne; | int ligne; | ||
Ligne 149 : | Ligne 154 : | ||
int adresse; | int adresse; | ||
− | void affichageSerpent( | + | void affichageSerpent(){ //affichage du serpent, nous effaçons toute la grille, puis nous reparcouron tout le serpent pour en afficher les éléments. |
Vector<Vector<int>> corps = snake1.getBody(); | Vector<Vector<int>> corps = snake1.getBody(); | ||
Ligne 159 : | Ligne 164 : | ||
for(int i = 0; longueur; i++){ | for(int i = 0; longueur; i++){ | ||
− | while(corps[i][0]>15){ | + | while(corps[i][0]>15){ //Pour chaque section, on récupère l'adresse, si elle dépasse 15 elle est en dehors, nous le faisons donc revenir de l'autre côté |
x = corps[i][0]-16; | x = corps[i][0]-16; | ||
} | } | ||
− | while(corps[i][1]>7){ | + | while(corps[i][1]>7){ |
y = corps[i][1]-16; | y = corps[i][1]-16; | ||
} | } | ||
− | if(x>7){ | + | if(x>7){ //Selon la position il va s'afficher sur tel ou tel matrice |
adresse=1; | adresse=1; | ||
} | } | ||
Ligne 175 : | Ligne 180 : | ||
if(y>7){ | if(y>7){ | ||
− | y-=8; | + | y-=8; //selon la hauteur, il va s'afficher sur sur la première ou la seconde série de led. |
lc2.setLed(adresse,y,x,1); | lc2.setLed(adresse,y,x,1); | ||
} | } |
Version actuelle datée du 17 janvier 2022 à 16:20
Sommaire
Que fait ce projet ?
Tentative de création d'une petite borne d'arcade avec le jeu Snake.
Étant donné que les matrices de LED utilisées pour le projet ne marche qu'à moitié, le projet n'a pas pu être terminé.
Liste des composants
- 4 matrices de LED 8x8 1088AS
- 6 boutons
- 1 interrupteur
- 1 Arduino Nano
- Pleins de cables
Schéma électronique
Code
Programme principal
Nous allons utiliser le module vector afin de rassembler les éléments du serpent, le module snake que nous avons fait, et le module ledcontrol afin de gérer plus facilement les matrices de led. #include <Vector.h> #include "snake.h" #include "LedControl.h" snake::snake(int l = 1, char dir ='r' , Vector<int> initial_pos ={}): lenght(l),direction(dir) { initial_pos.push_back(8); initial_pos.push_back(8); body.push_back(initial_pos); }; //pin 2 pour gauche, pin 3 pour bas, pin 4 pour haut et pin 5 pour droite void snake::change_direction(){ if(digitalRead(2) == true){ direction = 'l'; }else{if(digitalRead(3) == true){ direction = 'd'; }else{if(digitalRead(4) == true){ direction = 'u'; }else{if(digitalRead(5) == true){ direction = 'r';}}} } }; void snake::grow(){ //la fonction qui fait grandir le serpent lenght += 1; Vector<int> v; switch(direction) { case 'u': v.push_back(body[0][0]); v.push_back(body[0][1] + 1); body.push_back(v); break; case 'd': v.push_back(body[0][0]); v.push_back(body[0][1] - 1); body.push_back(v); break; case 'r': v.push_back(body[0][0] + 1); v.push_back(body[0][1]); body.push_back(v); break; case 'l': v.push_back(body[0][0] - 1); v.push_back(body[0][1]); body.push_back(v); break; } v.clear(); }; void snake::move(){ //déplacement du serpent Vector<int> v; Vector<Vector<int>> b; for(long unsigned int a = 1; a < body.size() - 1; a++){ b.push_back(body[a]); } switch(direction) { case 'u': v.push_back(body[0][0]); v.push_back(body[0][1] + 1); b.push_back(v); break; case 'd': v.push_back(body[0][0]); v.push_back(body[0][1] - 1); b.push_back(v); break; case 'r': v.push_back(body[0][0] + 1); v.push_back(body[0][1]); b.push_back(v); break; case 'l': v.push_back(body[0][0] - 1); v.push_back(body[0][1]); b.push_back(v); break; } body.clear(); body = b; v.clear(); }; void snake::death(){ alive = false; }; bool snake::getAlive(){ les gets pour récupérer les informations du serpent. return alive; } char snake::getDirection(){ return direction; } Vector<Vector<int>> snake::getBody(){ return body; } void snake::setAlive(bool status){ alive = status; } int snake::getLenght(){ return body.size(); } //Début de la partie d'affichage. LedControl lc1=LedControl(12,11,10,2); //Création des séries de matrices, 12 11 10 sont les pin pour Din, CLK, CS, et 2 pour le nombres de matrices branchées dans la série. LedControl lc2=LedControl(9,8,7,2); int longueur; int ligne; int colonne; int adresse; void affichageSerpent(){ //affichage du serpent, nous effaçons toute la grille, puis nous reparcouron tout le serpent pour en afficher les éléments. Vector<Vector<int>> corps = snake1.getBody(); longueur = corps.size(); //[0] = x //[1] = y int x,y; for(int i = 0; longueur; i++){ while(corps[i][0]>15){ //Pour chaque section, on récupère l'adresse, si elle dépasse 15 elle est en dehors, nous le faisons donc revenir de l'autre côté x = corps[i][0]-16; } while(corps[i][1]>7){ y = corps[i][1]-16; } if(x>7){ //Selon la position il va s'afficher sur tel ou tel matrice adresse=1; } else { adresse=0; } if(y>7){ y-=8; //selon la hauteur, il va s'afficher sur sur la première ou la seconde série de led. lc2.setLed(adresse,y,x,1); } else{ lc1.setLed(adresse,y,x,1); } } } //////////////////////////////////////////////////////////////// /*int boutons = {2,3,4,5}; bool buttons = {false,false,false,false}; snake snake1; void traitement_bouton(){ for(int h=0,h<4,h++){ int z = digitalRead(boutons[h]); if(z==1){buttons[h]=true;} else if(z==0){buttons[h]=false;} }*/ void setup() { Serial.begin(9600); pinMode(2, INPUT); pinMode(3, INPUT); pinMode(4, INPUT); pinMode(5, INPUT); lc1.shutdown(0,false); lc1.shutdown(1,false); lc1.setIntensity(0,8); lc1.setIntensity(1,8); } void loop() { lc1.setLed(1,5,5,1); delay(500); lc1.setLed(1,5,5,0); delay(500); if(digitalRead(5) == 1){ Serial.print("yay"); } //affichageSerpent(snake1); //snake1.move(); }
Module
#ifndef SNAKE_H #define SNAKE_H #include <Vector.h> class snake{ private: int lenght; char direction; Vector<Vector<int>> body;//de taille 1 à l'initialisation (c-a-d il n'y a qye la tete) bool alive; public: snake(int l = 1,char dir ='r', Vector<int> initial_pos = {}); void change_direction(); void grow(); void move(); void death(); bool getAlive(); char getDirection(); Vector<Vector<int>> getBody(); void setAlive(bool status); int getLenght(); }; #endif