第一课:超级hello Arduino.使用多种知识串联一个入门小项目,很适合初学第一课哟.
Posted rubik795
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第一课:超级hello Arduino.使用多种知识串联一个入门小项目,很适合初学第一课哟.相关的知识,希望对你有一定的参考价值。
开关+led+旋钮电位器的实验视频
已经购买Arduino开发版的同学,开始上课~来一场紧张刺激的hello Arduino之旅吧~
前言
开发工具的下载,安装,使用都很简单,我这里就不赘述了,附上官方的说明,跟着步骤来,十分钟搞定~
相关连接
- ide下载:https://www.arduino.cn/thread-5838-1-1.html
- 官方hello world:https://www.arduino.cn/thread-76154-1-1.html
- 为什么成为Arduino开发?https://www.arduino.cn/thread-5414-1-1.html
- 函数参考文档:https://wiki.arduino.cn/?file=home-%E9%A6%96%E9%A1%B5
实验内容
-
通过开关,来控制整体的通电功能
-
通过旋钮电位器实现灯的亮度
-
开关灯的时候,使用呼吸的方式
-
开关灯的时候,根据旋钮电位器当前的位置来决定最高亮度
-
异步做开关监听
-
开灯关灯无异常
- 目前还有小问题,关灯的时候无法完全关闭,会有低电荷在led灯里面,有细微亮点.
实验说明
开关
本实验中,对开关没有使用电阻,而是采用的高拉电阻的方式.通过这种方式,并且采用死循环卡点方式,实现类似于监听开关按钮的能力.
普通电阻功能: 当开关不按下去的时候,开关处于低电荷情况,按下去时,处于高电荷.
不带电阻功能: 开关不管是否按下去,都处于不稳定电荷状态.
高拉电阻功能: 开关不按下去,开关稳定处于高电荷位,按下去后,使之变为高电荷位.
led灯
末尾白色led灯为rgb三色灯,放在4号引脚,4号引脚没有pwm功能,不支持呼吸.黄色5号引脚,红色9号引脚,绿色10号引脚.
提供PWM功能的引脚为3、5、6、9、10、11。 亮度取值范围0~255
白色灯自由闪烁,不做特殊处理,黄色,红色,绿色灯使用pwm功能,让亮度产生一个渐变过程,从而达到类似于呼吸的功能.
旋钮电位器
通过读取旋钮电位器的阻值,通过比例转换为亮度.然后对led灯做修改亮度操作,达到旋钮控制亮度的功能.
Arduino 模拟输入功能有10位精度,即可以将0~5V的电压信号转换为0~1023的整数形式表示。
废话不多说,直接上代码
/*
* 开关控制灯 开和关
*
* 通过旋钮电位器来控制灯的亮度.
*
* 通过呼吸的方式将灯缓慢开启 和 缓慢关闭.
*
*/
// 设置各引脚别名
const int buttonPin = 2; // 连接按键的引脚
const int ledPin[3] = {6,9,10}; // 连接LED 具有 PWM功能的引脚
const int ledPin2 = 4; // 白色rgb三色闪烁led
const int pot=A0; //旋钮电位器引脚
int fadeValueMax = 255; //最大亮度
// 变量定义
//int buttonState = 0; // 存储按键状态的变量
boolean ledState=false; // 记录LED状态
boolean buttonState=true; // 记录按键状态
/**
* 程序执行之前都会先执行该方法
*/
void setup() {
// 初始化LED引脚为输出状态
for(int i=0; i<3; i++){
pinMode(ledPin[i], OUTPUT);
}
pinMode(ledPin2, OUTPUT);
// 监听9600 串口
Serial.begin(9600);
// 初始化按键引脚为输入状态
pinMode(buttonPin, INPUT_PULLUP);
}
/**
* 程序会一直循环的调用该方法
*/
void loop(){
//按照比例计算当前的最大亮度
fadeValueMax = analogRead(pot)/4;
//如果当前按钮处于高电荷状态,就一直循环该方法,实现类似于监听功能
while(digitalRead(buttonPin)==HIGH){
if(ledState){
//如果当前led处于开启状态,让旋钮电位器控制led的亮度
int fadeValue = analogRead(pot)/4;
analogWrite(ledPin[0], fadeValue);
analogWrite(ledPin[1], fadeValue);
analogWrite(ledPin[2], fadeValue);
Serial.println(fadeValue);
//稍稍停一下,防止太快发生意想不到的问题
delay(50);
}
}
// 当按键按下时,点亮或熄灭LED
if(ledState==true){
//如果当前处于亮灯状态,就让所有设备处于低电荷状态
digitalWrite(ledPin2,LOW);
delay(1000);
// digitalWrite(ledPin[0],LOW);
//呼吸的方式关闭led灯
int i = fadeValueMax;
do{
analogWrite(ledPin[0], i);
i= i - 5;
delay(30);
}while(i>=0);
delay(1000);
// digitalWrite(ledPin[1],LOW);
i = fadeValueMax;
do{
analogWrite(ledPin[1], i);
i= i - 5;
delay(30);
}while(i>=0);
delay(1000);
// digitalWrite(ledPin[2],LOW);
i = fadeValueMax;
do{
analogWrite(ledPin[2], i);
i= i - 5;
delay(30);
}while(i>=0);
delay(1000);
//状态取反
ledState=!ledState;
}
else
{
//如果当前是关闭状态,就让所有设备处于高电荷状态
// digitalWrite(ledPin[2],HIGH);
//呼吸的方式缓慢开启led灯
int i = 5;
while(i<=fadeValueMax){
analogWrite(ledPin[2], i);
i= i+ 5;
delay(30);
}
delay(30);
// digitalWrite(ledPin[1],HIGH);
i = 0;
while(i<=fadeValueMax){
analogWrite(ledPin[1], i);
i= i+ 5;
delay(30);
}
delay(30);
digitalWrite(ledPin[0],HIGH);
i = 0;
while(i<=fadeValueMax){
analogWrite(ledPin[0], i);
i= i+ 5;
delay(30);
}
delay(1000);
digitalWrite(ledPin2,HIGH);
//
// i = 0;
// analogWrite(ledPin2, i);
// while(i<255){
// i+=5;
// delay(30);
// }
delay(1000);
//状态取反
ledState=!ledState;
}
delay(500);
}
关键代码说明
- const 修饰的变量为常量,不能修改哦
- delay 休眠时间不可过长,不然无法起到监听效果.可能会导致按下开关没有反应.也不可没有,否则太快按一次之后,可能会执行方法多次,导致灯状态混乱.
- Serial.begin 监听串口,打开ide的串口监听页面,选择对应波特率,就可以看到相关输出了.
- Serial.println 将要输出的内容输出到对应的串口上面
- analogWrite 使用pwm能力,让灯以特定值亮起来. 最低0 关闭. 最高255 亮
- digitalWrite(ledPin[0],HIGH); 将ledPin[0] 引脚位置设置为高电荷模式, LOW为低电荷模式
- pinMode(buttonPin, INPUT_PULLUP); 设置为上拉电阻. INPUT 为普通的输入模式
- digitalRead analogRead 读取对应引脚的数据
下课~
光说不练假把式,记得练习哦~
以上是关于第一课:超级hello Arduino.使用多种知识串联一个入门小项目,很适合初学第一课哟.的主要内容,如果未能解决你的问题,请参考以下文章
Golang✔️走进 Go 语言✔️ 第一课 Hello World
python第一课————软件安装及“hello,world”程序编写