首页 > 其他分享 >Arduino 的几种点灯方式

Arduino 的几种点灯方式

时间:2023-09-03 14:57:20浏览次数:45  
标签:管脚 点灯 Arduino void blinkPin 线程 几种 oldState

延时函数点灯

// 定义灯管脚
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() {
}

多线程花样点灯

  1. 一个线程以秒点灯
  2. 另一个线程以毫秒闪灯

类似节奏,闪闪,闪闪闪,这样的节奏。

标签:管脚,点灯,Arduino,void,blinkPin,线程,几种,oldState
From: https://www.cnblogs.com/okbuok/p/arduino-de-ji-zhong-dian-deng-fang-shi.html

相关文章

  • Java中对象创建的几种方式
    Java中对象创建的几种方式本文记录Java创建对象的六种方式,详细内容请查看代码测试对象粘贴复制即可,配合TestPeople食用importjava.io.Serializable;/***@authorunknown*@since2023/09/0116:09*/publicclassPeopleimplementsCloneable,Serializable{......
  • MapReduce 中的两表 join 几种方案简介
    1.概述在传统数据库(如:MYSQL)中,JOIN操作是非常常见且非常耗时的。而在HADOOP中进行JOIN操作,同样常见且耗时,由于Hadoop的独特设计思想,当进行JOIN操作时,有一些特殊的技巧。本文首先介绍了Hadoop上通常的JOIN实现方法,然后给出了几种针对不同输入数据集的优化方法。2.常见的join方法介......
  • 【230901-7】有8位学生,其中小学生2名,初中生3名,高中生3名,现将他们排成一列,要求2名小学
    【230901-7】有8位学生,其中小学生2名,初中生3名,高中生3名,现将他们排成一列,要求2名小学生相邻,3名初中生相邻,3名高中生任意两名都不相邻,则不同排法有几种?......
  • 线程池在工作中的几种使用姿势
    线程池在开发中一定会用到,如果能像golang一样,java语言也有协程,也许java程序员就少了一种包袱。回归正题,我们聊下到底有哪些线程池的使用方式,总结有以下几种。JDK内置线程池Spring线程池自己魔改封装1、JDK内置线程池常用的有:我们看下最全的线程池参数,探究为什么阿里规......
  • getline的几种用法
    istream库下istream&getline(char*s,streamsizen);istream&getline(char*s,streamsizen,chardelim);从istream输入流中读取字符传入字符串s,个数为n string库下istream&getline(istream&is,string&str,chardelim);istream&getline(istre......
  • 远程连接阿里云服务器的几种方式(包括Windows和linux系统)
    远程连接阿里云服务器的几种方式(包括Windows和linux系统)_远程登录阿里云_库博客的博客-CSDN博客远程连接Windows系统阿里云服务器:1、workbench远程连接方式点击“立即登陆”,然后输入Administrator用户的密码,即可登录云服务器。2、VNC连接方式输入远程连接密码后,按照提示......
  • mysql索引失效的几种情况
    1.在索引字段上使用函数2.在索引字段上使用运算3.索引字段使用了类型转换,即原本是字符串类型,查询时用的数字类型4.范围条件右边的列索引失效,比如>,<,between等,in不属于范围条件5.!=或者<>索引失效6.isnu11可以使用索引,isnotnu11无法使用索引7.like以通配符号开头索引......
  • Arduino基础教程(一)
    1.ArduinoIDE安装https://www.arduino.cc/2.连接开发板在IDE->Tools选项指定自己的开发板和端口后,程序可验证上传。3.点亮一个小灯//定义引脚号constintledPin=13;voidsetup(){//将ledPin设置为输出模式pinMode(ledPin,OUTPUT);}voidloop(){......
  • 解释spring支持的几种bean作用域
    1,singleton:默认,每个容器中只有一个bean实例,单例的模式由beanfactory自身维护2,prototype:为每一个bean请求提供一个实例3,request:为每一个网络请求提供一个实例,请求完成之后,bean会被垃圾回收器回收4,session:与request类似,确保每一个session中有一个bean实例,session过期之后,bean随之......
  • [note] pytorch的几种维度操作方式比对
    pre今天看代码在想torch.unbind+torch.cat与torch.reshape的区别,直观上来看reshape似乎更便利。chatgpt问题xisatensorofthreedimension,whatisthedifferencebetweentorch.cat(torch.unbind(x,dim=1),dim=0)andtorch.reshape(x,(x.shape[0]*x.shape[1]......