ArduinoSlang in de matrix

De basis van dit project is de 8x8 LED Matrix uit dit project.

Stel je je een gevaarlijk slang voor. Een hele gevaarlijke slang. Met grote scherpe tanden waar het gif uit druipt. Of met een groot en krachtig lichaam waarmee het je wil wurgen. Gelukkig zit de slang opgesloten op je matrix scherm. Maar hij is als een dolle op zoek naar een weg uit. Hopelijk kan hij niet ontsnappen!



ArduinoBreadboard

Zie beschrijving in het project 8x8 LED Matrix



ArduinoSource code
/*
  8x8 snake

  (C) copyright www.punthooft.nl 2019-2024 
*/

#define ROW_1 2
#define ROW_2 3
#define ROW_3 4
#define ROW_4 5
#define ROW_5 6
#define ROW_6 7
#define ROW_7 8
#define ROW_8 9

#define COL_1 10
#define COL_2 11
#define COL_3 12
#define COL_4 13
#define COL_5 A0
#define COL_6 A1
#define COL_7 A2
#define COL_8 A3

#define snakelength 5

// Constants
const byte rows[] = { ROW_1, ROW_2, ROW_3, ROW_4, ROW_5, ROW_6, ROW_7, ROW_8 };
const byte cols[] = { COL_1,COL_2, COL_3, COL_4, COL_5, COL_6, COL_7, COL_8 };

// Variables
int i,j;
int delayCounter;
int snake[snakelength][2];  // Snake array
int headrow;                // Row of the head
int headcol;                // Col of the head
int direction;              // Direction for some same movement 
int whattodo;

// Setup function runs once when powerup the board and on reset 
void setup() {

  for(i=0;i<snakelength;i++) {
    for(j=0;j<2;j++) {
      snake[i][j]=0;
    }
  } 

  delayCounter=0;
  headrow=4;
  headcol=4;
  direction=2;

  // Set randomizer
  randomSeed(analogRead(0));
}

// Function to lightup the LED at row, col position
void loop() {

  delayCounter++;
  delay(1);
  if (delayCounter>20) {
    delayCounter=0;

    if (random(1,4)==2) {
      // switch direction
      direction = random(1,5);
    }

    switch(direction) {
      case 1: // right
        headcol++;
        if(headcol>7) {
          headcol=7;
          direction=2;
        }
        break;
      case 2: // left
        headcol--;
        if(headcol<0) {
          headcol=0;
          direction=1;
        }
        break;
      case 3: // down
        headrow++;
        if(headrow>7) {
          headrow=7;
          direction=4;
        }
        break;
      case 4: // up
        headrow--;
        if(headrow<0) {
          headrow=0;
          direction=3;
        }
        break;
      default:
        Serial.println("Ooops");
    }

    for(i=snakelength-1;i>0;i--) {
      snake[i][0]=snake[i-1][0];
      snake[i][1]=snake[i-1][1];
    }

    snake[0][0]=headrow;
    snake[0][1]=headcol;
  }

  for(i=0;i<snakelength;i++) {
    displayAt(snake[i][0],snake[i][1]);
  }
}

// Function to display a LED
void displayAt(int x,int y) {

  pinMode(cols[y],OUTPUT);
  pinMode(rows[x],OUTPUT);
  digitalWrite(cols[y], HIGH);
  digitalWrite(rows[x], HIGH);

  delayMicroseconds(25);

  digitalWrite(cols[y], LOW);
  digitalWrite(rows[x], LOW);
  pinMode(cols[y],INPUT);
  pinMode(rows[x],INPUT);
}




ArduinoOpmerkingen

Bovenin kun je de snakelength aanpassen en je slang nog langer maken.



Categorie menu

Copyright 2024 www.punthooft.nl
We do not collect cookies for advertisement. Your data is never send to third parties.