// https://wokwi.com/projects/391185057960646657
# include <Adafruit_NeoPixel.h>
# define PIN 7
# define SIZE 9
Adafruit_NeoPixel strip = Adafruit_NeoPixel(SIZE, PIN, NEO_GRB + NEO_KHZ800);
void myDelay(unsigned long x)
{
// Serial.print(" delay "); Serial.println(x);
delay(x);
}
# define delay myDelay
# define digitalWrite myDigitalWrite
void myDigitalWrite(int theLED, int theValue)
{
strip.setPixelColor(theLED - 2, theValue ? 0xff0000 : 0x202020);
strip.show();
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 t 20
# define t1 50
# define t2 100
void setup() {
Serial.begin(115200);
Serial.println("for loop version N\n");
strip.begin();
}
# define t0 100
# define t1 500
# define t2 2000
int mask;
void loop() {
fileOnLeft();
for (; ; );
}
void writeIt(int x) {
int mask = 1;
strip.clear();
for (int ii = 0; ii < SIZE; ii++, mask <<= 1)
strip.setPixelColor(ii, x & mask ? 0xff0000 : 0x0040c0);
strip.show();
}
// fill from the left onto blank row
void fileOnLeft()
{
int mask = 0;
int display = 0;
mask = 0;
for (int ix = 0; ix < SIZE; ix++) {
mask = 1;
for (int ii = 0; ii < ix; ii++, mask <<= 1)
display |= mask;
mask = (1 << SIZE);
for (int ii = 0; ii < SIZE - ix; ii++) {
display &= ~mask;
mask >>= 1;
display |= mask;
writeIt(display);
delay(t0);
}
delay(t1);
}
delay(t2);
}