问题:当使用"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灯(开关控制)的更多相关文章

  1. arduino 红外遥控器控制LED灯

    /* 日期:2016.9.1 功能:红外遥控器控制LED灯 开,关,闪烁,呼吸 元件: 跳线公公头 * 5 led 220欧电阻 红外接收管,红外遥控 接线: 红外灯面向自己从左到右分别接 IO3 , ...

  2. arduino入门学习实现语音控制LED灯

    需要的准备的硬件arduino+PC+麦克风实现语音命令控制LED灯的亮灭. 首先需要将写好的arduino程序烧录到arduino uno主板中,下面是代码如下: int val;//定义变量val ...

  3. C#与Arduino通过串口通信来控制LED灯的状态

    一.引言 最近摆弄了一段时间的Arduino,发现Arduino做一些电子类项目.监控.机器人.电子玩具比较容易,并且Arduino与.NET程序集成也不难.接下来介绍一个简单的小程序,C#做的一个W ...

  4. enc28J60 网页控制LED灯

    软件IDE:Arduino 1.6.3 1.库的安装: 从https://github.com/jcw/ethercard 下载源码包,解压,复制ethercard-master文件夹到Arduino ...

  5. 云中树莓派(4):利用声音传感器控制Led灯

    云中树莓派(1):环境准备 云中树莓派(2):将传感器数据上传到AWS IoT 并利用Kibana进行展示 云中树莓派(3):通过 AWS IoT 控制树莓派上的Led 云中树莓派(4):利用声音传感 ...

  6. 嵌入式Linux学习入门:控制LED灯

    记录自己linux学习过程,让自己能够一直坚持下去 1.原理图分析: nLED_1, nLED_2, nLED_4, 给低电平则对应LED灯亮,高电平则对应LED灯灭, S3C2440芯片GPF4-G ...

  7. BLE 安卓APP控制LED灯的实现(转)

    源:BLE 安卓APP控制LED灯的实现 //注:参考AmoMcu源代码修改. 打开APP,检查蓝牙是否打开 BluetoothAdapter mBluetoothAdapter; final Blu ...

  8. 树莓派开机运行Python脚本 控制LED灯闪烁

    一.新建一个开机运行文件 在 /home/pi/.config 下创建一个文件夹,名称为 autostart,并在该文件夹下创建一个led.desktop文件(文件名以.desktop结尾) 编辑le ...

  9. 基于arduino UNO R3+ESP8266控制LED灯的开关(无USB转TTL工具实现)

    最近由于项目要求,需要开发物联网云平台,而本人对硬件和通信技术一窍不通,故而选择arduino这一简单单片机来实现学习掌握基础的硬件和通信技术. 下面就是本人通过查阅大佬资料做的一个整合版本的通过手机 ...

随机推荐

  1. python文件夹中pycache文件是什么

    python(pycache文件的问题):python属于脚本语言,执行python文件需要通过python解释器将源码转换为字节码,然后供cpu读取,pycache文件夹里面保存的就是py文件对应的 ...

  2. PostgreSQL10配置远程连接

    PostgreSQL10配置远程连接 psql --version centos7.3中 1.开启相应的防火墙端口,允许端口5432 2.访问权限配置/etc/postgresql/10/main/下 ...

  3. Windows下Git的下载与安装

    1).打开百度,输入Git进行搜索,如下图所示: 2).进入Git官网,由于电脑是Windows系统,选择Downloads for Windows,如下图所示: 3).电脑是64位操作系统,选择下载 ...

  4. 【转】python 输入一个时间,获取这个时间的下一秒

    原文:https://blog.csdn.net/l_d_56/article/details/84832198 输入一个时间,获取这个时间的下一秒 PS:下面代码使用于 python 2.7 tim ...

  5. 往Angular应用程序中添加DevExtreme

    To start this tutorial, you need an Angular 5+ application created using the Angular CLI. Refer to t ...

  6. mssql表分区

    1:表分区 什么是表分区一般情况下,我们建立数据库表时,表数据都存放在一个文件里.但是如果是分区表的话,表数据就会按照你指定的规则分放到不同的文件里,把一个大的数据文件拆分为多个小文件,还可以把这些小 ...

  7. 七十二:flask钩子函数之关于errorhandler的钩子函数

    errorhandler:在发生一些异常的时候,如404.500,如果要自定义处理这些错误,就可以使用errorhandler来处理,使用errorhandler需要注意几点: 1.在errorhan ...

  8. iOS 企业版 打包

    iOS 企业版 打包 使用 iOS 企业版的证书发布应用可以跳过 Appstore,直接发布到自己的网站,让其他人在自己的网站上下载安装,但前提是要用苹果自带的Safari 浏览器才能下载安装,其他浏 ...

  9. Eclipse-jee-oxygen-3A版运行时出现Could not create the Java virtual machine?

    我有她就够了!!! 详情点击:[她]

  10. python中的set集合

    当使用爬虫URL保存时,一般会选择set来保存urls,set是集合,集合中的元素不能重复,其次还有交集,并集等集合的功能, 爬虫每次获取的网页中提取网页中的urls,并保存,这就需要利用urls = ...