我是靠谱客的博主 香蕉小鸭子,这篇文章主要介绍【Arduino】交通灯控制设计 四位数码管,4位数字倒计时,带蜂鸣器播放音乐,串口输入改变数码管数字前言一、实验器材二、连线示意图总结,现在分享给大家,希望可以做个参考。

【Arduino】交通灯控制设计 四位数码管,4位数字倒计时,带蜂鸣器播放音乐,串口输入改变数码管数字

  • 前言
  • 一、实验器材
  • 二、连线示意图
    • 三、代码如下
    • 2.实物连接图如下:
  • 总结

【Arduino】交通灯控制设计 四位数码管,4位数字倒计时,带蜂鸣器播放音乐,串口输入改变数码管数字
)


前言

一、实验器材

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
UNO控制板:1块 共阳极四位数码管:1个 面包板:1块 面包板跳线:若干 220Ω电阻:4个 1K电阻:3个 红色led灯-1 绿色led灯-1 黄色led灯-1

二、连线示意图

请添加图片描述注意:A5、A4、A3为红黄绿灯引脚端口,A0为蜂鸣器端口

三、代码如下

复制代码
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
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
#define redLed A5//红灯引脚定义 #define yellowLed A4//黄灯引脚定义 #define greenLed A3//绿灯灯引脚定义 int speakerPin = A0; //蜂鸣器引脚定义 int numred=1;//红灯定时时间 int numgreen=2;//绿灯定时时间 int numyellow=3;//黄灯定时时间 char signal; //设置阴极接口 int a = 2; //从2号位开始连接的 int b = 3; int c = 4; int d = 5; int e = 6; int f = 7; int g = 8; int p = 9; //设置阳极接口 int d4 = 13; int d3 = 12; int d2 = 11; int d1 = 10; //设置变量 long n = 0; int x = 100; int length = 15; // the number of notes char notes[] = "ccggaagffeeddc "; // a space represents a rest int beats[] = { 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 4 }; int tempo = 300; void playTone(int tone, int duration) { //蜂鸣器音色 for (long i = 0; i < duration * 1000L; i += tone * 2) { digitalWrite(speakerPin, HIGH); delayMicroseconds(tone); digitalWrite(speakerPin, LOW); delayMicroseconds(tone); } } void playNote(char note, int duration) { char names[] = { 'c', 'd', 'e', 'f', 'g', 'a', 'b', 'C' }; int tones[] = { 1915, 1700, 1519, 1432, 1275, 1136, 1014, 956 }; // play the tone corresponding to the note name for (int i = 0; i < 8; i++) { if (names[i] == note) { playTone(tones[i], duration); } } } void redchange(){ if(signal=='A'){//修改红灯定时时间0~99s if(Serial.available()>0){ numred=Serial.read()-48; if(Serial.available()>0){ int zifu=Serial.read()-48; numred=numred*10+zifu; Serial.print("-->"); Serial.println(numred); } } } } void greenchange(){ if(signal=='B'){//修改绿灯定时时间0~99s if(Serial.available()>0){ numgreen=Serial.read()-48; Serial.println(numgreen); if(Serial.available()>0){ int zifu=Serial.read()-48; numgreen=numgreen*10+zifu; Serial.print("-->"); Serial.println(numgreen); } } } } void yellowchange(){ if(signal=='C'){//修改黄灯定时时间0~99s if(Serial.available()>0){ numyellow=Serial.read()-48; Serial.println(numyellow); if(Serial.available()>0){ int zifu=Serial.read()-48; numyellow=numyellow*10+zifu; Serial.print("-->"); Serial.println(numyellow); } } } } void fengmingqiplay(){ for (int i = 0; i < length; i++) { if (notes[i] == ' ') { delay(beats[i] * tempo); // rest } else { playNote(notes[i], beats[i] * tempo); } // pause between notes delay(tempo / 2); } } void ledchange(){ if(Serial.available()>0){ signal=Serial.read(); Serial.print(signal); redchange(); greenchange(); yellowchange(); } } void setup() { Serial.begin(9600); //设置串口波特率 while (!Serial){} pinMode(d1, OUTPUT); //把对应的LED都设置成输出 pinMode(d2, OUTPUT); pinMode(d3, OUTPUT); pinMode(d4, OUTPUT); pinMode(a, OUTPUT); pinMode(b, OUTPUT); pinMode(c, OUTPUT); pinMode(d, OUTPUT); pinMode(e, OUTPUT); pinMode(f, OUTPUT); pinMode(g, OUTPUT); pinMode(p, OUTPUT); pinMode(redLed, OUTPUT); pinMode(greenLed, OUTPUT); pinMode(yellowLed, OUTPUT); Serial.println("请您选择你要修改的灯的颜色"); Serial.println("【A是绿灯】"); Serial.println("【B是红灯】"); Serial.println("【C是黄灯】"); pinMode(speakerPin, OUTPUT); } String inString=""; void loop(){ attachInterrupt(digitalPinToInterrupt(0), ledchange, FALLING ); ledchange(); interrupts(); digitalWrite(redLed,HIGH); for(int i=numred;i>=0;i--){ for(int k=250;k>0;k--){ Display(4,i%10);//调整个位的数字变化 Display(3,i/10%10);//调整十位的数字变化 Display(2,i%1000/100);//调整百位的数字变化 Display(1,i/1000); //调整千位的数字变化 } } digitalWrite(redLed,LOW); digitalWrite(yellowLed,HIGH); for(int i=numyellow;i>=0;i--){ for(int k=250;k>0;k--){ Display(4,i%10);//调整个位的数字变化 Display(3,i/10%10);//调整十位的数字变化 Display(2,i%1000/100);//调整百位的数字变化 Display(1,i/1000); //调整千位的数字变化 } } digitalWrite(yellowLed,LOW); //fengmingqiplay(); digitalWrite(greenLed,HIGH); for(int i=numgreen;i>=0;i--){ for(int k=250;k>0;k--){ Display(4,i%10);//调整个位的数字变化 Display(3,i/10%10);//调整十位的数字变化 Display(2,i%1000/100);//调整百位的数字变化 Display(1,i/1000); //调整千位的数字变化 } } digitalWrite(greenLed,LOW); } /// void shumaguan(unsigned char n)// { switch(n) { case 1: digitalWrite(d1,HIGH); digitalWrite(d2, LOW); digitalWrite(d3, LOW); digitalWrite(d4, LOW); break; case 2: digitalWrite(d1, LOW); digitalWrite(d2, HIGH); digitalWrite(d3, LOW); digitalWrite(d4, LOW); break; case 3: digitalWrite(d1,LOW); digitalWrite(d2, LOW); digitalWrite(d3, HIGH); digitalWrite(d4, LOW); break; case 4: digitalWrite(d1, LOW); digitalWrite(d2, LOW); digitalWrite(d3, LOW); digitalWrite(d4, HIGH); break; default : digitalWrite(d1, LOW); digitalWrite(d2, LOW); digitalWrite(d3, LOW); digitalWrite(d4, LOW); break; } } void Num_0() { digitalWrite(a, LOW); digitalWrite(b, LOW); digitalWrite(c, LOW); digitalWrite(d, LOW); digitalWrite(e, LOW); digitalWrite(f, LOW); digitalWrite(g, HIGH); digitalWrite(p,HIGH); } void Num_1() { digitalWrite(a, HIGH); digitalWrite(b, LOW); digitalWrite(c, LOW); digitalWrite(d, HIGH); digitalWrite(e, HIGH); digitalWrite(f, HIGH); digitalWrite(g, HIGH); digitalWrite(p,HIGH); } void Num_2() { digitalWrite(a, LOW); digitalWrite(b, LOW); digitalWrite(c, HIGH); digitalWrite(d, LOW); digitalWrite(e, LOW); digitalWrite(f, HIGH); digitalWrite(g, LOW); digitalWrite(p,HIGH); } void Num_3() { digitalWrite(a, LOW); digitalWrite(b, LOW); digitalWrite(c, LOW); digitalWrite(d, LOW); digitalWrite(e, HIGH); digitalWrite(f, HIGH); digitalWrite(g, LOW); digitalWrite(p,HIGH); } void Num_4() { digitalWrite(a, HIGH); digitalWrite(b, LOW); digitalWrite(c, LOW); digitalWrite(d, HIGH); digitalWrite(e, HIGH); digitalWrite(f, LOW); digitalWrite(g, LOW); digitalWrite(p,HIGH); } void Num_5() { digitalWrite(a, LOW); digitalWrite(b, HIGH); digitalWrite(c, LOW); digitalWrite(d, LOW); digitalWrite(e, HIGH); digitalWrite(f, LOW); digitalWrite(g, LOW); digitalWrite(p,HIGH); } void Num_6() { digitalWrite(a, LOW); digitalWrite(b, HIGH); digitalWrite(c, LOW); digitalWrite(d, LOW); digitalWrite(e, LOW); digitalWrite(f, LOW); digitalWrite(g, LOW); digitalWrite(p,HIGH); } void Num_7() { digitalWrite(a, LOW); digitalWrite(b, LOW); digitalWrite(c, LOW); digitalWrite(d, HIGH); digitalWrite(e, HIGH); digitalWrite(f, HIGH); digitalWrite(g, HIGH); digitalWrite(p,HIGH); } void Num_8() { digitalWrite(a, LOW); digitalWrite(b, LOW); digitalWrite(c, LOW); digitalWrite(d, LOW); digitalWrite(e, LOW); digitalWrite(f, LOW); digitalWrite(g, LOW); digitalWrite(p,HIGH); } void Num_9() { digitalWrite(a, LOW); digitalWrite(b, LOW); digitalWrite(c, LOW); digitalWrite(d, LOW); digitalWrite(e, HIGH); digitalWrite(f, LOW); digitalWrite(g, LOW); digitalWrite(p,HIGH); } void Clear() //清屏 { digitalWrite(a, HIGH); digitalWrite(b, HIGH); digitalWrite(c, HIGH); digitalWrite(d, HIGH); digitalWrite(e, HIGH); digitalWrite(f, HIGH); digitalWrite(g, HIGH); digitalWrite(p,HIGH); } void pickNumber(unsigned char n) { switch(n) { case 0:Num_0(); break; case 1:Num_1(); break; case 2:Num_2(); break; case 3:Num_3(); break; case 4:Num_4(); break; case 5:Num_5(); break; case 6:Num_6(); break; case 7:Num_7(); break; case 8:Num_8(); break; case 9:Num_9(); break; default:Clear(); break; } } void Display(unsigned char x, unsigned char Number) { shumaguan(x); pickNumber(Number); delay(1); Clear() ; }

2.实物连接图如下:

请添加图片描述请添加图片描述请添加图片描述

请添加图片描述


总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了四位数码管的使用,一位数码管的控制,通过程序来使数码管点亮或熄灭,但是遇到多位数字,我们又该怎么显示就有所不同,所以,四位数码管的控制,四位数码管并不是简单的1+1+1+1的样子。

参考链接
1、https://blog.csdn.net/weixin_43319452/article/details/109361825
2、https://www.arduino.cn/forum.php?mod=viewthread&tid=106891&highlight=%E6%95%B0%E7%A0%81%E7%AE%A1
3、https://blog.csdn.net/weixin_33916256/article/details/91891142?utm_medium=distribute.pc_relevant.none-task-blog-2defaultbaidujs_baidulandingword~default-5.pc_relevant_default&spm=1001.2101.3001.4242.4&utm_relevant_index=6

最后

以上就是香蕉小鸭子最近收集整理的关于【Arduino】交通灯控制设计 四位数码管,4位数字倒计时,带蜂鸣器播放音乐,串口输入改变数码管数字前言一、实验器材二、连线示意图总结的全部内容,更多相关【Arduino】交通灯控制设计内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(68)

评论列表共有 0 条评论

立即
投稿
返回
顶部