Arduino控制LED灯(开关控制)
问题:当使用"digitalRead(BUT) == 1"控制LED灯时会出现"digitalWrite(LED, ledState);"的值出现跳动。
原因:因为loop会无限循环,当按下按钮时会一直输出1,当松开按钮时会一直输出0,所以判断的时候if(digitalRead(BUT) == 1)判断条件不稳定(这里不稳定的意思是if(digitalRead(BUT) == 1)会重复执行,造成ledState = !ledState的值一直改变)
#define BUT D2 //定义按钮的针脚
#define LED D9 //定义LED灯的针脚
boolean ledState = LOW; // 初始化LED灯的值 void setup() {
pinMode(BUT, INPUT); //设置针脚为输入
pinMode(LED, OUTPUT); //设置针脚为输出
Serial.begin(); //串口初始化
} void loop() {
if(digitalRead(BUT) == ){
//Serial.println(digitalRead(BUT)); //值为1
ledState = !ledState;
Serial.println(ledState); //ledState值不稳定
digitalWrite(LED, ledState);
}else{
//Serial.println(digitalRead(BUT));//值为0
}
}
解决1:中间值的方式
原理:使用中间值的方式稳定判断条件,在if(b1 != butState)的执行体中当按下按钮时control的值会加1,松开按钮又会加1,所以当control=2的执行if(control == 2)判断条件稳定(稳定的意思是if(control == 2)只会执行一次,这样就会解决ledState = !ledState值不稳定的情况。)
#define BUT D2
#define LED D9
boolean butState = LOW;
boolean ledState = LOW;
byte control = ; void setup() {
pinMode(BUT, INPUT);
pinMode(LED, OUTPUT);
Serial.begin(); //串口初始化
} void loop() {
// 死循环--未按下按钮值0 按下按钮值1
boolean b1 = digitalRead(BUT);
if(b1 != butState){
delay();//缓冲震动
// 只执行一次--未按下按钮值0 按下按钮值1
boolean b2 = digitalRead(BUT);
if(b2 == b1) {
// 只执行一次--未按下按钮值0 按下按钮值1
butState = b1;
// 按一次按钮执行两次
control++;
}
} if(control == ){
control = ;
// 默认值0 取反值1
ledState = !ledState;
Serial.println(ledState); //ledState值稳定
digitalWrite(LED, ledState);
}
}
ps:开发板信息
Arduino控制LED灯(开关控制)的更多相关文章
- arduino 红外遥控器控制LED灯
/* 日期:2016.9.1 功能:红外遥控器控制LED灯 开,关,闪烁,呼吸 元件: 跳线公公头 * 5 led 220欧电阻 红外接收管,红外遥控 接线: 红外灯面向自己从左到右分别接 IO3 , ...
- arduino入门学习实现语音控制LED灯
需要的准备的硬件arduino+PC+麦克风实现语音命令控制LED灯的亮灭. 首先需要将写好的arduino程序烧录到arduino uno主板中,下面是代码如下: int val;//定义变量val ...
- C#与Arduino通过串口通信来控制LED灯的状态
一.引言 最近摆弄了一段时间的Arduino,发现Arduino做一些电子类项目.监控.机器人.电子玩具比较容易,并且Arduino与.NET程序集成也不难.接下来介绍一个简单的小程序,C#做的一个W ...
- enc28J60 网页控制LED灯
软件IDE:Arduino 1.6.3 1.库的安装: 从https://github.com/jcw/ethercard 下载源码包,解压,复制ethercard-master文件夹到Arduino ...
- 云中树莓派(4):利用声音传感器控制Led灯
云中树莓派(1):环境准备 云中树莓派(2):将传感器数据上传到AWS IoT 并利用Kibana进行展示 云中树莓派(3):通过 AWS IoT 控制树莓派上的Led 云中树莓派(4):利用声音传感 ...
- 嵌入式Linux学习入门:控制LED灯
记录自己linux学习过程,让自己能够一直坚持下去 1.原理图分析: nLED_1, nLED_2, nLED_4, 给低电平则对应LED灯亮,高电平则对应LED灯灭, S3C2440芯片GPF4-G ...
- BLE 安卓APP控制LED灯的实现(转)
源:BLE 安卓APP控制LED灯的实现 //注:参考AmoMcu源代码修改. 打开APP,检查蓝牙是否打开 BluetoothAdapter mBluetoothAdapter; final Blu ...
- 树莓派开机运行Python脚本 控制LED灯闪烁
一.新建一个开机运行文件 在 /home/pi/.config 下创建一个文件夹,名称为 autostart,并在该文件夹下创建一个led.desktop文件(文件名以.desktop结尾) 编辑le ...
- 基于arduino UNO R3+ESP8266控制LED灯的开关(无USB转TTL工具实现)
最近由于项目要求,需要开发物联网云平台,而本人对硬件和通信技术一窍不通,故而选择arduino这一简单单片机来实现学习掌握基础的硬件和通信技术. 下面就是本人通过查阅大佬资料做的一个整合版本的通过手机 ...
随机推荐
- LeetCode 143. 重排链表(Reorder List)
题目描述 给定一个单链表 L:L0→L1→…→Ln-1→Ln , 将其重新排列后变为: L0→Ln→L1→Ln-1→L2→Ln-2→… 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换. ...
- 高效C++无锁队列实现-moodycamel::ConcurrentQueue
国外一牛人做的,支持多平台,支持多线程写.多线程读,并可指定读写token,转载过来. 感觉作者也时刻维护着他这个项目,我提了一些问题,每次都会及时得到答复,而且回复得非常认真仔细,非常赞! 链接地址 ...
- redis如何清空当前缓存和所有缓存
Windows环境下使用命令行进行redis缓存清理1.redis安装目录下输入cmd2.redis-cli -p 端口号3.flushdb 清除当前数据库缓存4.flushall 清除 ...
- Node某个JS导出方法变量以及在其他地方引用的例子
//modelJs.js var name="miyue"; function doSomething() { console.log("做一些事情"); } ...
- yum源安装mysql数据库 添加密码
学习mysql数据库时,安装的问题一直很烦恼,linux的不同版本的安装方式都可能不同,这里是我学习时的一些总结.也是刚刚开始学习,大佬勿喷,谢谢啦!!! 1.查看是否已经安装 2.如果没安装 yum ...
- dpkg软件包管理
要想得心应手管理Ubuntu软件包,就必须熟悉其中最重要的软件包管理程序dpkg工具是Ubuntu软件包管理工具的基础.使用dpkg工具可以实现软件包的安装.卸载.查询.编译.打包等功能. dpkg( ...
- 把java项目打包成jar包并可以直接运行【我】
首先创建一个maven的jar项目,然后代码写好后,在项目右键,导出: 选择java下面的可运行的jar文件: 下一步: 要注意的是: launch configuration 此选项是指定选中要导出 ...
- python web开发flask框架 安装与环境
# encoding:utf-8 # 从flask这个框架中导入Flask这个类 from flask import Flask # 初始化一个Flask对象 # Flasks() # 需要传递一个参 ...
- 数据库高级数据库学习--上机练习7(Transact-SQL 函数定义和调用)
上机练习7 在Transact SQL中,有一类特殊的自定义函数,其返回值为一张表,该类自定义函数被称作内嵌(联)表值函数,其基本语句格式如下: CREATE FUNCTION函数名称[( {@参数名 ...
- gcc posix sjij for MSYS 9.2.1+
mingw gcc 32位 版本 9.2.1 以上的 以后都在 github 上发布 https://github.com/qq2225936589/gcc-i686-posix-sjlj-for-M ...