Examples
Controller Example
Send commands via serial interface and request data from peripherals.
Usage
- Upload to Arduino
- Open Serial Monitor (115200 baud)
- Send:
address,typeID,commandType,data0,data1,data2,data3,data4,data5,data6 - Request:
request=address
Example Commands
8,1,1,75.0,1.0,0.0,65.0,2.0,7.0,3.14 // Send to address 8
request=8 // Request data from address 8
Peripheral Example
Respond to controller commands and data requests.
Key Code Patterns
void handleMessage(CRUMBSMessage &message) {
switch (message.commandType) {
case 0: // Data request
break;
case 1: // Set parameters
break;
}
}
void handleRequest() {
CRUMBSMessage response = {};
response.data[0] = 42.0f;
uint8_t buffer[CRUMBS_MESSAGE_SIZE];
size_t size = peripheral.encodeMessage(response, buffer, sizeof(buffer));
Wire.write(buffer, size);
}
void setup() {
peripheral.begin();
peripheral.onReceive(handleMessage);
peripheral.onRequest(handleRequest);
}
Common Patterns
Multiple Devices
uint8_t addresses[] = {0x08, 0x09, 0x0A};
for (int i = 0; i < 3; i++) {
controller.sendMessage(msg, addresses[i]);
delay(10);
}
Data Requests
Wire.requestFrom(address, CRUMBS_MESSAGE_SIZE);
delay(50);
CRUMBSMessage response;
if (!controller.receiveMessage(response)) {
Serial.println("Failed to read response frame");
}
CRC Validation
if (!crumbsController.decodeMessage(buffer, bytesRead, response)) {
Serial.println("CRC mismatch or malformed frame");
return;
}
I2C Scanning
for (uint8_t addr = 8; addr < 120; addr++) {
Wire.beginTransmission(addr);
if (Wire.endTransmission() == 0) {
Serial.print("Found device at 0x");
Serial.println(addr, HEX);
}
}