#include #define I2C_DEV_ADDR 0x55 // Must match slave void setup() { Serial.begin(115200); Wire.begin(); // default pins for ESP32-C3: SDA=8, SCL=9 Serial.println("Enter number of pixels:"); } void loop() { static int numPixels = 0; static bool pixelsSet = false; // Step 1: Get number of pixels from user if (!pixelsSet && Serial.available()) { numPixels = Serial.parseInt(); if (numPixels > 0 && numPixels <= 100) { // reasonable limit Wire.beginTransmission(I2C_DEV_ADDR); Wire.write(0x01); // Command: set pixel count Wire.write(numPixels); Wire.endTransmission(); pixelsSet = true; Serial.println("Enter command: (example: ALL 255 0 0 128) or (PIXEL 3 0 255 0 255)"); Serial.println("Format:"); Serial.println("ALL R G B I"); Serial.println("PIXEL N R G B I"); } else { Serial.println("Invalid pixel count. Try again."); } } // Step 2: Get lighting commands from user if (pixelsSet && Serial.available()) { String cmd = Serial.readStringUntil('\n'); cmd.trim(); if (cmd.startsWith("ALL")) { int r, g, b, i; sscanf(cmd.c_str(), "ALL %d %d %d %d", &r, &g, &b, &i); Wire.beginTransmission(I2C_DEV_ADDR); Wire.write(0x02); // Command: set all pixels Wire.write(r); Wire.write(g); Wire.write(b); Wire.write(i); Wire.endTransmission(); } else if (cmd.startsWith("PIXEL")) { int n, r, g, b, i; sscanf(cmd.c_str(), "PIXEL %d %d %d %d %d", &n, &r, &g, &b, &i); Wire.beginTransmission(I2C_DEV_ADDR); Wire.write(0x03); // Command: set one pixel Wire.write(n); Wire.write(r); Wire.write(g); Wire.write(b); Wire.write(i); Wire.endTransmission(); } Serial.println("Command sent."); } }