実用的なステッピングモーターのプログラム その2

スイッチを押している間、逆回転します。

こちらで解説

---

//StepMotor sample
//2009.6.2

//PinAssign
int ST_X1=2;
int ST_X2=4;
int ST_Y1=3;
int ST_Y2=5;
int ledPin=13;

//PotentionMeter
int Pot=5;
//Switch
int Switch=6;
int dly;
signed int Count=0;
signed int Dimmention=1;


void setup(){
pinMode(ST_X1, OUTPUT);
pinMode(ST_X2, OUTPUT);
pinMode(ST_Y1, OUTPUT);
pinMode(ST_Y2, OUTPUT);
pinMode(ledPin, OUTPUT);
//POT is Default AnalogInput
pinMode(Switch,INPUT);
dly = analogRead(Pot)/4;
}

void MoveMotor(int stp){
int s;
s=stp%8;

switch(s){
case 0:
digitalWrite(ST_X1, HIGH);
digitalWrite(ST_X2, LOW);
digitalWrite(ST_Y1, LOW);
digitalWrite(ST_Y2, LOW);
dly = analogRead(Pot)/4;
delay(dly);
break;

case 1:
digitalWrite(ST_X1, HIGH);
digitalWrite(ST_X2, HIGH);
digitalWrite(ST_Y1, LOW);
digitalWrite(ST_Y2, LOW);
dly = analogRead(Pot)/4;
delay(dly);
break;

case 2:
digitalWrite(ST_X1, LOW);
digitalWrite(ST_X2, HIGH);
digitalWrite(ST_Y1, LOW);
digitalWrite(ST_Y2, LOW);
dly = analogRead(Pot)/4;
delay(dly);
break;

case 3:
digitalWrite(ST_X1, LOW);
digitalWrite(ST_X2, HIGH);
digitalWrite(ST_Y1, HIGH);
digitalWrite(ST_Y2, LOW);
dly = analogRead(Pot)/4;
delay(dly);
break;

case 4:
digitalWrite(ST_X1, LOW);
digitalWrite(ST_X2, LOW);
digitalWrite(ST_Y1, HIGH);
digitalWrite(ST_Y2, LOW);
dly = analogRead(Pot)/4;
delay(dly);
break;

case 5:
digitalWrite(ST_X1, LOW);
digitalWrite(ST_X2, LOW);
digitalWrite(ST_Y1, HIGH);
digitalWrite(ST_Y2, HIGH);
dly = analogRead(Pot)/4;
delay(dly);
break;

case 6:
digitalWrite(ST_X1, LOW);
digitalWrite(ST_X2, LOW);
digitalWrite(ST_Y1, LOW);
digitalWrite(ST_Y2, HIGH);
dly = analogRead(Pot)/4;
delay(dly);
break;

case 7:
digitalWrite(ST_X1, HIGH);
digitalWrite(ST_X2, LOW);
digitalWrite(ST_Y1, LOW);
digitalWrite(ST_Y2, HIGH);
dly = analogRead(Pot)/4;
delay(dly);
break;
}
}

void StopMotor(){
digitalWrite(ST_X1, LOW);
digitalWrite(ST_X2, LOW);
digitalWrite(ST_Y1, LOW);
digitalWrite(ST_Y2, LOW);
}

void loop(){
if(digitalRead(Switch)==1){
Dimmention=1;
}else{
Dimmention=-1;
}

Count=Count+Dimmention;

if(Count>96){
Count=0;
}else if(Count<0){
Count=96;
}

MoveMotor(Count);

}

1 件のコメント: