Arduinoを用いたモーター複数制御について
モータードライバー(https://www.pololu.com/product/2130/)を用いて、3つのモーターの回転数を独立制御したいと考えています。
Delay()を使ってしまうと、一つのモーターを動かしている途中に他のモーターを動かすことができない為、こちら(http://yohei-msp430.blogspot.com/p/41delayled.html)を参考にしていたのですがうまく行かなかった為質問させていただきました。
モータの選択、初期、中期、後期速度(ms)の時間を指定できる関数generate()を作成して、
loop()内でそれを呼び出すことで個別にモータの制御を行いたいと考えています。
例えば、この関数を使って500msごとにモータの回転が一つずつ始まる、といったことが行いたいです。
このコードに対しての改良点、もしくは参考にできそうなページがあれば教えていただきたいです。
宜しくお願い致します。
int motorL = 44; int motorLb = 23; int motorM = 45; int motorMb = 25; int motorR = 46; int motorRb = 27; unsigned long curMillis; unsigned long fanMillis = 0; unsigned long iniMillis = 0; unsigned long midMillis = 0; unsigned long purMillis = 0; int motorstate = 0; void setup() { pinMode(motorL, OUTPUT); pinMode(motorLb, OUTPUT); pinMode(motorM, OUTPUT); pinMode(motorMb, OUTPUT); pinMode(motorR, OUTPUT); pinMode(motorRb, OUTPUT); digitalWrite(motorLb, LOW); digitalWrite(motorMb, LOW); digitalWrite(motorRb, LOW); //モーターは正転のみ行う為 } void loop() { curMillis = millis(); generate(motorR, 1500, 1000, 1000); delay(500); //本来ここもdelay以外の方法を使いたい・・ generate(motorM, 1500, 1000, 1000); delay(500); generate(motorL, 1500, 1000, 1000); } int generate(char motor, int initial, int middle, int purge) { if (curMillis - iniMillis > initial) { if (motorstate == 1) { analogWrite(motor, 100); } int motorstate++; iniMillis = curMillis; } if (curMillis - midMillis > middle) { if (motorstate == 2) { analogWrite(motor, 130); } motorstate++; iniMillis = curMillis; } if (curMillis - purMillis > purge) { if (motorstate == 3) { analogWrite(motor, 180); } motorstate++; purMillis = curMillis; } if (iniMillis == curMillis && midMillis == curMillis && purMillis == curMillis) { motorstate analogWrite(motor, 0); } }
現状のコードではどういう動作になるんでしょうか