延时函数点灯
// 定义灯管脚
const uint8_t blinkPin = LED_BUILTIN;
// 依靠延时函数来闪烁
void funcBlink(int second) {
unsigned long millisSecond = second * 1000;
// 亮灯
digitalWrite(blinkPin, HIGH);
delay(millisSecond);
// 延时熄灯
digitalWrite(blinkPin, LOW);
delay(millisSecond);
}
void setup() {
// 设置管脚输出模式
pinMode(blinkPin, OUTPUT);
}
void loop() {
// 延时 1 闪烁
funcBlink(1);
}
定时器点灯
#include <Ticker.h>
// 定义灯管脚
const uint8_t blinkPin = LED_BUILTIN;
// 使用定时器闪烁
Ticker timer1;
void timerBlink() {
// 读取管脚状态
int oldState = digitalRead(blinkPin);
// 翻转管脚状态
uint8_t newState = 1 == oldState ? LOW : HIGH;
digitalWrite(blinkPin, newState);
}
void setup() {
// 设置管脚为输出模式
pinMode(blinkPin, OUTPUT);
// 给定时器 timer1 添加定时器触发回调函数,回调函数参数 1 秒
timer1.attach(1, timerBlink);
}
void loop() {
}
线程点灯
// 下载地址 https://github.com/SanUSB-grupo/RITOS
#include <ritos.h>
// 定义灯管脚
const uint8_t blinkPin = LED_BUILTIN;
// 实例化线程类
Ritos task1;
// 定义上个时间
unsigned long previousTime = 0;
void threadBlink() {
unsigned long currentTime = millis();
if (currentTime - previousTime < 1000) {
// 未到 1 秒
return;
}
previousTime = currentTime;
// 读取管脚状态
int oldState = digitalRead(blinkPin);
Serial.printf("线程 task1 获取管脚状态 %d\n", oldState);
// 翻转管脚状态
digitalWrite(blinkPin, !oldState);
}
void setup() {
Serial.begin(115200);
// 设置管脚为输出模式
pinMode(blinkPin, OUTPUT);
// 给线程添加执行任务
task1.task(threadBlink);
}
void loop() {
}
多线程花样点灯
- 一个线程以秒点灯
- 另一个线程以毫秒闪灯
类似节奏,闪闪,闪闪闪,这样的节奏。
标签:管脚,点灯,Arduino,void,blinkPin,线程,几种,oldState
From: https://www.cnblogs.com/okbuok/p/arduino-de-ji-zhong-dian-deng-fang-shi.html