From what I understand with the code below, x is incrementing way to quickly for the ledModes to switch-
if(count % 2 == 0)
{
for (byte x = 1; x < 8; x++)
{
ledMode(x);
Serial.println(x);
}
}
I've tried to implement BWD, to slow down the increments like such down below, but each variation failed.
unsigned long currentMillis, debounceStartMillis;
const unsigned long debouncePeriod = 20;
byte currentButtonState, previousButtonState;
bool debouncing = false;
int count = 0;
const int BUTTON = A1;
const int RLED = 10;
const int GLED = 9;
const int BLED = 8;
const unsigned long Interval = 1000;
unsigned long previousTime = 0;
void setup()
{
Serial.begin(115200);
pinMode(BUTTON, INPUT_PULLUP);
pinMode(RLED, OUTPUT);
pinMode(GLED, OUTPUT);
pinMode(BLED, OUTPUT);
}
void button()
{
currentMillis = millis();
previousButtonState = currentButtonState;
currentButtonState = digitalRead(BUTTON);
if (currentButtonState != previousButtonState)
{
debouncing = true;
debounceStartMillis = currentMillis;
}
if (currentMillis - debounceStartMillis >= debouncePeriod)
{
if (debouncing == true)
{
if (currentButtonState == LOW)
{
debouncing = false;
count++;
Serial.println(count);
}
}
}
}
void ledMode(byte mode)
{
unsigned long currentTime = millis();
if (currentTime - previousTime >= Interval)
{
switch (mode)
{
case 1:
digitalWrite(RLED, HIGH); //Red
digitalWrite(BLED, LOW);
digitalWrite(GLED, LOW);
Serial.println("Red!");
previousTime = currentTime;
break;
case 2:
digitalWrite(RLED, LOW); //Green
digitalWrite(BLED, LOW);
digitalWrite(GLED, HIGH);
Serial.println("GREEN!");
previousTime = currentTime;
break;
case 3:
digitalWrite(RLED, LOW); //blue
digitalWrite(BLED, HIGH);
digitalWrite(GLED, LOW);
Serial.println("BLUE!");
previousTime = currentTime;
break;
case 4:
digitalWrite(RLED, HIGH); //orange
digitalWrite(BLED, LOW);
digitalWrite(GLED, HIGH);
Serial.println("ORANGE!");
previousTime = currentTime;
mode = 5;
break;
case 5:
digitalWrite(RLED, LOW); //teal
digitalWrite(BLED, HIGH);
digitalWrite(GLED, HIGH);
Serial.println("TEAL!");
previousTime = currentTime;
break;
case 6:
digitalWrite(RLED, HIGH); //purple
digitalWrite(BLED, HIGH);
digitalWrite(GLED, LOW);
Serial.println("PURPLE!");
previousTime = currentTime;
break;
case 7:
digitalWrite(RLED, HIGH); //white
digitalWrite(BLED, HIGH);
digitalWrite(GLED, HIGH);
Serial.println("WHITE!");
previousTime = currentTime;
break;
}
}
}
void RGBoff()
{
digitalWrite(RLED, LOW);
digitalWrite(BLED, LOW);
digitalWrite(GLED, LOW);
}
void loop()
{
button();
if(count % 2 == 0)
{
unsigned long currentTime = millis();
for (byte x = 1; x < 8;)
{
ledMode(x);
if (currentTime - previousTime >= Interval)
{
Serial.println(x);
previousTime = currentTime;
x++;
}
}
}
else if (count % 2 == 1)
{
RGBoff();
}
}
The for() loop would end up with a delay instead of the increment operation.
I'd like x to increment every 1000 milliseconds...
Any help or suggestions would be greatly appreciated!