feat: sync arduino and python board configurations

This commit is contained in:
yczpf2019
2026-01-24 16:13:38 +08:00
parent 01b756fed8
commit c6dc5537f0
851 changed files with 47772 additions and 0 deletions

View File

@@ -0,0 +1,5 @@
## 控制
控制类别中包括了时间延迟、条件执行、循环执行、获取运行时间、初始化、Switch执行等 控制模块中主要执行的内容是对程序结构进行的相应控制。
<img src="{default}/images/control/control.png" alt="控制分类" style="zoom:50%;" />

View File

@@ -0,0 +1,61 @@
## 初始化
<img src="{default}/images/control/setup.png" alt="初始化" style="zoom:67%;" />
```arduino
void setup(){
pinMode(3, OUTPUT);
digitalWrite(3, HIGH);
}
void loop(){
}
```
### 描述
> 在Arduino中程序运行时将首先调用 setup()函数。 用于初始化变量、设置针脚的输出输入类型、配置串口、引入类库文件等等。
### 范例1
初始化时声明变量。
<img src="{default}/images/control/setup-example1.png" alt="初始化示例1" style="zoom:67%;" />
```arduino
volatile int item;
void setup(){
item = 0;
}
void loop(){
}
```
### 范例2
在初始化时定义中断函数。
<img src="{default}/images/control/setup-example2.png" alt="初始化示例2" style="zoom:67%;" />
```arduino
void attachInterrupt_fun_RISING_2() {
digitalWrite(13, LOW);
}
void setup(){
pinMode(13, OUTPUT);
pinMode(2, INPUT_PULLUP);
digitalWrite(13, HIGH);
attachInterrupt(digitalPinToInterrupt(2), attachInterrupt_fun_RISING_2,RISING);
}
void loop(){
}
```
<div class="layui-card" style="box-shadow: 1px 1px 4px 1px rgb(0 0 0 / 20%);">
<div class="layui-card-header icon-attention-circled" style="background: #f0b37e;color:#fff;font-size:16px;">注意</div>
<div class="layui-card-body" style="background: #ffedcc;">每次 Arduino 上电或重启后setup 函数只运行一次。</div>
</div>

View File

@@ -0,0 +1,36 @@
## while 循环
<img src="{default}/images/control/while.png" alt="while" style="zoom:67%;" />
```arduino
while (true) {
}
```
### 描述
> while循环会无限的循环直到括号内的判断语句变为假。 必须要有能改变判断语句的东西要不然while循环将永远不会结束。你可以使用一个传感器的值或者一个变量来控制什么时候停止该循环。
### 参数
- 满足条件:为真或为假的一个条件。
### 范例
当温度高于30度时亮灯否则灭灯。
<img src="{default}/images/control/while-example.png" alt="while示例" style="zoom:67%;" />
```arduino
void setup(){
pinMode(13, OUTPUT);
}
void loop(){
while (analogRead(A0)*0.488 > 30) {
digitalWrite(13, HIGH);
}
digitalWrite(13, LOW);
}
```

View File

@@ -0,0 +1,43 @@
## 延时
<img src="{default}/images/control/delay.png" alt="延时" style="zoom:67%;" />
```arduino
delay(1000);
```
### 描述
> 使程序暂定设定的时间单位毫秒一秒等于1000毫秒
### 参数
- 毫秒:暂停的毫秒数。
### 范例
13号引脚灯亮1秒灭1秒往复循环。
<img src="{default}/images/control/delay-example.png" alt="延时示例" style="zoom:67%;" />
```arduino
void setup(){
pinMode(13, OUTPUT);
}
void loop(){
digitalWrite(13, HIGH);
delay(1000);
digitalWrite(13, LOW);
delay(1000);
}
```
<div class="layui-card" style="box-shadow: 1px 1px 4px 1px rgb(0 0 0 / 20%);">
<div class="layui-card-header icon-attention-circled" style="background: #f0b37e;color:#fff;font-size:16px;">注意</div>
<div class="layui-card-body" style="background: #ffedcc;">虽然创建一个使用delay()的闪烁LED很简单并且许多例子将很短的delay用于消除开关抖动。
<br /><br />
但delay()确实拥有很多显著的缺点。在delay函数使用的过程中读取传感器值、计算、引脚操作均无法执行因此它所带来的后果就是使其他大多数活动暂停。大多数熟练的程序员通常避免超过10毫秒的delay(),除非arduino程序非常简单。
<br /><br />
利用定时器就可以解决这个问题可以避免由于delay()带来的CPU暂停也能很好地实现每隔一定时间执行动作。</div>
</div>

View File

