2025-04-24 11:43:45 +03:00

56 lines
1.7 KiB
C++

#include <Wire.h>
#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.");
}
}