Use PWM to drive the DC motor to rotate forward and backward.
#if defined(ARDUINO_ESP32S3_DEV)
constexpr gpio_num_t kMotor0PinPos = GPIO_NUM_42;
constexpr gpio_num_t kMotor0PinNeg = GPIO_NUM_41;
constexpr gpio_num_t kMotor1PinPos = GPIO_NUM_1;
constexpr gpio_num_t kMotor1PinNeg = GPIO_NUM_2;
constexpr gpio_num_t kMotor2PinPos = GPIO_NUM_45;
constexpr gpio_num_t kMotor2PinNeg = GPIO_NUM_48;
constexpr gpio_num_t kMotor3PinPos = GPIO_NUM_35;
constexpr gpio_num_t kMotor3PinNeg = GPIO_NUM_36;
#elif defined(ARDUINO_ESP32_DEV)
constexpr gpio_num_t kMotor0PinPos = GPIO_NUM_27;
constexpr gpio_num_t kMotor0PinNeg = GPIO_NUM_13;
constexpr gpio_num_t kMotor1PinPos = GPIO_NUM_4;
constexpr gpio_num_t kMotor1PinNeg = GPIO_NUM_2;
constexpr gpio_num_t kMotor2PinPos = GPIO_NUM_17;
constexpr gpio_num_t kMotor2PinNeg = GPIO_NUM_12;
constexpr gpio_num_t kMotor3PinPos = GPIO_NUM_15;
constexpr gpio_num_t kMotor3PinNeg = GPIO_NUM_14;
#else
#error "Only ESP32 and ESP32S3 are supported"
#endif
namespace {
#if ESP_ARDUINO_VERSION >= ESP_ARDUINO_VERSION_VAL(3, 0, 0)
kMotor0PinPos,
kMotor0PinNeg
);
kMotor1PinPos,
kMotor1PinNeg
);
kMotor2PinPos,
kMotor2PinNeg
);
kMotor3PinPos,
kMotor3PinNeg
);
#else
kMotor0PinPos,
0,
kMotor0PinNeg,
1
);
kMotor1PinPos,
2,
kMotor1PinNeg,
3
);
kMotor2PinPos,
4,
kMotor2PinNeg,
5
);
kMotor3PinPos,
6,
kMotor3PinNeg,
7
);
#endif
}
void setup() {
Serial.begin(115200);
printf("setting up\n");
g_motor_0.Init();
g_motor_1.Init();
g_motor_2.Init();
g_motor_3.Init();
printf("setup completed\n");
}
void loop() {
g_motor_0.RunPwmDuty(1023);
g_motor_1.RunPwmDuty(1023);
g_motor_2.RunPwmDuty(1023);
g_motor_3.RunPwmDuty(1023);
printf("forward\n");
delay(1000);
g_motor_0.RunPwmDuty(-1023);
g_motor_1.RunPwmDuty(-1023);
g_motor_2.RunPwmDuty(-1023);
g_motor_3.RunPwmDuty(-1023);
printf("backward\n");
delay(1000);
}
A two-channel PWM motor driver class.
String Version()
Get the version number string.