Update projects/espnow/rc car/receiver/receiver.ino
This commit is contained in:
parent
6582129043
commit
a5b1684ec9
@ -2,8 +2,9 @@
|
|||||||
#include <esp_now.h>
|
#include <esp_now.h>
|
||||||
#include <ESP32Servo.h>
|
#include <ESP32Servo.h>
|
||||||
|
|
||||||
Servo leftServo1, leftServo2, rightServo1, rightServo2;
|
Servo leftServoA, leftServoB, rightServoA, rightServoB;
|
||||||
int leftServoPin1 = 12, leftServoPin2 = 13, rightServoPin1 = 14, rightServoPin2 = 15;
|
int leftPins[2] = {12, 13};
|
||||||
|
int rightPins[2] = {14, 15};
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
int speed;
|
int speed;
|
||||||
@ -11,45 +12,44 @@ typedef struct {
|
|||||||
} CommandPacket;
|
} CommandPacket;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
int leftServoSpeed;
|
int leftSpeed;
|
||||||
int rightServoSpeed;
|
int rightSpeed;
|
||||||
int batteryLevel;
|
int battery;
|
||||||
} TelemetryPacket;
|
} TelemetryPacket;
|
||||||
|
|
||||||
CommandPacket command;
|
CommandPacket command;
|
||||||
uint8_t controllerAddr[] = {0x24, 0x6F, 0x28, 0x33, 0xDE, 0xB4}; // Remote MAC
|
TelemetryPacket telemetry;
|
||||||
|
|
||||||
|
uint8_t remoteAddr[] = {0x24, 0x6F, 0x28, 0x33, 0xDE, 0xB4}; // MAC of remote
|
||||||
|
|
||||||
void onCommandRecv(const uint8_t * mac, const uint8_t *incomingData, int len) {
|
void onCommandRecv(const uint8_t * mac, const uint8_t *incomingData, int len) {
|
||||||
memcpy(&command, incomingData, sizeof(command));
|
memcpy(&command, incomingData, sizeof(command));
|
||||||
int leftSpeed = constrain(command.speed + command.turn, -255, 255);
|
|
||||||
int rightSpeed = constrain(command.speed - command.turn, -255, 255);
|
|
||||||
|
|
||||||
// Map speed value to servo position (0-180 for continuous rotation speed control)
|
int left = constrain(command.speed + command.turn, -255, 255);
|
||||||
int leftPWM = map(leftSpeed, -255, 255, 0, 180);
|
int right = constrain(command.speed - command.turn, -255, 255);
|
||||||
int rightPWM = map(rightSpeed, -255, 255, 0, 180);
|
|
||||||
|
|
||||||
leftServo1.write(leftPWM);
|
int pwmLeft = map(left, -255, 255, 0, 180);
|
||||||
leftServo2.write(leftPWM);
|
int pwmRight = map(right, -255, 255, 0, 180);
|
||||||
rightServo1.write(rightPWM);
|
|
||||||
rightServo2.write(rightPWM);
|
|
||||||
|
|
||||||
// Store for telemetry
|
leftServoA.write(pwmLeft);
|
||||||
telemetry.leftServoSpeed = leftSpeed;
|
leftServoB.write(pwmLeft);
|
||||||
telemetry.rightServoSpeed = rightSpeed;
|
rightServoA.write(pwmRight);
|
||||||
|
rightServoB.write(pwmRight);
|
||||||
|
|
||||||
|
telemetry.leftSpeed = left;
|
||||||
|
telemetry.rightSpeed = right;
|
||||||
}
|
}
|
||||||
|
|
||||||
TelemetryPacket telemetry;
|
|
||||||
|
|
||||||
void setup() {
|
void setup() {
|
||||||
Serial.begin(115200);
|
Serial.begin(115200);
|
||||||
leftServo1.attach(leftServoPin1);
|
leftServoA.attach(leftPins[0]);
|
||||||
leftServo2.attach(leftServoPin2);
|
leftServoB.attach(leftPins[1]);
|
||||||
rightServo1.attach(rightServoPin1);
|
rightServoA.attach(rightPins[0]);
|
||||||
rightServo2.attach(rightServoPin2);
|
rightServoB.attach(rightPins[1]);
|
||||||
WiFi.mode(WIFI_STA);
|
WiFi.mode(WIFI_STA);
|
||||||
esp_now_init();
|
esp_now_init();
|
||||||
esp_now_peer_info_t peerInfo;
|
esp_now_peer_info_t peerInfo;
|
||||||
memcpy(peerInfo.peer_addr, controllerAddr, 6);
|
memcpy(peerInfo.peer_addr, remoteAddr, 6);
|
||||||
peerInfo.channel = 0;
|
peerInfo.channel = 0;
|
||||||
peerInfo.encrypt = false;
|
peerInfo.encrypt = false;
|
||||||
esp_now_add_peer(&peerInfo);
|
esp_now_add_peer(&peerInfo);
|
||||||
@ -58,10 +58,9 @@ void setup() {
|
|||||||
|
|
||||||
unsigned long lastTelemetrySent = 0;
|
unsigned long lastTelemetrySent = 0;
|
||||||
void loop() {
|
void loop() {
|
||||||
// Telemetry every 500 ms
|
|
||||||
if (millis() - lastTelemetrySent > 500) {
|
if (millis() - lastTelemetrySent > 500) {
|
||||||
telemetry.batteryLevel = analogRead(36); // Replace with battery calculation if needed
|
telemetry.battery = analogRead(36); // Replace with proper battery voltage calculation
|
||||||
esp_now_send(controllerAddr, (uint8_t*)&telemetry, sizeof(telemetry));
|
esp_now_send(remoteAddr, (uint8_t*)&telemetry, sizeof(telemetry));
|
||||||
lastTelemetrySent = millis();
|
lastTelemetrySent = millis();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user