#include <Adafruit_NeoPixel.h> // НЕ Кир.видимо
#include <ezButton.h> //ezButton.h setDebounceTime();
#define xvp1 A0 // Arduino pin connected to VRX pin of joystick 1
#define yvp1 A1 // Arduino pin connected to VRY pin of joystick 1
#define SW_PIN1 6 // Arduino pin connected to SW pin of joystick 1
ezButton button1(SW_PIN1);
#define xvp2 A2 // Arduino pin connected to VRX pin of joystick 2
#define yvp2 A3 // Arduino pin connected to VRY pin of joystick 2
#define SW_PIN2 7 // Arduino pin connected to SW pin of joystick 2
ezButton button2(SW_PIN2);
// Variables for NeoPixel strips
#define PIN1 2
#define NUMPIXELS1 256
Adafruit_NeoPixel strip1 = Adafruit_NeoPixel(NUMPIXELS1, PIN1, NEO_GRB + NEO_KHZ800);
#define PIN2 4
#define NUMPIXELS2 256
Adafruit_NeoPixel strip2 = Adafruit_NeoPixel(NUMPIXELS2, PIN2, NEO_GRB + NEO_KHZ800);
// Variables
int xp1 = 0, xp2 = 0, yp1 = 0, yp2 = 0;
int led = 120,i=0; // Separate LED positions for each player
int turno = 1,memoria1[256],memoria2[256];
int dimensione[4] = {2, 3, 4, 5}, d1 = 0, d2 = 0; // Separate dimension indexes for each player
// Ship arrays
int n2_1[2], n3_1[3], n4_1[4], n5_1[5];
int n2_2[2], n3_2[3], n4_2[4], n5_2[5];
void movimento(int xValue, int yValue, int &led) {
// Down
if (xValue <= 512 && yValue <= 500) {
led += 16;
}
// Up
if (xValue >= 512 && yValue >= 600) {
led -= 16;
}
// Right
if (xValue == 0 && yValue > 500) {
led++;
}
// Left
if (xValue >= 900 && yValue == 512) {
led--;
}
}
void ledp1(int led, int d) {
strip1.clear();
for (int i = 0; i < dimensione[d]; i++) {
strip1.setPixelColor(led + i, 50, 200, 250);
}
strip1.show();
}
void ledp2(int led, int d) {
strip2.clear();
for (int i = 0; i < dimensione[d]; i++) {
strip2.setPixelColor(led + i, 50, 200, 250);
}
strip2.show();
}
void posizionamento(int n2[], int n3[], int n4[], int n5[], int &turno, int &led, int &d, Adafruit_NeoPixel &strip) {
switch (d) {
case 0:
n2[0] = led;
n2[1] = led + 1;
break;
case 1:
n3[0] = led;
n3[1] = led + 1;
n3[2] = led + 2;
break;
case 2:
n4[0] = led;
n4[1] = led + 1;
n4[2] = led + 2;
n4[3] = led + 3;
break;
case 3:
n5[0] = led;
n5[1] = led + 1;
n5[2] = led + 2;
n5[3] = led + 3;
n5[4] = led + 4;
turno++;
accensione(n2, n3, n4, n5, strip);
break;
}
d++;
}
void accensione(int n2[], int n3[], int n4[], int n5[], Adafruit_NeoPixel &strip) {
strip.clear();
for (int i = 0; i < 2; i++) {
strip.setPixelColor(n2[i], 50, 200, 250);
}
for (int i = 0; i < 3; i++) {
strip.setPixelColor(n3[i], 50, 200, 250);
}
for (int i = 0; i < 4; i++) {
strip.setPixelColor(n4[i], 50, 200, 250);
}
for (int i = 0; i < 5; i++) {
strip.setPixelColor(n5[i], 50, 200, 250);
}
strip.show();
delay(2000); // Display for 5 seconds
strip.clear();
strip.show();
}
void accensione_memoria(int memoria[],int j,Adafruit_NeoPixel &strip){
for (int i=0;i<=j;i++){
strip.setPixelColor(memoria[i], 50, 200, 250);
}
}
void setup() {
strip1.begin();
strip2.begin();
strip1.show();
strip2.show();
button1.setDebounceTime(50);
button2.setDebounceTime(50);
}
void loop() {
button1.loop();
button2.loop();
xp1 = analogRead(xvp1);
yp1 = analogRead(yvp1);
xp2 = analogRead(xvp2);
yp2 = analogRead(yvp2);
switch (turno) {
case 1:
movimento(xp1, yp1, led);
ledp1(led, d1);
delay(100);
if (button1.isPressed()) {
posizionamento(n2_1, n3_1, n4_1, n5_1, turno, led, d1, strip1);
}
break;
case 2:
movimento(xp2, yp2, led);
ledp2(led, d2);
delay(100);
if (button2.isPressed()) {
posizionamento(n2_2, n3_2, n4_2, n5_2, turno, led, d2, strip2);
}
break;
case 3:
movimento(xp1,yp1,led);
strip1.setPixelColor(led-1, 0,0,0);
strip1.setPixelColor(led+1, 0,0,0);
strip1.setPixelColor(led-16, 0,0,0);
strip1.setPixelColor(led+16, 0,0,0);
strip1.setPixelColor(led, 50, 200, 250);
strip1.show();
delay(100);
if (button1.isPressed()) {
memoria1[i]=led;
i++;
turno++;
}
break;
case 4:
movimento(xp2,yp2,led);
strip2.setPixelColor(led-1, 0,0,0);
strip2.setPixelColor(led+1, 0,0,0);
strip2.setPixelColor(led-16, 0,0,0);
strip2.setPixelColor(led+16, 0,0,0);
strip2.setPixelColor(led, 50, 200, 250);
strip2.show();
delay(100);
if (button2.isPressed()) {
memoria2[i]=led;
i++;
turno--;
}
break;
}
}