【Proteus仿真】Arduino+uln2003驱动步进电机+单按键启保停正反转控制

【Proteus仿真】Arduino+uln2003驱动步进电机+单按键启保停正反转控制


  • Proteus仿真
    在这里插入图片描述

功能实现

  • 采用外部中断来获取按键信息

程序代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99

#define LED ( 13 )
#define MOTOR\_PIN0 ( 8 )
#define MOTOR\_PIN1 ( 9 )
#define MOTOR\_PIN2 ( 10 )
#define MOTOR\_PIN3 ( 11 )
#define interruptPin ( 2 )
#define Speed 220//速度
volatile static unsigned char keyFlag = 0 ;//按键状态

void fanzhuan();
void zhengzhuan();
void Stop();
void trigger(){
keyFlag++;
keyFlag%=3;
}

void setup()
{
unsigned char ro[]={MOTOR_PIN0,MOTOR_PIN1 ,MOTOR_PIN2, MOTOR_PIN3};
pinMode( LED, OUTPUT );
for(unsigned char i=0;i <4;i++){
pinMode( ro[i], OUTPUT );
digitalWrite(ro[i],LOW);
}
pinMode(interruptPin, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(interruptPin), trigger, FALLING);
}

void loop()
{
if(keyFlag)keyFlag==1?zhengzhuan():fanzhuan(); else Stop();
}

void Stop(){
//这里可以填写其他控制代码
digitalWrite( MOTOR_PIN0, LOW );
digitalWrite( MOTOR_PIN1, LOW );
digitalWrite( MOTOR_PIN2, LOW );
digitalWrite( MOTOR_PIN3, LOW );
digitalWrite( LED, HIGH );
}

void zhengzhuan(){
digitalWrite( MOTOR_PIN0, HIGH );
digitalWrite( MOTOR_PIN1, LOW );
digitalWrite( MOTOR_PIN2, LOW );
digitalWrite( MOTOR_PIN3, LOW );
digitalWrite( LED, HIGH );
delay(Speed);//此数值必须大于100,否则仿真的时候会抖动 .
digitalWrite( MOTOR_PIN0, LOW );
digitalWrite( MOTOR_PIN1, HIGH );
digitalWrite( MOTOR_PIN2, LOW );
digitalWrite( MOTOR_PIN3, LOW );
digitalWrite( LED, LOW );
delay(Speed);//此数值必须大于100,否则仿真的时候会抖动 .
digitalWrite( MOTOR_PIN0, LOW );
digitalWrite( MOTOR_PIN1, LOW );
digitalWrite( MOTOR_PIN2, HIGH );
digitalWrite( MOTOR_PIN3, LOW );
digitalWrite( LED, HIGH );
delay(Speed);//此数值必须大于100,否则仿真的时候会抖动 .
digitalWrite( MOTOR_PIN0, LOW );
digitalWrite( MOTOR_PIN1, LOW );
digitalWrite( MOTOR_PIN2, LOW );
digitalWrite( MOTOR_PIN3, HIGH );
digitalWrite( LED, LOW );
delay(Speed);//此数值必须大于100,否则仿真的时候会抖动 .
}

void fanzhuan(){
digitalWrite( MOTOR_PIN0, LOW );
digitalWrite( MOTOR_PIN1, LOW );
digitalWrite( MOTOR_PIN2, LOW );
digitalWrite( MOTOR_PIN3, HIGH );
digitalWrite( LED, LOW );
delay(Speed);//此数值必须大于100,否则仿真的时候会抖动 .
digitalWrite( MOTOR_PIN0, LOW );
digitalWrite( MOTOR_PIN1, LOW );
digitalWrite( MOTOR_PIN2, HIGH );
digitalWrite( MOTOR_PIN3, LOW );
digitalWrite( LED, HIGH );
delay(Speed);//此数值必须大于100,否则仿真的时候会抖动 .
digitalWrite( MOTOR_PIN0, LOW );
digitalWrite( MOTOR_PIN1, HIGH );
digitalWrite( MOTOR_PIN2, LOW );
digitalWrite( MOTOR_PIN3, LOW );
digitalWrite( LED, LOW );
delay(Speed);//此数值必须大于100,否则仿真的时候会抖动 .
digitalWrite( MOTOR_PIN0, HIGH );
digitalWrite( MOTOR_PIN1, LOW );
digitalWrite( MOTOR_PIN2, LOW );
digitalWrite( MOTOR_PIN3, LOW );
digitalWrite( LED, HIGH );
delay(Speed);//此数值必须大于100,否则仿真的时候会抖动 .
}


程序代码和仿真资源

本实验基于Proteus8.9平台。

1
2
3
链接:https://pan.baidu.com/s/1n-twlLlLZ1mW4ej5PMlFgw 
提取码:nani

无人问津也好,技不如人也罢,都要试着安静下来,去做自己该做的事,而不是让焦虑,毁掉本就不多的热情和定力!