雏雁-Arduino部分(一)PIN口设置

开发平台

  1. VScode
  2. PlatformIO
  3. Arduino Uno开发板
  4. Proteus仿真软件

Arduino基本代码结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//引入需要调用的库
#include <Arduino.h>

//设定引脚(便于后期更改)
#define PIN_** *

//setup函数在通电后执行一次
void setup(){
//pinMode函数用于设置引脚的模式
pinMode(PIN_**, OUTPUT/INPUT);
//digitalWrite函数用于设置引脚的电平
digitalWrite(PIN_**, HIGH/LOW);
}

//loop函数在setup函数执行完后一直循环执行
void loop(){

}

将开/关空调事项绑定到引脚

1
2
3
4
5
6
7
8
9
10
11
12
#include <Arduino.h>

#define PIN_ACON 11
#define PIN_ACOFF 12

void setup() {
// put your setup code here, to run once:
digitalWrite(11, HIGH);
pinMode(11, INPUT_PULLUP);
digitalWrite(12, HIGH);
pinMode(12, INPUT_PULLUP);
}

本项目中,我们将开/关空调事项绑定到引脚11和12上,分别对应开/关空调的按钮。这里我们使用了Arduino的内置上拉电阻,将引脚设置为输入模式,当按钮按下时,引脚电平由高变低,当按钮松开时,引脚电平由低变高。这样我们就可以通过读取引脚电平来判断按钮是否被按下。

上拉电阻可以使引脚默认保持高电平模式,所以我们设定事件为低电平触发,通过按钮连接至GND


发送串口消息

首先在setup()函数里面设置串口通信的波特率(下面的9600),然后在loop函数里面通过Serial.println()函数发送串口消息。
这个波特率就是你以后想监视串口的时候填的波特率,如果监视的时候填的波特率和发送的不一样,那么就看不到发的消息。

1
2
3
void setup() {
// serial begin
Serial.begin(9600);

调用函数Serial.println()可以向串口发送消息,这里我们将开/关空调的消息以编码5678 1234发送到串口上。

1
2
3
4
5
6
7
8
9
10
11
void loop() {
//"AC ON" : "5678" : 0,
//"AC OFF" : "1234" : 1,
int key2operation[2] = {5678, 1234};
if (digitalRead(PIN_ACON) == LOW) {
Serial.println(key2operation[0]);
}
if (digitalRead(PIN_ACOFF) == LOW) {
Serial.println(key2operation[1]);
}
}

串口单次发送

为防止串口发送过多消息,我们使用lastdata变量记录上一次发送的消息,当允许发送串口消息时,才发送本次消息。
lastdata为全局变量,设定为0,表示允许发送。发送后赋值1,表示不允许发送。当引脚电平恢复高时,lastdata赋值恢复0
,表示允许发送。
同时我们使用延时避免1s内重复发送信息(因为需要非阻塞延时所以后面几篇一起说)

这个有没有用我不好说,但是我又不敢删。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
int lastdata = 0;

void loop() {
////PIN 11 LOW,AC ON
if (digitalRead(PIN_ACON) == LOW) {
// AC ON
if (lastdata == 0) {
Serial.println(key2operation[0]);
lastdata = 1;
}
}

////PIN 12 LOW,AC OFF
if (digitalRead(PIN_ACOFF) == LOW) {
// AC OFF
if (lastdata == 0) {
Serial.println(key2operation[1]);
lastdata = 1;
}
}
if (digitalRead(12) == HIGH && digitalRead(11) == HIGH) {
lastdata = 0;
}
}