Proyecto Snake

MATERIALES

Para conectar la Matriz 8x8 +Joystick


  • Matriz leds de 8x8
  • 8 resistencias de 220 o 330
  • 16 cables macho - hembra
  • 8 cables macho - macho
  • Arduino mega
  • 8 resistencias de 220 o 330
  • 16 cables macho - hembra
  • 32 cables macho - macho
  • Arduino uno o mega
  • Joystick


  Para display 7 segmentos

  • Cables macho macho 
  • Resistencias
  • Display 7 segmentos
PROCEDIMIENTO


1.Tener listos todos los materiales para trabajar
2. Conectar el Arduino al computador
3. Colocar Matriz leds de 8x8
4. Hacer la conexión de la matriz con el Arduino usando Cable macho macho
5. Colocar una resistencia de 220 ohmios
6. Subir el código del Arduino y comprobarlo
7. Repetir estos pasos hasta que la matriz este completamente encendida
8. Conectar al joystick y programarlo hasta que este permita mover el punto encendido en la matriz 8x8

Display 7 segmentos

1.    Tener listo todos los materiales para trabajar 
2.   colocar el Display 7 segmentos en el protoboard
3.    Después se realiza la conexión de los cables macho- macho desde el Protoboard hacia el arduino mega y hacia el diaplay 7 segmentos 
4.   Seguir la imagen de la conexión del mismo para tener una idea clara de como debe estar conectado

CÓDIGO


boolean comido = false;

long ComidaX, ComidaY;

int X_pin = A0;
int Y_pin = A1;

int lx, ly;

int direccion;

//int punto = 0;
int pin1 = 23;
int pin2 = 24;
int pin3 = 25;
int pin4 = 26;
int pin5 = 27;
int pin6 = 28;
int pin7 = 29;

long espera;

int posicion[100][2]; // guardar las posiciones en X y Y por donde pasa el Snake
int longitud; // longitud del Snake
int puntos =8;
void setup() {
  
  for (int j = 2; j < 18; j++)
    {
      pinMode(j, OUTPUT);
    }
  
  for (int j=2; j<10; j++) 
      {
       digitalWrite(j, LOW);
      }
  for (int j=10; j<18; j++) 
      {
       digitalWrite(j,HIGH);
      }

  
    pinMode(pin1, OUTPUT);  
    pinMode(pin2, OUTPUT);
    pinMode(pin3, OUTPUT);
    pinMode(pin4, OUTPUT);
    pinMode(pin5, OUTPUT);
    pinMode(pin6, OUTPUT);
    pinMode(pin7, OUTPUT); 
  

for (int j = 30; j < 37; j++)
    {
      pinMode(j, OUTPUT);
    }
  


  randomSeed(analogRead(A3));
  direccion = 3; //derecha
  posicion[0][0] = 5;//y = 5;
  posicion[0][1] = 13; //x = 13;

  longitud = 1;  
  generarComida();
  display (0,0,0,0,0,0,1);//0
  display1 (0,0,0,0,0,0,1);//0
  
}

void display (int a, int b, int c, int d, int e, int f, int g)// Función del display
{
  digitalWrite (pin1,a);   
  digitalWrite (pin2,b);   
  digitalWrite (pin3,c);
  digitalWrite (pin4,d);
  digitalWrite (pin5,e);
  digitalWrite (pin6,f);
  digitalWrite (pin7,g);
}
void display1 (int a, int b, int c, int d, int e, int f, int g)// Función del display
{
  digitalWrite (30,a);   
  digitalWrite (31,b);   
  digitalWrite (32,c);
  digitalWrite (33,d);
  digitalWrite (34,e);
  digitalWrite (35,f);
  digitalWrite (36,g);
}
void marcador()
{
switch (puntos) {
      case 0:
        display1 (0,0,0,0,0,0,1);//0
        break;
      case 1:
        display1 (1,0,0,1,1,1,1);//1
        break;
      case 2:
        display1 (0,0,1,0,0,1,0);//2
        break;
      case 3:
        display1 (0,0,0,0,1,1,0);//3
        break;
      case 4:
        display1 (1,0,0,1,1,0,0);//4
        break;
       case 5:
         display1 (0,1,0,0,1,0,0);//5
        break;
        case 6:
         display1 (0,1,0,0,0,0,0);//6
        break;
        case 7:
         display1 (0,0,0,1,1,1,1);//7
        break;
        case 8:
         display1 (0,0,0,0,0,0,0);//8
        break;
        case 9:
         display1 (0,0,0,1,1,0,0);//9
        break;   
        case 10:
          display (1,0,0,1,1,1,1);//1
          display1 (0,0,0,0,0,0,1);//0
          break;   
    }  
}

