feat: add dual BTS7960 motor driver support
- Refactor MotorController to parameterized class with MotorPins struct - Add motor1 and motor2 instances with shared enable pins (GPIO 14, 27) - Motor 2 uses GPIO 32/33 for PWM, GPIO 36/39 for current sense - Update web UI with side-by-side dual motor control panels - Add per-motor API endpoints (/motor1/*, /motor2/*) - Add emergency stop button for both motors - Legacy endpoints map to motor1 for backwards compatibility - Update readme and AGENTS.md documentation
This commit is contained in:
30
src/main.cpp
30
src/main.cpp
@@ -4,10 +4,16 @@
|
||||
#include "motor.h"
|
||||
#include "webserver.h"
|
||||
|
||||
// Called when motor stall is detected
|
||||
void onMotorStall() {
|
||||
Serial.println("Stall callback triggered - stopping motor!");
|
||||
motor.stop();
|
||||
// Called when motor 1 stall is detected
|
||||
void onMotor1Stall() {
|
||||
Serial.println("Motor1 stall callback triggered - stopping motor!");
|
||||
motor1.stop();
|
||||
}
|
||||
|
||||
// Called when motor 2 stall is detected
|
||||
void onMotor2Stall() {
|
||||
Serial.println("Motor2 stall callback triggered - stopping motor!");
|
||||
motor2.stop();
|
||||
}
|
||||
|
||||
void setupWiFi() {
|
||||
@@ -44,13 +50,16 @@ void setup() {
|
||||
delay(1000);
|
||||
|
||||
Serial.println("\n=============================");
|
||||
Serial.println(" BTS7960 Motor Controller");
|
||||
Serial.println(" Simple Stall Detection");
|
||||
Serial.println(" Dual BTS7960 Motor Controller");
|
||||
Serial.println(" Differential Drive Robot");
|
||||
Serial.println("=============================\n");
|
||||
|
||||
// Initialize motor controller
|
||||
motor.begin();
|
||||
motor.setStallCallback(onMotorStall);
|
||||
// Initialize motor controllers
|
||||
motor1.begin();
|
||||
motor1.setStallCallback(onMotor1Stall);
|
||||
|
||||
motor2.begin();
|
||||
motor2.setStallCallback(onMotor2Stall);
|
||||
|
||||
// Connect to WiFi
|
||||
setupWiFi();
|
||||
@@ -65,6 +74,7 @@ void setup() {
|
||||
|
||||
void loop() {
|
||||
handleWebServer();
|
||||
motor.update(); // Update current sensing and logging
|
||||
motor1.update(); // Update current sensing and logging for motor 1
|
||||
motor2.update(); // Update current sensing and logging for motor 2
|
||||
delay(1);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user