// https://wokwi.com/projects/391185057960646657
# define NLEDS 9
# include <Adafruit_NeoPixel.h>
# define PIN 7
# define SIZE NLEDS
Adafruit_NeoPixel strip = Adafruit_NeoPixel(SIZE, PIN, NEO_GRB + NEO_KHZ800);
void myDelay(unsigned long x)
{
// Serial.print(" delay "); Serial.println(x);
if (digitalRead(8) == LOW) x <<= 2;
if (digitalRead(9) == LOW) x >>= 2;
delay(x);
}
# define delay myDelay
void myDigitalWrite(int theLED, int theValue)
{
unsigned long was = strip.getPixelColor(theLED - 2);
strip.setPixelColor(theLED - 2, theValue ? 0xff0000 : 0x202020);
strip.show();
if (was == strip.getPixelColor(theLED - 2)) Serial.println(" work to do");
Serial.print(theLED);
Serial.print(" + ");
bool any = false;
for (int ii = 0; ii < 9; ii++)
any |= strip.getPixelColor(ii) == 0xff0000;
// if (any) {
{
for (int ii = 0; ii < 9; ii++)
Serial.print(strip.getPixelColor(ii) == 0xff0000 ? "X" : ".");
Serial.println("");
}
}
# define digitalWrite myDigitalWrite
# define t0 300
# define t1 600
# define t2 2000
# define SLOW 8
# define FAST 9
void setup() {
Serial.begin(115200);
Serial.println("for loop version N\n");
strip.begin();
pinMode(SLOW, INPUT_PULLUP);
pinMode(FAST, INPUT_PULLUP);
}
void loop() {
fileOnLeft();
fileOffRight();
}
byte pins[9] = {2, 3, 4, 5, 6, 7, 8, 9, 10};
// turn on from the left starting from all off
void fileOnLeft()
{
for (int ix = 0; ix < SIZE; ix++) {
byte K = SIZE - 1;
for (int iy = 0; iy < SIZE - ix; iy++) {
digitalWrite(pins[K - iy], HIGH);
delay(t0);
digitalWrite(pins[K - iy], LOW);
}
digitalWrite(pins[ix], HIGH);
delay(t1);
}
delay(t2);
}
// turn off from the right starting from all on
void fileOffRight()
{
for (int ix = 0; ix < SIZE; ix++) {
byte K = ix - 1;
digitalWrite(pins[ix], LOW);
for (int iy = 0; iy < ix; iy++) {
digitalWrite(pins[K - iy], HIGH);
delay(t0);
digitalWrite(pins[K - iy], LOW);
}
delay(t1);
}
delay(t2);
}
void writeIt(int x) {
int mask = 1;
strip.clear();
for (int ii = 0; ii < SIZE; ii++, mask <<= 1)
strip.setPixelColor(ii, x & mask ? 0xff0000 : 0x004040);
strip.show();
}