void resetear(){
  longitud = 1;
  posicion[0][0] = 5; //posición en Y
  posicion[0][1] = 13; //posición en X 
  generarComida();
}

void mostrarCulebra()
{
  for (int i = longitud; i>=0; i--)
    {
      digitalWrite(posicion[i-1][0], HIGH);    // apagar el snake en Y 
      digitalWrite(posicion[i-1][1], LOW);    // apagar el snake en X
      digitalWrite(posicion[i-1][0], LOW);   // prender el snake en Y 
      digitalWrite(posicion[i-1][1], HIGH); // prender el snake en X 
    }
  digitalWrite(ComidaY, HIGH);
  digitalWrite(ComidaX, LOW);
  digitalWrite(ComidaY, LOW);
  digitalWrite(ComidaX, HIGH);
}

void mover_joystick()
{
   lx = analogRead(Y_pin);
   ly = analogRead(X_pin);
        
    if (lx > 700)
       {
         direccion = 1; //abajo
       } 
    else 
      {
       if (lx < 400)
          direccion = 2;//arriba
      }
  
    if (ly > 700)
       {
        direccion = 3;//derecha
       } 
    else 
      {
        if (ly < 400)
           direccion = 4;//izquierda
      }  
  
}

void mover_snake()
{
  for(int i = longitud; i > 1; i--)
       {
         posicion[i-1][0] = posicion[i-2][0];  
         posicion[i-1][1] = posicion[i-2][1];
       }  
       
    if (direccion == 1)
       {
         if (posicion[0][0] == 9)
             posicion[0][0] = 2;//y = 2;
          else
             posicion[0][0]++; //y++;
       } 
    else 
       {
         if (direccion == 2) 
            {
              if (posicion[0][0] == 2)
                  posicion[0][0] = 9; //y = 9;
              else
                  posicion[0][0]--;//y--;
            }
       }
  
    if (direccion == 3)
       {
        if (posicion[0][1] == 10)
            posicion[0][1] = 17; //x = 17;
        else
            posicion[0][1]--; //x--;
       }
    else 
      {
        if (direccion == 4)
          {
            if (posicion[0][1] == 17)
                posicion[0][1] = 10;//x = 10;
            else
                posicion[0][1]++;//x++;
          }
      }  
 }

void loop() {

 mostrarCulebra();
 if(millis() >= espera+200)
  {
    espera = millis();
    
    mover_joystick(); 
    
    mover_snake();
    
    fin_snake();
    
    if (comido == true) {
      //punto++;
      generarComida();
      marcador();   
    }
        
    if (posicion[0][0] == ComidaY && posicion[0][1] == ComidaX) 
       {
         comido = true;
         longitud++;
         puntos++;
       }
    
  }// fin tiempo de espera
}// fin procedimiento loop


void generarComida() {
  do {
    ComidaY = random(2, 9);
  } while (ComidaY == posicion[0][0]);

  do {
    ComidaX = random(10, 17);
  } while (ComidaX == posicion[0][1]);

  comido = false;
}

void fin_snake(){
  for(int i = longitud; i > 1; i--){
    if(posicion[i-1][1] == posicion[0][1]){
      if(posicion[i-1][0] == posicion[0][0]){
         mostrarCulebra();
         resetear();
         marcador();
      }
    }
    
    if(longitud == 1){
      break;
    } 
  }
}


REFLEXIÓN- LOGROS -DIFICULTADES

En lo personal hacer este proyecto se me esta haciendo muy difícil al momento de ya programar porque muchas veces mi código esta incorrecto. Cuando no puedo programar bien y mi proyecto no empezaba a funcionar de cierta forma me sentía desanimada porque me frustra no poder hacer algo. Creo que ahora ya logre programar una parte del proyecto lo que me falta tendré que hacerlo en estos días. Logre tener mas paciencia y logre pensar que yo si puedo hacer las cosas. Ya no me da miedo preguntar a la miss o alguien por ayuda porque se que realmente me ayudaran y así podre mejorar mi proyecto snake. 

Espero aprender a programar mejor porque esa es mi debilidad porque al momento de conectar , puedo hacer pero programar o hacer un código por mi misma me resulta muy difícil. Pondré de mi parte para mejorar en mis puntos débiles para que en próximos proyectos no tenga tantas dificultades o pierda puntos por demorarme haciéndolo.









Comentarios

Entradas populares de este blog

Leccion_parejas_Arana y Lemos