// ArrayOfLedArrays - see https://github.com/FastLED/FastLED/wiki/Multiple-Controller-Examples for more info on
// using multiple controllers. In this example, we're going to set up three NEOPIXEL strips on three
// different pins, each strip getting its own CRGB array to be played with, only this time they're going
// to be all parts of an array of arrays.
#include <FastLED.h>
#include "Button.h"
#define NUM_STRIPS 1
#define NUM_LEDS_PER_STRIP 40
CRGB leds[NUM_LEDS_PER_STRIP];
int playerDirection = -1;
int currentLED = 0;
//int evenOddLEDs = 2; //2 for EVEN, 1 for ODD
const int middleLEDint = NUM_LEDS_PER_STRIP/2;
float middleLEDfloat = NUM_LEDS_PER_STRIP/2.0;
const int evenOddLEDs = (float)(middleLEDint) == (middleLEDfloat) ? 2 : 1;
const int middleCount = (evenOddLEDs + 1);
int playerOneCourtBottom = 0;
int playerTwoCourtBottom = NUM_LEDS_PER_STRIP-1;
int ballSpeed = 500; //500ms initially, reduce by 1 every pass
int ballPosition = playerOneCourtBottom; //initially playerOne starts, winner starts later
/*if (evenOddLEDs == 2) {
//int middleIndicator[] = {middleLEDint-1, middleLEDint};
} else {
//int middleIndicator[] = {middleLEDint-1, middleLEDint, middleLEDint+1};
}*/
//int *middleIndicator[middleCount] = (evenOddLEDs > 2) ? (int[2]) {middleLEDint-1, middleLEDint} : (int[3]) {middleLEDint-1, middleLEDint, middleLEDint+1};
Button PlayerOne(A0);
Button PlayerTwo(A1);
enum GameStatus {
GameOn,
GameWin
};
// For mirroring strips, all the "special" stuff happens just in setup. We
// just addLeds multiple times, once for each strip
void setup() {
// tell FastLED there's 30 NEOPIXEL leds on pin 10
FastLED.addLeds<NEOPIXEL, 10>(leds, NUM_LEDS_PER_STRIP);
// tell FastLED there's 30 NEOPIXEL leds on pin 11
//FastLED.addLeds<NEOPIXEL, 11>(leds[1], NUM_LEDS_PER_STRIP);
// tell FastLED there's 30 NEOPIXEL leds on pin 12
//FastLED.addLeds<NEOPIXEL, 12>(leds[2], NUM_LEDS_PER_STRIP);
//int middleIndicator[] = {middleLEDint-1, middleLEDint};
Serial.begin(115200); // Any baud rate should work
Serial.println("Hello Arduino\n");
Serial.println(evenOddLEDs == 2 ? "2 - even" : "1 - odd");
Serial.print(middleLEDint);
Serial.println(" = middleLEDint");
Serial.print(middleLEDfloat);
Serial.println(" = middleLEDfloat");
Serial.print(middleLEDint-1);
Serial.println(" = middleLEDint-1");
Serial.print(middleLEDint+(evenOddLEDs*-1)+2);
Serial.println(" = middleLEDint+(evenOddLEDs*-1)+2");
Serial.print((evenOddLEDs*-1)+2);
Serial.println(" = (evenOddLEDs*-1)+2");
// This inner loop will go over each led in the current strip, one at a time
for(int i = 0; i < NUM_LEDS_PER_STRIP; i++) {
if ( i >= middleLEDint-1 && i <= middleLEDint+(evenOddLEDs*-1)+2 )
{
leds[i] = CRGB::Red;
//FastLED.show();
//leds[x][i] = CRGB::Black;
} else {
//leds[x][i] = CRGB::Blue;
//FastLED.show();
leds[i] = CRGB::CRGB::Green;
}
//delay(100);
}
FastLED.show();
}
void middleLEDs() {
for (int i = -1; i < evenOddLEDs; i++)
leds[middleLEDint+i] = CRGB::Red;
//FastLED.show();
}
void gameOn() {
}
/*
ideas:
if player presses a button before "ball" is in their "court", then drop their court by 1
so probably have lower court and upper court as 0 and NUM_LEDS_PER_STRIP, then when
button is pressed before ball is on their side, either increase lower_court_bottom by 1, and
decrease upper_court_bottom by 1, making courts shorter near the handle side, so less time to react
*/
void loop() {
// This inner loop will go over each led in the current strip, one at a time
for(int i = 0; i < NUM_LEDS_PER_STRIP; i=i+playerDirection) {
if ( (i == middleLEDint-1 && playerDirection == 1) || (i == middleLEDint+(evenOddLEDs*-1)+2 && playerDirection == -1))
{
//Serial.print(i);
//Serial.println(" - i before change");
i = i + ((evenOddLEDs*3/evenOddLEDs-(evenOddLEDs-(evenOddLEDs/evenOddLEDs)))*playerDirection);
//FastLED.show();
//leds[x][i] = CRGB::Black;
} //else {
leds[i] = CRGB::Blue;
FastLED.show();
leds[i] = CRGB::CRGB::Green;
//}
//Serial.println(i);
if (i == playerOneCourtBottom || i == playerTwoCourtBottom) {
playerDirection = playerDirection *-1;
if (ballSpeed > 10) {
ballSpeed = ballSpeed - (ballSpeed > 250 ? 50 : 10);
Serial.print(ballSpeed);
Serial.println(" - ballSpeed");
}
}
delay(ballSpeed);
/*if ( i >= middleLEDint-1 && i <= middleLEDint+(evenOddLEDs*-1)+2 )
{
leds[x][i] = CRGB::Red;
FastLED.show();
//leds[x][i] = CRGB::Black;
} else {
leds[x][i] = CRGB::Blue;
FastLED.show();
leds[x][i] = CRGB::CRGB::Green;
}
delay(100);*/
}
/*for (int i = 0; i < middleIndicator.size(); i++) {
leds[0][i] = CRGB::Red;
FastLED.show();
}*/
//middleLEDs();
FastLED.show();
}