#include <LedControl.h>
#define NUM_MAT 2
LedControl matrix = LedControl(12, 11, 10, NUM_MAT);
int head_x = 0;
int head_y = 6;
int x_d = -1;
int y_d = 0;
int eat_x = random(0, 7);
int eat_y = random(0, 15);
int snakeX[3];
int snakeY[3];
int lenSnake = 3;
void setup() {
snakeX[0] = 4;
snakeY[0] = 7;
setIntensity(NUM_MAT, 16);
randomSeed(A3);
makeEat();
}
void loop() {
Serial.begin(9600);
makeMove();
makeEat();
delay(1000);
clearDisplay();
}
void clearDisplay(){
for(int i = 0; i < NUM_MAT; i++){
matrix.clearDisplay(i);
}
}
void setIntensity(int count, int intensity){
for(int i = 0; i < count; i++){
matrix.setIntensity(i, intensity);
}
}
// 13
void setLed(int x, int y, bool turn){
int matrix_num = 0; //Номер матрицы
if(y > 7){ // если y больше 7
int matrix_diff = y / 8; // вичесления номера матрицы
matrix_num = matrix_diff;// установить номер матрицы
y -= 8 * matrix_diff;// получить номер пикселя на соотвествующей матрице
}
matrix.setLed(matrix_num, x, y, turn); // установить на соответсвующей матрице необходимый пиксель в состояние
}
int getKey(){
int key_num = 0;
if(analogRead(A0) >= 1023){
key_num = 4;
}
if(analogRead(A0) <= 0){
key_num = 5;
}
if(analogRead(A1) >= 1023){
key_num = 3;
}
if(analogRead(A1) <= 0){
key_num = 6;
}
return key_num;
}
void makeEat(){
setLed(eat_x, eat_y, true);
if(eat_x == head_x && eat_y == head_y){
setLed(eat_x, eat_y, false);
eat_x = random(0, 7);
eat_y = random(0, 15);
setLed(eat_x, eat_y, true);
}
}
void makeMove(){
switch(getKey()){
case 4:
x_d = -1;
y_d = 0;
break;
case 5:
x_d = 1;
y_d = 0;
break;
case 6:
x_d = 0;
y_d = 1;
break;
case 3:
x_d = 0;
y_d = -1;
break;
}
snakeX[0] = snakeX[0] + x_d;
// snakeY[0] = snakeY[0] + y_d;
// for(int i = lenSnake - 1; i > 0; i--){
// snakeX[i] = snakeX[i - 1];
// snakeY[i] = snakeY[i - 1];
// if(snakeX[i] > 7) snakeX[i] = 0;
// if(snakeX[i] < 0) snakeX[i] = 7;
// if(snakeY[i] < 0) snakeY[i] = (8 * NUM_MAT) - 1;
// if(snakeY[i] > (8 * NUM_MAT) - 1) snakeY[i] = 0;
// }
// snakeY[i] = snakeY[0] - i;
Serial.println();
for(int i = 1; i < lenSnake; i++){
snakeX[i] = snakeX[0] + i;
snakeY[i] = snakeY[0];
Serial.print(snakeX[i]);
// 1 = 4 + 1 // 5
// 2 = 4 + 2 // 6
}
Serial.println();
for(int i = 0; i < lenSnake; i++){
Serial.print(snakeX[i]);
setLed(snakeX[i], snakeY[i], true);
}
}