跑马灯小转盘

目标及其准备

目标

实现步进电机的旋转及其跑马灯。

效果图.gif

准备工作

  1. Arduino uno 开发板 *1
  2. ULN2003电机驱动板*1
  3. 28BYJ-48步进电机*1
  4. 发光二极管52
  5. 220欧电阻*5

步进电机.png

底座的3D设计

底座.jpg

3D打印文件: 底座 转盘

Arduino程序设计

简单多线程的库:SCoop

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
#include <SCoop.h>//引入头文件

void setup() {
  // put your setup code here, to run once:
    for (int i = 2; i < 13; i++) {
    pinMode(i, OUTPUT);}
  mySCoop.start();//调用mySCoop多线程服务
}



  defineTaskLoop(Task1)
    {
/* 
 *  顺时针旋转
    for (int count = 0; count < num; count++)
    {
      for (int i = 2; i < 6; i++)
      {
        digitalWrite(i, HIGH);
        delay(3);
        digitalWrite(i, LOW);
      }
    }}
    delay(10);
*/

      for (int count = 0; count < 512; count++)
      {
        for (int i = 5; i > 1; i--)
        {
          digitalWrite(i, HIGH);
          delay(3);
          digitalWrite(i, LOW);
        }
      }
    }
    
   defineTaskLoop(Task2)
    {
      //所有LED闪烁
      for (int i = 8; i < 13; i++)
        {
          digitalWrite(i, HIGH);
        }
        delay(800);
      for (int i = 8; i < 13; i++)
        {
          digitalWrite(i, LOW);
        }        
        delay(200);
      for (int i = 8; i < 13; i++)
        {
          digitalWrite(i, HIGH);
        }
        delay(400);
      for (int i = 8; i < 13; i++)
        {
          digitalWrite(i, LOW);
        }        
        delay(200);
       //单独LED闪烁

          digitalWrite(12, HIGH);
          delay(200);
          digitalWrite(12, LOW);
        for (int i = 8; i < 12; i++)
        {
          digitalWrite(i, HIGH);
          delay(200);
          digitalWrite(i, LOW);
        }



       //所有LED闪烁
      for (int i = 8; i < 13; i++)
        {
          digitalWrite(i, HIGH);
        }
        delay(800);
      for (int i = 8; i < 13; i++)
        {
          digitalWrite(i, LOW);
        }        
        delay(200);
      for (int i = 8; i < 13; i++)
        {
          digitalWrite(i, HIGH);
        }
        delay(400);
      for (int i = 8; i < 13; i++)
        {
          digitalWrite(i, LOW);
        }        
        delay(200);

       //单独LED闪烁        
        for (int i = 12; i > 7; i--)
        {
          digitalWrite(i, HIGH);
          delay(200);
          digitalWrite(i, LOW);
        }

    }

void loop() {
  // put your main code here, to run repeatedly:

  yield();
  

}