Good afternoon, please advise!
The code is designed for three pieces of tape with 12 in each.
two pieces for the players and one for demonstrating the sequence to be memorized.
at the start 12 LEDs turn on, the sequence to be remembered (4 colors: white, black, blue, red).
after 10 seconds the sequence is switched off
players by pressing keys must repeat the sequence (12 buttons and a piece of tape with 12 LEDs for each player)
the problem is that there was no tape 30 LEDs per meter, was used tape 60 LEDs per meter, what to change in the code so that 2, 4, 6, 8 and so on are not used, respectively the first button should control the first LED, the second the third and so on
#define NUM_LEDS 36 //ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ²Π΅ΡΠ΄ΠΈΠΎΠ΄ΠΎΠ² Π² Π»Π΅Π½ΡΠ΅
#include "FastLED.h" //ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΠΌ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ WS2812
#define PIN 2 //ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌ PIN ΠΊ ΠΊΠΎΡΠΎΡΠΎΠΌΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½Π° Π»Π΅Π½ΡΠ°
#define LIMIT 10 //ΠΏΡΠ΅Π΄Π΅Π»Ρ ΠΈΠ·ΠΌΠ΅ΡΠ΅Π½ΠΈΠΉ Π½Π°ΠΏΡΡΠΆΠ΅Π½ΠΈΡ Ρ ΠΊΠ½ΠΎΠΏΠΊΠΈ (analogRead)
#define BUTTON_RESET 9 //PIN ΠΊΠ½ΠΎΠΏΠΊΠΈ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΡΡΠΊΠ° ΠΈΠ³ΡΡ
#define TIME_DELAY 10000 //Π²ΡΠ΅ΠΌΡ Π½Π° Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°Π½ΠΈΠ΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ
//Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΠ¦Π Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΈ
int buttonAnalogVal[12] = {1023, 769, 610, 514, 440, 385, 341, 307, 279, 255, 236, 219};
byte led36[24]; //ΠΌΠ°ΡΡΠΈΠ² Π΄Π»Ρ Ρ
ΡΠ°Π½Π΅Π½ΠΈΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎ ΡΠ²Π΅ΡΠ΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ²Π΅ΡΠΎΠ΄ΠΈΠΎΠ΄Π°
byte rowLed[12]; //ΠΌΠ°ΡΡΠΈΠ² Π΄Π»Ρ Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°Π½ΠΈΡ ΡΠ°Π½Π΄ΠΎΠΌΠ½ΡΡ
ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠ΅ΠΉ ΡΠ²Π΅ΡΠΎΠ΄ΠΈΠΎΠ΄ΠΎΠ²
bool checkButton = 0;
unsigned long timerLoop = 0;
bool playAllowed = 1;
CRGB leds[NUM_LEDS];
void setup()
{
FastLED.addLeds<WS2811, PIN, GRB>(leds, NUM_LEDS).setCorrection( TypicalLEDStrip );
FastLED.setBrightness(100);
Serial.begin(9600);
pinMode(BUTTON_RESET, INPUT);
pinMode(A0, INPUT);
pinMode(A1, INPUT);
pinMode(A5, INPUT);
randomSeed(analogRead(A5));
playStart();
timerLoop = millis();
}
void loop()
{
if((millis() - timerLoop) >= 200) //ΠΊΠ°ΠΆΠ΄ΡΠ΅ 200 ΠΌΡ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΠΊΠ½ΠΎΠΏΠΊΡ (Π°Π½ΡΠΈΠ΄ΡΠ΅Π±Π΅Π·Π³)
{
timerLoop = millis();
if(digitalRead(BUTTON_RESET) == 1) //Π΅ΡΠ»ΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ° Π½Π°ΠΆΠ°ΡΠ°
{
if(checkButton == 0) //ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅Π΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΊΠ½ΠΎΠΏΠΊΠΈ
{
//Π·Π°ΠΏΡΡΠΊΠ°Π΅ΠΌ ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ² ΠΈΠ³ΡΠΎΠΊΠΎΠ² ΠΈ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ°
checkButton = 1;
playAllowed = 0;
compare();
}
else
{
//Π·Π°ΠΏΡΡΠΊΠ°Π΅ΠΌ ΠΈΠ³ΡΡ Π·Π°Π½ΠΎΠ²ΠΎ
checkButton = 0;
playAllowed = 1;
playStart();
}
}
if(playAllowed == 1)
{
//ΡΡΠΈΡΡΠ²Π°Π΅ΠΌ ΠΊΠ½ΠΎΠΏΠΊΠΈ
int analogButtonRight = analogRead(A1);
int analogButtonLeft = analogRead(A0);
//Π΅ΡΠ»ΠΈ Π·Π°ΠΌΠ΅ΡΠΈΠ»ΠΈ Π½Π°ΠΆΠ°ΡΠΈΠ΅
if(analogButtonRight > 5)
{
byte reverse = 23;
for(int i = 0; i < 12; i++) //ΡΠ·Π½Π°Π΅ΠΌ ΠΊΠ°ΠΊΡΡ ΠΊΠ½ΠΎΠΏΠΊΡ Π½Π°ΠΆΠ°Π»ΠΈ ΠΈ Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅ΠΌ ΡΠ²Π΅Ρ
{
if(((buttonAnalogVal[i] - LIMIT) < analogButtonRight) && (analogButtonRight < (buttonAnalogVal[i] + LIMIT)))
{
if(led36[i+12] < 3)
{
led36[i+12]++;
}
else
{
led36[i+12] = 0;
}
Serial.println("ΠΠ½ΠΎΠΏΠΊΠ°: " + String(i) + " Π‘ΠΎΡΡΠΎΡΠ½ΠΈΠ΅: " + String(led36[i+12]));
setColor(reverse, led36[i+12]); //ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΠΌ Π½ΠΎΠΌΠ΅Ρ ΡΠ²Π΅ΡΠΎΠ΄ΠΈΠΎΠ΄Π° ΠΈ Π΅Π³ΠΎ ΡΠ²Π΅Ρ
}
reverse--;
}
}
if(analogButtonLeft > 5)
{
for(int i = 0; i < 12; i++)
{
if(((buttonAnalogVal[i] - LIMIT) < analogButtonLeft) && (analogButtonLeft < (buttonAnalogVal[i] + LIMIT)))
{
if(led36[i] < 3)
{
led36[i]++;
}
else
{
led36[i] = 0;
}
Serial.println("ΠΠ½ΠΎΠΏΠΊΠ°: " + String(i) + " Π‘ΠΎΡΡΠΎΡΠ½ΠΈΠ΅: " + String(led36[i]));
setColor(i, led36[i]); //ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΠΌ Π½ΠΎΠΌΠ΅Ρ ΡΠ²Π΅ΡΠΎΠ΄ΠΈΠΎΠ΄Π° ΠΈ Π΅Π³ΠΎ ΡΠ²Π΅Ρ
}
}
}
}
}
}
void setColor(byte numLed, byte color) //ΡΡΠ½ΠΊΡΠΈΡ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠ²Π΅ΡΠΎΠ΄ΠΈΠΎΠ΄Π° Π² ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΉ ΡΠ²Π΅Ρ
{
switch(color)
{
case 0: leds[numLed].setRGB( 255, 255, 255); break; //Π±Π΅Π»ΡΠΉ
case 1: leds[numLed].setRGB( 255, 0, 0); break; //ΠΊΡΠ°ΡΠ½ΡΠΉ
case 2: leds[numLed].setRGB( 0, 0, 255); break; //ΡΠΈΠ½ΠΈΠΉ
case 3: leds[numLed].setRGB( 0, 0, 0); break; //Π²ΡΠΊΠ».
case 4: leds[numLed].setRGB( 255,255,0); break; //ΠΆΠ΅Π»ΡΡΠΉ
default: leds[numLed].setRGB( 0, 0, 0); //ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ - Π²ΡΠΊΠ».
}
FastLED.show();
}
void start(byte R, byte G, byte B) //ΡΡΠ°ΡΡΠΎΠ²ΡΠ΅ Π±Π΅Π³ΡΡΠΈΠ΅ ΠΎΠ³Π½ΠΈ
{
int j = 24;
for(int i = 0; i < 12; i++)
{
j--;
leds[i].setRGB( R, G, B);
leds[j].setRGB( R, G, B);
leds[i+24].setRGB( R, G, B);
FastLED.show();
delay(100);
leds[i].setRGB( 0, 0, 0);
leds[j].setRGB( 0, 0, 0);
leds[i+24].setRGB( 0, 0, 0);
FastLED.show();
}
}
void compare() //ΡΡΠ½ΠΊΡΠΈΡ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ² Π΄Π²ΡΡ
ΠΈΠ³ΡΠΎΠΊΠΎΠ² ΠΈ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ°
{
byte reverse = 23;
for(int i = 0; i < 12; i++)
{
setColor(i+24, rowLed[i]);
delay(1000);
if(led36[i] != rowLed[i])
{
setColor(i, 4);
}
if(led36[i+12] != rowLed[i])
{
setColor(reverse, 4);
}
reverse--;
}
}
void playStart() //ΡΡΠ½ΠΊΡΠΈΡ Π½Π°ΡΠ°Π»Π° ΠΈΠ³ΡΡ
{
for(int i = 0; i < 24; i++)
{
led36[i] = 0; //ΠΎΠ±Π½ΡΠ»ΡΠ΅ΠΌ ΠΌΠ°ΡΡΠΈΠ² Ρ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠΌΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ ΡΠ²Π΅ΡΠΎΠ΄ΠΈΠΎΠ΄ΠΎΠ²
}
start(255,0,0);
start(255,255,255);
start(0,0,255);
for(int i = 24; i < 36; i++) //Π²ΠΊΠ»ΡΡΠ°Π΅ΠΌ ΡΠ°Π½Π΄ΠΎΠΌΠ½ΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΡΠ²Π΅ΡΠΎΠ² ΡΠ²Π΅ΡΠΎΠ΄ΠΈΠΎΠ΄ΠΎΠ²
{
byte randomLed = random(0,3);
rowLed[i-24] = randomLed;
setColor(i, randomLed);
delay(500);
}
unsigned long timerPrev = millis();
while((millis() - timerPrev) < TIME_DELAY) //ΠΆΠ΄Π΅ΠΌ 10 ΡΠ΅ΠΊ Π½Π° Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°Π½ΠΈΠ΅ ΡΠ²Π΅ΡΠΎΠ²
{
if(digitalRead(BUTTON_RESET) == 1) //Π΅ΡΠ»ΠΈ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΡΡΠΎΠ³ΠΎ Π½Π°ΠΆΠ°Π»ΠΈ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡ - Π·Π°ΠΏΡΡΠΊΠ°Π΅ΠΌ ΠΈΠ³ΡΡ Π·Π°Π½ΠΎΠ²ΠΎ
{
playStart();
}
}
for(int i = 24; i < 36; i++) //Π³Π°ΡΠΈΠΌ Π²Π΅ΡΡ
Π½ΠΈΠ΅ ΡΠ²Π΅ΡΠΎΠ΄ΠΈΠΎΠ΄Ρ
{
setColor(i, 3);
}
for(int i = 0; i < 24; i++) //Π²ΠΊΠ»ΡΡΠ°Π΅ΠΌ Π±Π΅Π»ΡΠΉ ΡΠ²Π΅Ρ Π½Π° ΡΠ²Π΅ΡΠΎΠ΄ΠΈΠΎΠ΄Π°Ρ
ΠΈΠ³ΡΠΎΠΊΠΎΠ²
{
setColor(i, 0);
}
}