ここを参考に。
http://nekosan0.bake-neko.net/connection_stepper.html
#include <MsTimer2.h> volatile int iCount; void counting() { iCount++; if (iCount==960) { iCount = 0; } } void setup() { Serial.begin(9600); pinMode(6, OUTPUT); //oc0a (PD6) for X pinMode(5, OUTPUT); //oc0b (PD5) for Y pinMode(9, OUTPUT); //oc1a (PB1) for /X pinMode(10, OUTPUT); //oc1b (PB2) for /Y iCount = 0; MsTimer2::set(100, counting); // 100ms period MsTimer2::start(); } void loop() { int iReadtimer; int iStep_rot; int iStep; int iVar; int iOut_a; int iOut_b; iReadtimer = iCount; //read timer from counter iStep_rot = iReadtimer / 10; //step count iStep = iStep_rot % 4; //step no (0..3) iVar = iReadtimer % (iStep_rot * 10); //variation in the step (0..9) if (iVar <= 4) { iOut_a = 255; //output data B iOut_b = 255*iVar/5; //output data A }else { iOut_a = 255 - ((iVar-5)*255/5); //output data B iOut_b = 255 ; //output data A } switch (iStep) { case 0: analogWrite(6, iOut_a); analogWrite(5, iOut_b); analogWrite(9, 0); analogWrite(10, 0); break; case 1: //analogWrite(6, 0); digitalWrite(6,LOW); analogWrite(5, iOut_a); analogWrite(9, iOut_b); analogWrite(10, 0); break; case 2: //analogWrite(6, 0); //analogWrite(5, 0); digitalWrite(6,LOW); digitalWrite(5,LOW); analogWrite(9, iOut_a); analogWrite(10, iOut_b); break; case 3: analogWrite(6, iOut_b); //analogWrite(5, 0); digitalWrite(5,LOW); analogWrite(9, 0); analogWrite(10, iOut_a); default: break; } Serial.print(iStep); Serial.print(iOut_b); Serial.println(iOut_a); }
MP4401で試したけど、あまりうまくいかなかった。