#include <Wire.h>
#include <Adafruit_PWMServoDriver.h>
const int player_counter = 0;
const int player_limit = 5;
const int player_array_size = player_limit - 1;
const int number_of_leds = 20;
const int number_of_PWMS = 4;
int player[player_array_size][number_of_leds];
int myleds_PWM_unit[number_of_leds];
int myleds_port_number[number_of_leds];
int global_delay = 100;
// Define PCA9685 addresses
#define PCA9685_ADDRESS_0 0x40
#define PCA9685_ADDRESS_1 0x41
#define PCA9685_ADDRESS_2 0x42
#define PCA9685_ADDRESS_3 0x43
Adafruit_PWMServoDriver pwm0 = Adafruit_PWMServoDriver(PCA9685_ADDRESS_0, Wire);
Adafruit_PWMServoDriver pwm1 = Adafruit_PWMServoDriver(PCA9685_ADDRESS_1, Wire);
Adafruit_PWMServoDriver pwm2 = Adafruit_PWMServoDriver(PCA9685_ADDRESS_2, Wire);
Adafruit_PWMServoDriver pwm3 = Adafruit_PWMServoDriver(PCA9685_ADDRESS_3, Wire);
Adafruit_PWMServoDriver PWMs[number_of_PWMS] = {pwm0, pwm1, pwm2, pwm3};
int color[][3] = {
{0, 0, 0},
{0, 0, 255},
{255, 255, 0},
{0, 255, 0},
{255, 255, 255},
{255, 0, 0}
};
int color_black = 0;
int color_blue = 1;
int color_yellow = 2;
int color_green = 3;
int color_white = 4;
int color_red = 5;
bool run_front_alt_blue_red = true;
bool run_trafficAdvisorR = true;
bool run_whiteR = true;
bool run_whiteL = true;
bool run_back_alt_blue_red = true;
bool run_trafficAdvisorL = true;
//////////////////////////////////////////////////////////////////////
/*
int blank_pattern[player_limit][number_of_leds]=
{
// 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 },
{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 },
{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 },
{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 },
{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 },
};
*/
int trafficAdvisorR[player_limit][number_of_leds] =
{
// 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, 0, 0, 0, 2,-1,-1,-1,-1,-1 },
{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, 0, 0, 2, 0,-1,-1,-1,-1,-1 },
{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, 0, 2, 0, 0,-1,-1,-1,-1,-1 },
{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, 2, 0, 0, 0,-1,-1,-1,-1,-1 },
{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, 0, 0, 0, 0,-1,-1,-1,-1,-1 },
};
int trafficAdvisorL[player_limit][number_of_leds] =
{
// 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, 2, 0, 0, 0,-1},
{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, 0, 2, 0, 0,-1},
{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, 0, 0, 2, 0,-1},
{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, 0, 0, 0, 2,-1},
{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, 0, 0, 0, 0,-1},
};
int front_alt_blue_red[player_limit][number_of_leds] =
{
// 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
{-1, 1, 5, 1, 5, 1, 5, 1, 5, -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1},
{-1, 5, 1, 5, 1, 5, 1, 5, 1, -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1},
{-1, 1, 5, 1, 5, 1, 5, 1, 5, -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1},
{-1, 5, 1, 5, 1, 5, 1, 5, 1, -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1},
{-1, 1, 5, 1, 5, 1, 5, 1, 5, -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1},
};
int whiteR [player_limit][number_of_leds]=
{
// 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
{4, -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, 4},
{4, -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, 4},
{4, -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, 4},
{4, -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, 4},
{4, -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, 4},
};
int whiteL [player_limit][number_of_leds]=
{
// 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
{-1,-1,-1,-1,-1,-1,-1,-1,-1, 4, 4, -1,-1,-1,-1,-1,-1,-1,-1,-1},
{-1,-1,-1,-1,-1,-1,-1,-1,-1, 4, 4, -1,-1,-1,-1,-1,-1,-1,-1,-1},
{-1,-1,-1,-1,-1,-1,-1,-1,-1, 4, 4, -1,-1,-1,-1,-1,-1,-1,-1,-1},
{-1,-1,-1,-1,-1,-1,-1,-1,-1, 4, 4, -1,-1,-1,-1,-1,-1,-1,-1,-1},
{-1,-1,-1,-1,-1,-1,-1,-1,-1, 4, 4, -1,-1,-1,-1,-1,-1,-1,-1,-1},
};
int back_alt_blue_red[player_limit][number_of_leds]=
{
// 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, 5, 1, 5, 1, 5, 1, 5, 1,-1 },
{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, 1, 5, 1, 5, 1, 5, 1, 5,-1 },
{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, 5, 1, 5, 1, 5, 1, 5, 1,-1 },
{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, 1, 5, 1, 5, 1, 5, 1, 5,-1 },
{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, 5, 1, 5, 1, 5, 1, 5, 1,-1 },
};
////////////////////////////////////////////////////////////////////////////
void setup() {
Serial.begin(115200);
// Serial.println(" xxx 115200 ");
pinMode(11, INPUT_PULLUP);
pinMode(10, INPUT_PULLUP);
// starts the PWM units and sets the Freq
for ( int x = 0; x < number_of_PWMS; x++) {
PWMs[x].begin();
PWMs[x].setPWMFreq(1000);
}
// this just fills the array with the values we want
int counter = 0; // this counter keeps track of the led number
for ( int pwm_unit = 0; pwm_unit < number_of_PWMS; pwm_unit++) {
// we start at x = 0
// for each we also do this
for (int port = 0; port < 5; port++) {
myleds_PWM_unit[counter] = pwm_unit;
myleds_port_number[counter] = port;
counter++;
}
}
// your delay - assume for chip settle
delay(10);
}
//////////////////////////////////////////////////////////////////////
void loop() {
run_trafficAdvisorR = !digitalRead(11);
for ( int player_run = 0; player_run < player_limit; player_run++) {
//zero the player run
for (int x = 0 ; x < 20; x++) {
player[player_run][x] = 0;
}
if (run_front_alt_blue_red) set_player(player_run, front_alt_blue_red);
if (run_back_alt_blue_red) set_player(player_run, back_alt_blue_red);
if (run_trafficAdvisorL) set_player(player_run, trafficAdvisorL);
if (run_trafficAdvisorR) set_player(player_run, trafficAdvisorR);
if (run_whiteL) set_player(player_run, whiteL);
if (run_whiteR) set_player(player_run, whiteR);
// completed all the pattern insertions - show it
for ( int x = 0; x < 20; x++) {
setLED(x, player[player_run][x]);
}
delay(global_delay);
}
delay(10); // chip settle ?
}
void set_player( int line_number, int selected_array[5][20] ) {
for (int x = 0; x < 20; x++) {
if (selected_array[line_number][x] != -1) {
player[line_number][x] = selected_array[line_number][x];
}
}
}
void setLED(uint8_t lednumber, uint8_t color_num) {
// this sets the color based on the number that comes in (color_num)
int Rvalue = color[color_num][0];
int Gvalue = color[color_num][1];
int Bvalue = color[color_num][2];
// this is your code to map to 4096 from 255
uint16_t redPWM = (Rvalue == 0) ? 4096 : map(Rvalue, 0, 255, 0, 4095);
uint16_t greenPWM = (Gvalue == 0) ? 4096 : map(Gvalue, 0, 255, 0, 4095);
uint16_t bluePWM = (Bvalue == 0) ? 4096 : map(Bvalue, 0, 255, 0, 4095);
// this is where the actual PWM chip and LED are set
PWMs[myleds_PWM_unit[lednumber]].setPWM((myleds_port_number[lednumber]) * 3, 4096, redPWM);
PWMs[myleds_PWM_unit[lednumber]].setPWM((myleds_port_number[lednumber]) * 3 + 1, 4096, greenPWM);
PWMs[myleds_PWM_unit[lednumber]].setPWM((myleds_port_number[lednumber]) * 3 + 2, 4096, bluePWM);
delay(7);
}
1----2-----3-----4-----5----6----7----8
9
10
18---17---16---15----14----13---12----11
0
19