const int indataPin = 11; // 连接 74HC165 的 Q7(数据输出)引脚
const int inclockPin = 12; // 连接 74HC165 的 CP(时钟)引脚
const int loadPin = 13; // 连接 74HC165 的 PL(并行加载)引脚
int datapin = 8;
int stpin = 9;
int scpin = 10;
int data[16];
const int steppin1=0;
const int steppin2=1;
const int steppin3=2;
const int steppin4=3;
const int dirpin1=4;
const int dirpin2=5;
const int dirpin3=6;
const int dirpin4=7;
const int gyqpin1=0;
const int gyqpin2=1;
const int gyqpin3=2;
const int gyqpin4=3;
int juli1=5000;
int juli2=800;
int juli3=400;
int speed=500;
void setup() {
pinMode(indataPin, INPUT);
pinMode(inclockPin, OUTPUT);
pinMode(loadPin, OUTPUT);
pinMode(datapin, OUTPUT);
pinMode(stpin, OUTPUT);
pinMode(scpin, OUTPUT);
//dianjimove1(1,steppin1,steppin2,dirpin1,dirpin2,gyqpin1,gyqpin2);
//dianjimove1(1,steppin3,steppin4,dirpin3,dirpin4,gyqpin3,gyqpin4);
}
void loop() {
dianjimove1(juli1,1,steppin1,steppin2,dirpin1,dirpin2,gyqpin1,gyqpin2);
delay(500);
dianjimove1(juli1,1,steppin3,steppin4,dirpin3,dirpin4,gyqpin3,gyqpin4);
delay(500);
while(1){
dianjimove2(juli2,0,steppin1,steppin2,dirpin1,dirpin2);
delay(500);
dianjimove1(juli1,1,steppin1,steppin2,dirpin1,dirpin2,gyqpin1,gyqpin2);
delay(500);
dianjimove2(juli3,0,steppin3,steppin4,dirpin3,dirpin4);
delay(500);
dianjimove1(juli1,1,steppin3,steppin4,dirpin3,dirpin4,gyqpin3,gyqpin4);
delay(500);
}
}
void writer(int pin,boolean tongduan){
digitalWrite(stpin, LOW);
if(tongduan==1){
data[pin]=1;
}else{
data[pin]=0;
}
for(int i=15;i>=0;i--){
digitalWrite(scpin, LOW);
digitalWrite(datapin,data[i]);
digitalWrite(scpin, HIGH);
}
digitalWrite(stpin, HIGH);
}
void dianjimove1(int julidata1,boolean fangxiang,int Dsteppin1,int Dsteppin2,int Ddirpin1,int Ddirpin2,int gyqpin1,int gyqpin2){
boolean stop1=1;
boolean stop2=1;
writer(Ddirpin1,fangxiang);
writer(Ddirpin2,fangxiang);
for(int i=0;i<julidata1;i++){
writer(Dsteppin1,stop1);
writer(Dsteppin2,stop2);
delayMicroseconds(speed);
writer(Dsteppin1,0);
writer(Dsteppin2,0);
delayMicroseconds(speed);
int gyq1,gyq2;
gyq1=readpin(gyqpin1);
gyq2=readpin(gyqpin2);
if(!gyq1){
stop1=0;
}
if(!gyq2){
stop2=0;
}
if(stop1==0&&stop2==0){
return;
}
}
}
void dianjimove2(int julidata2,boolean fangxiang,int Dsteppin1,int Dsteppin2,int Ddirpin1,int Ddirpin2){
writer(Ddirpin1,fangxiang);
writer(Ddirpin2,fangxiang);
for(int i=0;i<julidata2;i++){
writer(Dsteppin1,1);
writer(Dsteppin2,1);\
delayMicroseconds(speed);
writer(Dsteppin1,0);
writer(Dsteppin2,0);
delayMicroseconds(speed);
}
}
boolean readpin(int number){
digitalWrite(loadPin, LOW);
delayMicroseconds(5);
digitalWrite(loadPin, HIGH);
int data[8];
for(int i=7;i>=0;i--){
digitalWrite(inclockPin, LOW);
data[i]=digitalRead(indataPin);
digitalWrite(inclockPin, HIGH);
}
return data[number];
}