ユニポーラステッピングモータの1−2相励磁

1−2相励磁が8ステップなのでバイポーラのときのハーフステップにあたるっぽい。

http://practice.ed.sie.dendai.ac.jp/micom/steppingmotor.pdf

コード

//STEPPER MOTOR DRIVING PROGRAM
//MOTOR ST−42BYG020
int pin[4] = {10,11,12,13};

//int pin[4] = {3,5,6,9};//for PWM output

int t_delay = 0;
int t_micro = 500;

int status = 1;

int unit = 102;// 255*2/5, for 2V output

void setup(){
  for(int i=0;i < 4;i++){
    pinMode(pin[i], OUTPUT);
  }
}

void loop(){
  rotate();
  //digitalWrite(pin[0],HIGH);
}

void rotate(){
 switch(status){
  case 1:
    //STEP1
    digitalWrite(pin[0], HIGH);
    digitalWrite(pin[1], LOW);
    digitalWrite(pin[2], LOW);
    digitalWrite(pin[3], LOW);
    delay(t_delay);
    delayMicroseconds(t_micro);
    status = 2;
  case 2:
    //STEP2
    digitalWrite(pin[0], HIGH);
    digitalWrite(pin[1], LOW);
    digitalWrite(pin[2], LOW);
    digitalWrite(pin[3], LOW);
    delay(t_delay);
    delayMicroseconds(t_micro);
    status = 3;
  case 3:
    //STEP3
    digitalWrite(pin[0], HIGH);
    digitalWrite(pin[1], HIGH);
    digitalWrite(pin[2], LOW);
    digitalWrite(pin[3], LOW);
    delay(t_delay);
    delayMicroseconds(t_micro);
    status = 4;
  case 4:
    //STEP4
    digitalWrite(pin[0], LOW);
    digitalWrite(pin[1], HIGH);
    digitalWrite(pin[2], LOW);
    digitalWrite(pin[3], LOW);
    delay(t_delay);
    delayMicroseconds(t_micro);
    status = 5;
  case 5:
    //STEP5
    digitalWrite(pin[0], LOW);
    digitalWrite(pin[1], HIGH);
    digitalWrite(pin[2], HIGH);
    digitalWrite(pin[3], LOW);
    delay(t_delay);
    delayMicroseconds(t_micro);
    status = 6;
  case 6:
    //STEP6
    digitalWrite(pin[0], LOW);
    digitalWrite(pin[1], LOW);
    digitalWrite(pin[2], HIGH);
    digitalWrite(pin[3], LOW);
    delay(t_delay);
    delayMicroseconds(t_micro);
    status = 7;
  case 7:
    //STEP7
    digitalWrite(pin[0], LOW);
    digitalWrite(pin[1], LOW);
    digitalWrite(pin[2], HIGH);
    digitalWrite(pin[3], HIGH);
    delay(t_delay);
    delayMicroseconds(t_micro);
    status = 8;
  case 8:
    //STEP8
    digitalWrite(pin[0], LOW);
    digitalWrite(pin[1], LOW);
    digitalWrite(pin[2], LOW);
    digitalWrite(pin[3], HIGH);
    delay(t_delay);
    delayMicroseconds(t_micro);
    status = 1;
 }
}

void r_rotate(){
 switch(status){
  case 1:
    //STEP1
    digitalWrite(pin[0], HIGH);
    digitalWrite(pin[1], LOW);
    digitalWrite(pin[2], LOW);
    digitalWrite(pin[3], LOW);
    delay(t_delay);
    delayMicroseconds(t_micro);
    status = 2;
  case 2:
    //STEP2
    digitalWrite(pin[0], HIGH);
    digitalWrite(pin[1], LOW);
    digitalWrite(pin[2], LOW);
    digitalWrite(pin[3], HIGH);
    delay(t_delay);
    delayMicroseconds(t_micro);
    status = 3;
  case 3:
    //STEP3
    digitalWrite(pin[0], LOW);
    digitalWrite(pin[1], LOW);
    digitalWrite(pin[2], LOW);
    digitalWrite(pin[3], HIGH);
    delay(t_delay);
    delayMicroseconds(t_micro);
    status = 4;
  case 4:
    //STEP4
    digitalWrite(pin[0], LOW);
    digitalWrite(pin[1], LOW);
    digitalWrite(pin[2], LOW);
    digitalWrite(pin[3], HIGH);
    delay(t_delay);
    delayMicroseconds(t_micro);
    status = 5;
  case 5:
    //STEP5
    digitalWrite(pin[0], LOW);
    digitalWrite(pin[1], LOW);
    digitalWrite(pin[2], HIGH);
    digitalWrite(pin[3], HIGH);
    delay(t_delay);
    delayMicroseconds(t_micro);
    status = 6;
  case 6:
    //STEP6
    digitalWrite(pin[0], LOW);
    digitalWrite(pin[1], LOW);
    digitalWrite(pin[2], HIGH);
    digitalWrite(pin[3], LOW);
    delay(t_delay);
    delayMicroseconds(t_micro);
    status = 7;
  case 7:
    //STEP7
    digitalWrite(pin[0], LOW);
    digitalWrite(pin[1], HIGH);
    digitalWrite(pin[2], HIGH);
    digitalWrite(pin[3], LOW);
    delay(t_delay);
    delayMicroseconds(t_micro);
    status = 8;
  case 8:
    //STEP8
    digitalWrite(pin[0], LOW);
    digitalWrite(pin[1], HIGH);
    digitalWrite(pin[2], LOW);
    digitalWrite(pin[3], LOW);
    delay(t_delay);
    delayMicroseconds(t_micro);
    status = 1;
 }
}