ENIB 2022 - groupe C : Snarkade : Différence entre versions

De Les Fabriques du Ponant
Aller à : navigation, rechercher
(Page créée avec « ==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... »)
 
(Programme principal)
 
(Une révision intermédiaire par un autre utilisateur non affichée)
Ligne 1 : Ligne 1 :
 +
[[Fichier:Boite snarkade.jpg|vignette]]
 +
 
==Que fait ce projet ? ==
 
==Que fait ce projet ? ==
  
Ligne 12 : Ligne 14 :
 
* 1 Arduino Nano
 
* 1 Arduino Nano
 
* Pleins de cables
 
* Pleins de cables
 +
 +
==Schéma électronique==
 +
 +
[[Fichier:Schéma électronique snarkade.jpg|600px]]
  
 
==Code==
 
==Code==
Ligne 18 : 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 43 : 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 75 : 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 112 : 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 136 : 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 143 : Ligne 154 :
 
int adresse;
 
int adresse;
  
void affichageSerpent(snake snake1){
+
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 153 : 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 169 : 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 à 17:20

Boite snarkade.jpg

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

Schéma électronique snarkade.jpg

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

Catégories