win32按钮按下不弹起_02【pinpong库控制硬件】之Arduino uno按钮Led2

点击上方“蘑菇云创造”可以关注我们哦

一、概述

按钮开关,也称作按键开关,早期也称作敏感型开关,广泛应用在灯,插座总开关,门铃,汽车中控台等。按键开关的出现给用电安全增加了一层保护膜,方便控制电器的同时也进一步保护了元器件。

在Arduino 的学习过程中,我们会接触各种各样的输入设备,其中,按键开关是最简单 也是应用最广泛的一种。这里我们将用 Arduino 控制 LED 灯,实现按键按下开,再按下关的效果。

ce17f95ae6a14dfc61c28dd4ba5f7fa3.png

二、项目实施

(1)使用按钮点亮小灯

硬件准备:

主控:Arduino UNO、IO 传感器扩展板 V7.1

模块:LED发光模块、按钮模块

连接线:TypeAtoB方口USB连接线

cebe87097a2a87db45ed9f19d4e84fa1.png

程序编写:

1、在示例程序中找到button.py数字输入,并用IDLE打开。

f8935d7fdf5ac43eee7563b96b610850.png

2、按下F5运行程序,查看效果。当按下按钮时板载的LED灯会亮起(并打印1),松开会熄灭(打印0)。

9b0adc48921b2dd20c24fc029cc6f2e5.png

(2)按钮开关灯

在上步完成的功能中,我们通过按键可以实现“按下按键-LED 亮”,“松开按键-LED 灭”,但实际运用的开关却是“首次按下打开,再次按下关闭”,我们将在本步中实现这个功能。

硬件准备:

主控:Arduino UNO、IO 传感器扩展板 V7.1

模块:LED发光模块、按钮模块

连接线:TypeAtoB方口USB连接线

cebe87097a2a87db45ed9f19d4e84fa1.png

程序编写

import time

from pinpong.board import Board,Pin

board = Board("uno").begin()  #初始化,选择板型和端口号,不输入端口号则进行自动识别

#board = Board("uno","COM36").begin()  #windows下指定端口初始化

#board = Board("uno","/dev/ttyACM0").begin()   #linux下指定端口初始化

#board = Board("uno","/dev/cu.usbmodem14101").begin()   #mac下指定端口初始化

btn = Pin(Pin.D8, Pin.IN) #引脚初始化为电平输入

led = Pin(Pin.D13, Pin.OUT)

i=0  #设置变量i=0

while True:

  v = btn.read_digital()  #读取引脚电平

  #print(v)  #终端打印读取的电平状态

  if (v == 1):

    if (i == 1):

      i=0

      led.write_digital(0)  #将按钮状态设置给led灯引脚

      print("LED off")

    else:

      i=1

      led.write_digital(1)  #将按钮状态设置给led灯引脚

      print("LED on")

    time.sleep(0.5) #增加延时消除防抖

 运行代码,按下按钮可以切换LED灯的亮灭。

b56f8357ab56e6e437c613a1b8783827.png

三、代码分析

1、导入必要的包和初始化设置。

import time

from pinpong.board import Board,Pin

board = Board("uno").begin()  #初始化,选择板型和端口号,不输入端口号则进行自动识别

#board = Board("uno","COM36").begin()  #windows下指定端口初始化

#board = Board("uno","/dev/ttyACM0").begin()   #linux下指定端口初始化

#board = Board("uno","/dev/cu.usbmodem14101").begin()   #mac下指定端口初始化

btn = Pin(Pin.D8, Pin.IN) #引脚初始化为电平输入

led = Pin(Pin.D13, Pin.OUT)#引脚初始化为电平输出

2、我们需要一个按键能够得到两个不同的结果,那么就需要设置一个中间值来实现切换状态的作用。所以首先我们要设置一个变量i=0。

i=0  #设置变量i=0

3、接着加入判断,判断按钮摁下的状态。为了方便设置,定义变量v为按钮的状态。

while True:

  v = btn.read_digital()  #读取引脚电平

  #print(v)  #终端打印读取的电平状态

  if (v == 1):

4、然后加入判断,借助i来区别状态,如逻辑图所示,每次摁下按钮时i的值会在0和1之间切换,借助i值的变化来确定LED灯的亮灭状态即可,根据逻辑完成代码。

63fdc17a84a9e48b96e9c1c156d1daba.png

 if (i == 1):

      i=0

      led.write_digital(0)  #将按钮状态设置给led灯引脚

      print("LED off")

    else:

      i=1

      led.write_digital(1)  #将按钮状态设置给led灯引脚

      print("LED on")

    time.sleep(0.5)

什么是按键抖动?

我们想象的开关电路是“按下按键-立刻导通”“再次按下-立刻断开”,而实际上并非如此。

按键通常采用机械弹性开关,而机械弹性开关在机械触点断开闭合的瞬间(通常 10ms左右),会由于弹性作用产生一系列的抖动,造成按键开关在闭合时不会立刻稳定的接通电路,在断开时也不会瞬时彻底断开。

e58d4b0a5240d1cebce0260fdf15b684.png

那又如何消除按键抖动呢?

常用除抖动方法有两种:软件方法和硬件方法。这里重点讲讲方便简单的软件方法。

我们已经知道弹性惯性产生的抖动时间为 10ms 左右,用延时命令推迟命令执行的时间就可以达到除抖动的效果。

所以我们在代码中加入了0.5秒的延时以实现按键防抖的功能。

b529a20f87c0e59b37ede4e7a3e4f246.png ———————正文完———————

0dffcc7a86f91a5eca3d575261ac7ca7.png

推荐阅读: 02【pinpong库控制硬件】之Arduino uno-Led闪烁-1 01【pingpong库控制硬件】之虚谷号-1 Mind+:深耕8年的国产青少年编程软件,支持AI人工智能与IoT物联网功能 00后大学生成功发射自制火箭!网友集体膜拜…… 你敢想却不敢做的,让AI来帮你实现!   课程设计与教学设计的区别是什么?
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值