ひらおかさんのプログラムサンプル3

 
//For Hiraoka
//ShockSensor & Solenoid & Motor
//2009.7.21

//PinAssign
int SOLENOID=11;
int SWITCH=12;
int SHOCK=14;
//StepMotorPin
int ST_X1=2;
int ST_X2=4;
int ST_Y1=3;
int ST_Y2=5;
//Tsumami
int Pot=5;

//Value
#define MAX 100
int rythm_cnt=0;
int rythm[MAX];
int dly;
int MotorCnt;

//Setup
void setup(){
pinMode(SOLENOID,OUTPUT);
pinMode(SHOCK,INPUT);
pinMode(SWITCH,INPUT);
pinMode(ST_X1, OUTPUT);
pinMode(ST_X2, OUTPUT);
pinMode(ST_Y1, OUTPUT);
pinMode(ST_Y2, OUTPUT);
pinMode(ledPin, OUTPUT);

for(int i=0; i<MAX; i++){
rythm[i]=0;
}
}

//Loop
void loop(){
rythm_cnt++;
if(rythm_cnt>=MAX) rythm_cnt=0;
if(digitalRead(SHOCK)==1){
rythm[rythm_cnt]=1;
}

dly=50;
for(int i=0; i<dly; i++){
delay(1);
if(digitalRead(SWITCH)==1) {
for(int j=0; j<MAX; j++){
rythm[j]=0;
rythm_cnt=0;
}
}
if(rythm[rythm_cnt]==0){
MotorCnt++;
MoveMotor(MotorCnt);
}
}

if(rythm[rythm_cnt]==1){
digitalWrite(SOLENOID,HIGH);
}
else{
digitalWrite(SOLENOID,LOW);
MotorCnt++;
MoveMotor(MotorCnt);

}
}


//MoveMotor
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;
}
}

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


0 件のコメント:

コメントを投稿