first upload
This commit is contained in:
commit
51cdbad841
55
Master/Master.ino
Normal file
55
Master/Master.ino
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
#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.");
|
||||||
|
}
|
||||||
|
}
|
56
Slave/Slave.ino
Normal file
56
Slave/Slave.ino
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
#include <Wire.h>
|
||||||
|
#include <Adafruit_NeoPixel.h>
|
||||||
|
|
||||||
|
#define I2C_DEV_ADDR 0x55
|
||||||
|
#define NEOPIXEL_PIN 19 // Change as needed
|
||||||
|
#define MAX_PIXELS 100
|
||||||
|
|
||||||
|
Adafruit_NeoPixel strip(MAX_PIXELS, NEOPIXEL_PIN, NEO_GRB + NEO_KHZ800);
|
||||||
|
|
||||||
|
uint8_t pixelCount = 1;
|
||||||
|
|
||||||
|
void receiveEvent(int len) {
|
||||||
|
delay(50); // Add more delay for stability as requested
|
||||||
|
|
||||||
|
if (len < 1) return;
|
||||||
|
uint8_t cmd = Wire.read();
|
||||||
|
|
||||||
|
if (cmd == 0x01 && len >= 2) { // Set pixel count
|
||||||
|
pixelCount = Wire.read();
|
||||||
|
strip.updateLength(pixelCount);
|
||||||
|
strip.begin();
|
||||||
|
strip.show();
|
||||||
|
}
|
||||||
|
else if (cmd == 0x02 && len >= 5) { // Set all pixels: R G B I
|
||||||
|
uint8_t r = Wire.read();
|
||||||
|
uint8_t g = Wire.read();
|
||||||
|
uint8_t b = Wire.read();
|
||||||
|
uint8_t intensity = Wire.read();
|
||||||
|
for (int i = 0; i < pixelCount; i++) {
|
||||||
|
strip.setPixelColor(i, strip.Color(r * intensity / 255, g * intensity / 255, b * intensity / 255));
|
||||||
|
}
|
||||||
|
strip.show();
|
||||||
|
}
|
||||||
|
else if (cmd == 0x03 && len >= 6) { // Set one pixel: N R G B I
|
||||||
|
uint8_t n = Wire.read();
|
||||||
|
uint8_t r = Wire.read();
|
||||||
|
uint8_t g = Wire.read();
|
||||||
|
uint8_t b = Wire.read();
|
||||||
|
uint8_t intensity = Wire.read();
|
||||||
|
if (n < pixelCount) {
|
||||||
|
strip.setPixelColor(n, strip.Color(r * intensity / 255, g * intensity / 255, b * intensity / 255));
|
||||||
|
strip.show();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void setup() {
|
||||||
|
strip.begin();
|
||||||
|
strip.show();
|
||||||
|
Wire.begin(I2C_DEV_ADDR, 8, 9); // ESP32-S3 default I2C pins: SDA=8, SCL=9
|
||||||
|
Wire.onReceive(receiveEvent);
|
||||||
|
}
|
||||||
|
|
||||||
|
void loop() {
|
||||||
|
delay(100); // Main loop delay, not critical
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user