/*code by青年创造工坊@岳十二,2020.02.07未实机验证*/
#define C1 262
#define C3 330
#define C7 495
//定义编码器引脚连接
int CK = 2;//数据CLK->D2
int DT = 3;//数据DT->D3
int SW0 = 4;//按钮SW->D4
//定义7段led引脚连接
int led1=9;
int led2=8;
int led4=7;
int led7=5;
int led6=6;
int led9=10;
int led10=11;
//定义拨杆按钮引脚连接
int SW1=A6;
int SW2=A7;
//定义步进电机引脚连接
int EN=12;
int S0=A4;
int S1=A5;
int D0=1;
int D1=0;
//定义dc控制引脚连接
int P0=A0;
int P1=A1;
int P2=A2;
int P3=A3;
int BUZ=13; //蜂鸣器引脚10
//显示数字
int num_array[10][7] = { { 1,1,1,1,1,1,0 }, // 0
{ 0,1,1,0,0,0,0 }, // 1
{ 1,1,0,1,1,0,1 }, // 2
{ 1,1,1,1,0,0,1 }, // 3
{ 0,1,1,0,0,1,1 }, // 4
{ 1,0,1,1,0,1,1 }, // 5
{ 1,0,1,1,1,1,1 }, // 6
{ 1,1,1,0,0,0,0 }, // 7
{ 1,1,1,1,1,1,1 }, // 8
{ 1,1,1,0,0,1,1 }}; // 9
int val=0;//设定
int vall=0;
int t=50;
int k=800;
void setup()
{ pinMode(CK,INPUT);
pinMode(DT,INPUT);
pinMode(SW0,INPUT_PULLUP);//连接按钮的引脚设为内部上拉==pinMode(SW0, INPUT);digitalWrite(SW0, HIGH);
pinMode(SW1,INPUT_PULLUP);
pinMode(SW2,INPUT_PULLUP);
int a[]={5,6,7,8,9,10,11}; for (int i=0;i<7;i++){ pinMode(a,OUTPUT);}//分别将5-11端口设置为输出模式
pinMode(EN,OUTPUT);
pinMode(S0,OUTPUT);
pinMode(S1,OUTPUT);
pinMode(D0,OUTPUT);
pinMode(D1,OUTPUT);
pinMode(P0,OUTPUT);
pinMode(P1,OUTPUT);
pinMode(P2,OUTPUT);
pinMode(P3,OUTPUT);
Serial.begin(9600);
}
void loop()
{
Get();Num(val);
if (!digitalRead(SW0)){digitalWrite(EN,LOW); MOT();Serial.println('0');digitalWrite(EN,HIGH); }
while(digitalRead(SW1) == LOW){C0a();if (!digitalRead(SW0)){digitalWrite(EN,LOW); MOT();Serial.println('0');digitalWrite(EN,HIGH); }}
while(digitalRead(SW2) == LOW){C1b();if (!digitalRead(SW0)){digitalWrite(EN,LOW); MOT();Serial.println('0');digitalWrite(EN,HIGH); }}
}
Get()//获取编码器数字
{ int clkValue = digitalRead(CK);//读取CLK引脚的电平
int dtValue = digitalRead(DT);//读取DT引脚的电平
val=val+clkValue-dtValue;
if (val<0||val>9){val=0;}
Serial.print("NUM:");Serial.println(val);delay(333);}
void Num(int number)// 数字显示
{int pin=5;for(int j=0;j<7;j++) { digitalWrite(pin, num_array[number][j]);pin++;} }
void Num0()//数字显示清空
{for(int i=5;i<12;i++) { pinMode(i,OUTPUT);}delay(100);}
MOT()//平台旋转循环
{ int n=0; BUZ1();
while(n==val*20)//需测试
{ for(int j=0;j<30;j++)//需测试
{ M1a();M0a();}
for(int j=0;j<30;j++)///需测试
{ M1b();M0a();}
n++;
if (n%20==0){vall=val-n/20;Num(vall); }
}
BUZ0();
}
int BUZ0() ////提示音
{tone(13,C7);delay(100);tone(13,C1);delay(100);tone(13,C3);delay(100);noTone(10); }
int BUZ1() ////提示音
{tone(13,C7);delay(100);noTone(10); }
int BUZ2() ////提示音
{tone(13,C3);delay(100);noTone(10); }
C0a()//DC控制0号正向
{digitalWrite(P0,HIGH);digitalWrite(P1,LOW);}
C0b()//DC控制0号反向
{digitalWrite(P1,HIGH);digitalWrite(P0,LOW);}
C1a()//DC控制1号正向
{digitalWrite(P2,HIGH);digitalWrite(P3,LOW);}
C1b()//DC控制1号反向
{digitalWrite(P3,HIGH);digitalWrite(P2,LOW);}
M0a()//0号电机正向
{digitalWrite(D0,HIGH);int i=0;
while(i
{digitalWrite(S0,HIGH);delayMicroseconds(k);
digitalWrite(S0,LOW);delayMicroseconds(k);i++;} }
M0b()//0号电机反向
{digitalWrite(D0,LOW);int i=0;
while(i
{digitalWrite(S0,HIGH);delayMicroseconds(k);
digitalWrite(S0,LOW);delayMicroseconds(k);i++;} }
M1a()//1号电机正向
{digitalWrite(D1,HIGH);int i=0;
while(i
{digitalWrite(S1,HIGH);delayMicroseconds(k);
digitalWrite(S1,LOW);delayMicroseconds(k);i++;} }
M1b()//1号电机反向
{digitalWrite(D1,LOW);int i=0;
while(i
{digitalWrite(S1,HIGH);delayMicroseconds(k);
digitalWrite(S1,LOW);delayMicroseconds(k);i++;} }