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这一简单单片机来实现学习掌握基础的硬件和通信技术. 下面就是本人通过查阅大佬资料做的一个整合版本的通过手机 ...
随机推荐
- java用Annotation注入到成员Bean对象
java用Annotation注入到成员Bean对象 在使用一些java框架的时候,经常看到一些注解,而且使用注解之后就可以免去一些xml的繁琐配置,本文记录如何通过注解获得成员Bean对象. 一.首 ...
- Android通过JNI实现守护进程与卸载后跳转指定网页
JNI进程守护 c代码部分如下:JNIEXPORT void JNICALL Java_com_sharetimes_qude_jni_JNIDaemon_daemon(JNIEnv * env, j ...
- Vue -3:单文件组件
在很多 Vue 项目中,我们使用 Vue.component 来定义全局组件,紧接着用 new Vue({ el: '#container '}) 在每个页面内指定一个容器元素. 这种方式在很多中小规 ...
- eslint 检查单个文件的错误
问题: 批量检查时,没有针对性,想针对单个文件进行检查 解决办法:./node_modules/.bin/eslint your file
- Centos7.4 yum 安装MariaDB
#系统及版本选择:https://downloads.mariadb.org/mariadb/repositories/#mirror=tunavim /etc/yum.repos.d/MariaDB ...
- Win10资源管理器始终使用详细视图模式
Win10系统中使用资源管理器时,如果文件夹里有音乐文件就自动切换视图模式为音乐模式,这样有时确实很头疼,看不到文件的大小等信息. 解决的办法如下: 新创建FolderType = NotSpecif ...
- 【.NET】关于.NET前后台提示框的那点事
前言 关于提示框,或多或少都用到过,提示框常见方式两种:js原生alert() 和 div模拟弹层:下面以一个常见的需求业务场景来展现提示框的那点事: 正文内容 客户:需求方: 小白:实现方(全权负责 ...
- CentOS下Vim加密解密文本
CentOS用vim/vi给文件加密和解密 一. 利用 vim/vi 加密: 优点:加密后,如果不知道密码,就看不到明文,包括root用户也看不了: 缺点:很明显让别人知道加密了,容易让别人把加密的文 ...
- netcore程序部署 docker 异常 --生成图片二维码缺少libdl
最近因业务需求需要在程序中实现二维码图片生成,于是就用到QRCoder开发库.最终在windows环境下部署运行没问题,但切换到docker(centos7.0)后发现是有问题的. 错误信息提示:Th ...
- SolidWorks学习笔记6抽壳,加强筋,扫描,放样
抽壳 概念:移除一个或者多个面,然后将其余的模型外表面向内或者向外偏移相等或者不等的距离 针对不同面设置不同厚度 方向参考 有实体的一侧是内测, 没有实体的一侧是外侧 顺序 先圆角再抽壳 加强筋. 点 ...