#include <MD_MAX72xx.h>
#include <SPI.h>
#define HARDWARE_TYPE MD_MAX72XX::PAROLA_HW
#define MAX_DEVICES 4
#define CS_PIN 10
int UP = 5;
int DOWN = 6;
int LEFT = 7;
int RIGHT = 4;
MD_MAX72XX mx(HARDWARE_TYPE, CS_PIN, MAX_DEVICES);
int dir = 0;
int lastMove = 0;
int moveDelay = 2000;
const int max_len = 256;
int len = 3;
int snakeX[max_len];
int snakeY[max_len];
int tempX = 0;
int tempY = 0;
void setup() {
pinMode(UP, INPUT_PULLUP);
pinMode(DOWN, INPUT_PULLUP);
pinMode(LEFT, INPUT_PULLUP);
pinMode(RIGHT, INPUT_PULLUP);
mx.begin();
Serial.begin(9600);
Serial.println("Start");
snakeX[0] = 0;
snakeY[0] = 0;
snakeX[1] = 0;
snakeY[1] = 1;
snakeX[2] = 0;
snakeY[2] = 2;
}
void loop() {
if (digitalRead(UP) == LOW && dir != 3) {
dir = 1;
Serial.println("up");
}
if (digitalRead(LEFT) == LOW && dir != 4) {
dir = 2;
Serial.println("left");
}
if (digitalRead(DOWN) == LOW && dir != 1) {
dir = 3;
Serial.println("down");
}
if (digitalRead(RIGHT) == LOW && dir !=2) {
dir = 4;
Serial.println("right");
}
if (millis()-lastMove > moveDelay) {
lastMove = millis();
mx.clear();
tempX = snakeX[0]
tempY = snakeY[0]
for (int i = len - 1; i > 0; i--) {
snakeX[i] = snakeX[i - 1];
snakeY[i] = snakeY[i - 1];
mx.setPoint(snakeY[i], snakeX[i], true);
}
if (dir == 1) {
snakeY[0]++;
}
if (dir == 2) {
snakeX[0]--;
}
if (dir == 3) {
snakeY[0]--;
}
if (dir == 4) {
snakeX[0]++;
}
if (snakeX[0] > 31) snakeX[0] = 0;
if (snakeX[0] < 0) snakeX[0] = 31;
if (snakeY[0] > 7) snakeY[0] = 0;
if (snakeY[0] < 0) snakeY[0] = 7;
}
}