@@ -0,0 +1,86 @@
## if 选择
<img src="{default}/images/control/if.png" alt="if" style="zoom:67%;" />
```arduino
if (false) {
}
```
### 描述
> if 语句与比较运算符一起用于检测某个条件是否达成,如某个传感器的值是否等于某个值。
### 参数
- 条件:比较表达式
### 用法
增加条件:如果需要增加条件,可以点开齿轮,然后将左侧的“否则如果”或者“否则”模块拖到右侧的“如果”之中。
<img src="{default}/images/control/if-else.png" alt="if-else" style="zoom:67%;" />
### 范例1
当连接在2号引脚的按键按下时点亮13号引脚的灯。
<img src="{default}/images/control/if-else-example1.png" alt="if-else示例1" style="zoom:67%;" />
```arduino
void setup(){
pinMode(2, INPUT);
pinMode(13, OUTPUT);
}
void loop(){
if (digitalRead(2) == 1) {
digitalWrite(13, HIGH);
}
}
```
如果判断的条件大于等于1时可以省略等于判断因为只要 该表达式的结果不为0则为真。
所以,上面的写法与下面的写法等效。
<img src="{default}/images/control/if-else-example2.png" alt="if-ese示例2" style="zoom:67%;" />
```arduino
void setup(){
pinMode(2, INPUT);
pinMode(13, OUTPUT);
}
void loop(){
if (digitalRead(2)) {
digitalWrite(13, HIGH);
}
}
```
### 范例2
当连接在2号引脚的按键按下时点亮13号引脚的灯;当按键松开时,灯灭。
<img src="{default}/images/control/if-else-example3.png" alt="if-else示例3" style="zoom:67%;" />
```arduino
void setup(){
pinMode(2, INPUT);
pinMode(13, OUTPUT);
}
void loop(){
if (digitalRead(2)) {
digitalWrite(13, HIGH);
} else {
digitalWrite(13, LOW);
}
}
```
<div class="layui-card" style="box-shadow: 1px 1px 4px 1px rgb(0 0 0 / 20%);">
<div class="layui-card-header icon-attention-circled" style="background: #f0b37e;color:#fff;font-size:16px;">注意</div>
<div class="layui-card-body" style="background: #ffedcc;">另外一种进行多种条件分支判断的语句是switch case语句。</div>
</div>

View File

@@ -0,0 +1,55 @@
## switch 选择
<img src="{default}/images/control/switch.png" alt="switch" style="zoom:67%;" />
```arduino
switch (NULL) {
}
```
### 描述
> 和if语句相同switch…case通过设定的在不同条件下执行的代码控制程序的流程。
>
> 特别地switch语句将变量值和case语句中设定的值进行比较。当一个case语句中的设定值与变量值相同时这条case语句将被执行。
>
> 关键字break可用于退出switch语句通常每条case语句都以break结尾。如果没有break语句switch语句将会一直执行接下来的语句一直向下直到遇见一个break或者直到switch语句结尾。
### 参数
- var: 用于与下面的case中的标签进行比较的变量值
- label: 与变量进行比较的值
### 用法
增加case如果需要增加条件可以点开齿轮然后将左侧的“case”或者“default”模块拖到右侧的“switch”之中。
<img src="{default}/images/control/switch-case.png" alt="switch-case" style="zoom:67%;" />
### 范例
当连接在2号引脚的按键按下时点亮13号引脚的灯否则13号引脚的灯灭。
<img src="{default}/images/control/switch-case-example.png" alt="switch-case示例" style="zoom:67%;" />
```arduino
void setup(){
pinMode(2, INPUT);
pinMode(13, OUTPUT);
}
void loop(){
switch (digitalRead(2)) {
case true:
digitalWrite(13, HIGH);
break;
default:
digitalWrite(13, HIGH);
}
}
```
<div class="layui-card" style="box-shadow: 1px 1px 4px 1px rgb(0 0 0 / 20%);">
<div class="layui-card-header icon-attention-circled" style="background: #f0b37e;color:#fff;font-size:16px;">注意</div>
<div class="layui-card-body" style="background: #ffedcc;">每个switch可以有多个case但是最多不超过一个default当不满足任何一个case时执行default中的程序。</div>
</div>

View File

