M5StackでのPWM制御はArduinoとは違うようなので記録。
① PWMのセットアップ(ledcSetup()
)を行う
② PWMの制御ピンを論理チャネルとコンバイン(ledcAttachPin()
)する
③ PWM制御信号を出力(ledcWrite()
)する
DCモーターの回転方向とブレーキを決める信号は通常のdigitalWrite()で実行。
/#include <m5stack.h>
const uint32_t PWM_Hz = 2000; // PWM freq.
const uint8_t PWM_level = 8; // PWM resolution 8bit(1~256)
const uint8_t PWM_CH = 1; // PWM channel
int pwm_a = 2;
int fw_a = 16;
int rv_a = 17;
int pwm_b = 26;
int fw_b = 5;
int rv_b = 25;
void setup() {
M5.begin();
M5.Power.begin();
pinMode(pwm_b, OUTPUT);
pinMode(fw_b, OUTPUT);
pinMode(rv_b, OUTPUT);
// set PWM_CH & resolution
ledcSetup(PWM_CH, PWM_Hz, PWM_level);
// combine PWM control pin to PWM_CH
ledcAttachPin(pwm_b, PWM_CH);
}
void loop() {
M5.update();
if (M5.BtnA.wasPressed())
{
// PWM duty 0.25(64/256)
ledcWrite(PWM_CH,128);
digitalWrite(fw_b, LOW);
digitalWrite(rv_b, HIGH);
}
else if (M5.BtnC.wasPressed())
{
// stop
ledcWrite(PWM_CH,0);
}
delay(10);
}
DIOのピンアサインは以下の通りです。M5StackはArduinoと違ってDIOの本数が限定させるので、他の信号と重複するのは致し方なし。
admin