commit 1c0df5721c3bc9e039fc671a727df1a4a894a1f1 Author: Ghassan Yusuf Date: Tue Oct 7 11:35:26 2025 +0300 Add code/controller/controller.ino diff --git a/code/controller/controller.ino b/code/controller/controller.ino new file mode 100644 index 0000000..b9c9ace --- /dev/null +++ b/code/controller/controller.ino @@ -0,0 +1,51 @@ +#include +#include + +// MAC address of the car unit +uint8_t carAddr[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED}; + +typedef struct { + int speed; // -255 (reverse) to 255 (forward) + int direction; // -100 (left) to 100 (right) +} CommandPacket; + +typedef struct { + int currentSpeed; + int batteryVoltage; // e.g., millivolts + int temperature; // Celsius +} TelemetryPacket; + +TelemetryPacket telemetry; + +void onTelemetryRecv(const uint8_t * mac, const uint8_t *incomingData, int len) { + memcpy(&telemetry, incomingData, sizeof(telemetry)); + Serial.print("Car Speed: "); Serial.println(telemetry.currentSpeed); + Serial.print("Batt Voltage: "); Serial.println(telemetry.batteryVoltage); + Serial.print("Temperature: "); Serial.println(telemetry.temperature); +} + +void setup() { + Serial.begin(115200); + WiFi.mode(WIFI_STA); + if (esp_now_init() != ESP_OK) { + Serial.println("ESP-NOW init failed!"); + return; + } + esp_now_peer_info_t peerInfo; + memcpy(peerInfo.peer_addr, carAddr, 6); + peerInfo.channel = 0; + peerInfo.encrypt = false; + esp_now_add_peer(&peerInfo); + + esp_now_register_recv_cb(onTelemetryRecv); +} + +void loop() { + CommandPacket cmd; + // Example: Read joystick/button to determine speed/direction + cmd.speed = analogRead(34) - 2048; // Map your analog input to desired speed + cmd.direction = analogRead(35) - 2048; // Map to direction: left/right + + esp_now_send(carAddr, (uint8_t*)&cmd, sizeof(cmd)); + delay(100); // Adjust send rate as needed +}