@@ -0,0 +1,54 @@
## for 循环
<img src="{default}/images/control/for.png" alt="for" style="zoom:67%;" />
```arduino
for (int i = 1; i <= 10; i = i + (1)) {
}
```
### 描述
> for循环用于重复执行一段的程序。通常使用一个增量计数器计数并终止循环。
>
> for循环用于重复性的操作非常有效通常与数组结合起来使用来操作数据、引脚。
### 参数
- 变量名用于记录for循环次数的变量名。
- 起始值循环的计数起始值一般从0开头也可以从其他数值开始。
- 终点值:循环的计数终点值。
- 步长每次循环的步长一般为1也可以是其他整数。
### 用法
可自行设置循环的变量名称,并确定循环的开始和终止以及循环方向,最后一个数字可以为负数。
<img src="{default}/images/control/for-example1.png" alt="for示例1" style="zoom:67%;" />
### 范例
将连接在3号引脚的灯制作成呼吸灯每一次亮度变化之间间隔50毫秒。
<img src="{default}/images/control/for-example2.png" alt="for示例2" style="zoom:67%;" />
```arduino
void setup(){
}
void loop(){
for (int i = 0; i <= 255; i = i + (1)) {
analogWrite(3, i);
delay(50);
}
for (int i = 255; i >= 0; i = i + (-1)) {
analogWrite(3, i);
delay(50);
}
}
```
<div class="layui-card" style="box-shadow: 1px 1px 4px 1px rgb(0 0 0 / 20%);">
<div class="layui-card-header icon-attention-circled" style="background: #f0b37e;color:#fff;font-size:16px;">注意</div>
<div class="layui-card-body" style="background: #ffedcc;">for循环中定义的变量有名字可以用字母i,j,k或单词red,state等有意义的词语表示。</div>
</div>

View File

@@ -0,0 +1,46 @@
## 跳出循环
<img src="{default}/images/control/break.png" alt="break" style="zoom:67%;" />
```arduino
break;
```
### 描述
> 跳出循环用于终止一段重复的程序,一般使用时作为条件语句的执行部分,当循环中的变量满足某个条件时,执行跳出循环语句。
>
> 跳出循环在处理循环中的特殊情况时十分有用。
### 参数
- 操作:可以选择跳出循环和跳到下一个循环两种操作,结果不同。
### 范例
引脚3上的数字从0到255逐一增加每一次增加之间间隔50毫秒当数字增加到150时停止增加。
<img src="{default}/images/control/break-example.png" alt="break示例" style="zoom:67%;" />
```arduino
void setup(){
pinMode(A0, INPUT);
pinMode(3, OUTPUT);
}
void loop(){
for (int i = 0; i <= 255; i = i + (1)) {
if (analogRead(A0) == 130) {
break;
} else {
analogWrite(3, i);
delay(50);
}
}
}
```
<div class="layui-card" style="box-shadow: 1px 1px 4px 1px rgb(0 0 0 / 20%);">
<div class="layui-card-header icon-attention-circled" style="background: #f0b37e;color:#fff;font-size:16px;">注意</div>
<div class="layui-card-body" style="background: #ffedcc;">注意跳到下一个循环的使用,可以方便的将循环中不需要的步骤跳过。</div>
</div>

View File

@@ -0,0 +1,36 @@
## 系统运行时间
<img src="{default}/images/control/get-time.png" alt="系统运行时间" style="zoom: 50%;" />
```arduino
millis(); // 系统运行时间(毫秒)
micros(); // 系统运行时间(微秒)
```
### 描述
> 返回自硬件启动或重启以来的时间值。
### 返回
自硬件启动或重启以来的时间,毫秒数或者微秒数。
### 范例
自动换行打印系统运行时间。
<img src="{default}/images/control/get-time-example.png" alt="系统运行时间示例" style="zoom:67%;" />
```arduino
void setup(){
pinMode(2, INPUT);
Serial.begin(9600);
}
void loop(){
if (digitalRead(2)) {
Serial.println(millis());
}
}
```

View File

@@ -0,0 +1,65 @@
## MsTimer2 定时器
<img src="{default}/images/control/ms-timer2.png" alt="MsTimer2" style="zoom:67%;" />
```arduino
MsTimer2::set(500, msTimer2_func);
```
### 1.1 描述
> 每隔设置的毫秒数执行相应的程序
### 1.2 范例
利用定时器控制13号引脚LED每隔1秒亮灭一次。
<img src="{default}/images/control/ms-timer2-example.png" alt="MsTimer2示例" style="zoom:67%;" />
```arduino
#include <MsTimer2.h>
volatile boolean state;
void msTimer2_func() {
state = !state;
digitalWrite(13, state);
}
void setup(){
state = false;
pinMode(13, OUTPUT);
MsTimer2::set(1000, msTimer2_func);
MsTimer2::start();
}
void loop(){
}
```
<div class="layui-card" style="box-shadow: 1px 1px 4px 1px rgb(0 0 0 / 20%);">
<div class="layui-card-header icon-attention-circled" style="background: #f0b37e;color:#fff;font-size:16px;">注意</div>
<div class="layui-card-body" style="background: #ffedcc;">利用定时器可以提高硬件的工作效率。
<br/><br/>
但在一个程序中只能使用一个MsTimer2定时器如果要实现多个时间的定时可以配合变量计数来完成。</div>
</div>
## MsTimer2 定时器启动
<img src="{default}/images/control/ms-timer2-start.png" alt="MsTimer2启动" style="zoom:67%;" />
```arduino
MsTimer2::start();
```
### 2.1 描述
> MsTimer2定时器开始计时
## MsTimer2 定时器停止
<img src="{default}/images/control/ms-timer2-stop.png" alt="MsTimer2停止" style="zoom:67%;" />
### 3.1 描述
> MsTimer2定时器停止计时

