m5stack-encoder-motor-pwm-control.ino
Open-loop motor speed control via direct I2C write.
This example shows how to send basic speed commands. It uses a hypothetical register address (0x0A) to illustrate the logic; refer to the M5Stack datasheet for exact registers. The code varies speed from 0 to 255 and then reverses. The DRV8837DSGR handles internal PWM. An external power supply is required for the motor.
m5stack-encoder-motor-pwm-control.ino
#include <Wire.h>
#define I2C_ADDRESS 0x2F
#define REG_MOTOR_SPEED 0x0A // Exemple d'adresse registre (à vérifier selon datasheet M5Stack)
void setup() {
Serial.begin(115200);
Wire.begin();
// Mode PWM simple
// Note: Les adresses de registre spécifiques doivent être consultées dans la documentation M5Stack
// Ici on simule l'écriture d'une valeur de vitesse (0-255)
setMotorSpeed(150);
}
void loop() {
// Variation simple de la vitesse
for(int i=0; i<=255; i+=10) {
setMotorSpeed(i);
delay(100);
}
for(int i=255; i>=0; i-=10) {
setMotorSpeed(i);
delay(100);
}
}
void setMotorSpeed(uint8_t speed) {
Wire.beginTransmission(I2C_ADDRESS);
Wire.write(REG_MOTOR_SPEED);
Wire.write(speed);
Wire.endTransmission();
}