View File

@@ -0,0 +1,56 @@
## 简单定时器
<img src="{default}/images/control/simple-timer.png" alt="简单定时器" style="zoom:67%;" />
```arduino
#include <SimpleTimer.h>
SimpleTimer timer;
void Simple_timer_1() {
}
void setup(){
timer.setInterval(1000L, Simple_timer_1);
}
void loop(){
timer.run();
}
```
### 描述
> 设置不同的简单定时器,每隔指定秒数执行相应的程序常用于多任务处理。
### 范例
1213分别连接LED灯每隔200ms12引脚LED灯切换亮灭 每隔300msD13引脚LED灯切换亮灭。
<img src="{default}/images/control/simple-timer-example.png" alt="简单定时器示例" style="zoom:67%;" />
```arduino
#include <SimpleTimer.h>
SimpleTimer timer;
void Simple_timer_1() {
digitalWrite(12,digitalRead(12));
}
void Simple_timer_2() {
digitalWrite(13,digitalRead(13));
}
void setup(){
pinMode(12, OUTPUT);
timer.setInterval(200L, Simple_timer_1);
pinMode(13, OUTPUT);
timer.setInterval(300L, Simple_timer_2);
}
void loop(){
timer.run();
}
```

View File

@@ -0,0 +1,68 @@
## 允许中断
<img src="{default}/images/control/interrupts.png" alt="允许中断" style="zoom:67%;" />
```arduino
interrupts();
```
### 1.1 描述
> 允许输入/输出模块中管脚中断的运行
### 1.2 范例
使用按钮模拟开关每次按下LED灯切换亮灭。
<img src="{default}/images/control/interrupts-example.png" alt="允许中断示例" style="zoom:67%;" />
```arduino
void attachInterrupt_fun_RISING_2() {
digitalWrite(10,digitalRead(10));
}
void setup(){
pinMode(2, INPUT_PULLUP);
pinMode(10, OUTPUT);
interrupts();
attachInterrupt(digitalPinToInterrupt(2), attachInterrupt_fun_RISING_2,RISING);
}
void loop(){
}
```
## 禁止中断
<img src="{default}/images/control/no-interrupts.png" alt="禁止中断" style="zoom:67%;" />
```arduino
noInterrupts();
```
### 2.1 描述
> 禁止输入/输出模块中管脚中断的运行
### 2.2 范例
在允许中断范例的基础上,尝试禁止中断。
<img src="{default}/images/control/no-interrupts-example.png" alt="禁止中断示例" style="zoom:67%;" />
```arduino
void attachInterrupt_fun_RISING_2() {
digitalWrite(10,digitalRead(10));
}
void setup(){
pinMode(2, INPUT_PULLUP);
pinMode(10, OUTPUT);
noInterrupts();
attachInterrupt(digitalPinToInterrupt(2), attachInterrupt_fun_RISING_2,RISING);
}
void loop(){
}
```

View File

@@ -0,0 +1,69 @@
## SCoop Task
<img src="{default}/images/control/scoop-task.png" alt="SCoop Task" style="zoom:67%;" />
```arduino
#include "SCoop.h"
defineTask(scoopTask1)
void scoopTask1::setup(){
}
void scoopTask1::loop(){
}
void setup(){
mySCoop.start();
}
void loop(){
yield();
sleep(1000);
}
```
### 描述
> SCoop模块用于执行多线程任务最多支持8个任务。
### 范例
利用SCoop控制13号引脚LED灯以2秒的频率闪烁同时控制12号引脚的LED灯以200毫秒的频率闪烁。
<img src="{default}/images/control/scoop-task-example.png" alt="SCoop Task示例" style="zoom:67%;" />
```arduino
#include "SCoop.h"
defineTask(scoopTask1)
void scoopTask1::setup(){
pinMode(13, OUTPUT);
}
void scoopTask1::loop(){
digitalWrite(13, HIGH);
sleep(1000);
digitalWrite(13, LOW);
sleep(1000);
}
defineTask(scoopTask2)
void scoopTask2::setup(){
pinMode(12, OUTPUT);
}
void scoopTask2::loop(){
digitalWrite(12, HIGH);
sleep(100);
digitalWrite(12, LOW);
sleep(100);
}
void setup(){
pinMode(13, OUTPUT);
mySCoop.start();
pinMode(12, OUTPUT);
}
void loop(){
yield();
}
```