电容式触控开关实验(二):触控式LED调光器 – Arduino 实验室 |
您所在的位置:网站首页 › led调光器怎么接线图片 › 电容式触控开关实验(二):触控式LED调光器 – Arduino 实验室 |
电容式触控开关实验(二):触控式LED调光器 2017年12月1日 admin 未分类 1 网拍上容易买到类似左下图的4路触控模块,对Arduino控制板而言,它相当于右下角的4组开关,所以程序不需要引用特别的程序库:
本单元实验将使用4路触控模块的其中3个开关,当作LED灯的开关、调亮和调暗控制界面。 实验材料 Arduino Uno控制板×1 4路触控开关模块×1 电阻:680Ω×1 LED×1(颜色不拘)LED接在Arduino的第5脚(或其他具PWM输出的接脚),触控模块的3个输出,接Arduino的10~12脚。面包板的接线示范:
本单元程序将做出「单击开、再按一下关」的开关效果。每碰触一次开关,开关模块就会输出一个脉冲(方波):
侦测单一开关信号变化的程序: const byte TOUCH_PIN = 10; // 觸控接腳 const byte LED_PIN = 13; // LED接腳 bool powerOn = false; // LED電源是否開啟,預設「否」 bool lastStatus = LOW; // 開關的上次狀態 bool btnStatus = LOW; // 開關的當前狀態 void setup() { pinMode(TOUCH_PIN, INPUT); pinMode(LED_PIN, OUTPUT); } void loop() { // 讀取開關當前的狀態 btnStatus = digitalRead(TOUCH_PIN); // 如果目前開關的狀態是「高電位」,且之前的狀態是「低電位」… if (btnStatus == HIGH && lastStatus == LOW) { powerOn = !powerOn; // 反相電源狀態 digitalWrite(LED_PIN, powerOn); } lastStatus = btnStatus; // 紀錄訊號狀態 }编译、上传程序之后,碰一下编号2的触控板,可点亮LED;再碰一下触控板,则关闭LED。 自定义触键结构数据本单元程序有三组触控键,需要建立如下的变数来储存接脚和开关状态: bool powerOn = false; // LED電源是否開啟,預設「否」 bool btnStatus = LOW; // 觸鍵的當前狀態 byte touchPin1 = 10; // 第1個觸鍵的接腳 bool lastStatus1 = LOW; // 第1個觸鍵的上次狀態 byte touchPin2 = 11; // 第2個觸鍵的接腳 bool lastStatus2 = LOW; // 第2個觸鍵的上次狀態 byte touchPin3 = 12; // 第3個觸鍵的接腳 bool lastStatus3 = LOW; // 第3個觸鍵的上次狀態为了让代码更清晰易读,我们可以替具有相同数据结构的触控键,定义如下的struct类型(struct类型定义的语法说明,请参阅「Mifare RFID-RC522模块实验(二):C语言的结构(struct)与类型定义(typedef)说明」): // 宣告觸鍵的自訂結構類型 typedef struct { byte pin; // 按鍵的接腳編號 bool lastStatus; // 上次的狀態 } key;如此,便能用底下的叙述宣告电源键的接脚及其预设状态: key powerKey = { 10, LOW };触控LED调光器的完整代码如下。「调亮」和「调暗」键只有在电源开启(即,powerOn值为true)的状态才有作用;灯光亮度值范围介于0~255。 const byte LED_PIN = 5; // LED燈的接腳 const byte PWR_LED = 13; // 電源指示燈的接腳 bool powerOn = false; // LED電源是否開啟,預設「否」 bool btnStatus; // 按鈕狀態 int pwmVal = 0; // 電源輸出值 // 宣告觸鍵的自訂結構類型 typedef struct { byte pin; // 按鍵的接腳編號 bool lastStatus; // 上次的狀態 } key; // 宣告電源鍵的接腳和預設狀態 key powerKey = { 10, LOW }; // 宣告「調亮」鍵的接腳和預設狀態 key upKey = { 11, LOW }; // 宣告「調暗」鍵的接腳和預設狀態 key downKey = { 12, LOW }; void setup() { Serial.begin(9600); pinMode(powerKey.pin, INPUT); pinMode(upKey.pin, INPUT); pinMode(downKey.pin, INPUT); pinMode(LED_PIN, OUTPUT); pinMode(PWR_LED, OUTPUT); } void loop() { // 讀取電源鍵的狀態 btnStatus = digitalRead(powerKey.pin); // 如果電源鍵的訊號從低電位變成高電位… if (btnStatus && powerKey.lastStatus == LOW) { powerOn = !powerOn; // 反相電源狀態 digitalWrite(PWR_LED, powerOn); if (powerOn) { // 若powerOn為true… // 依照pwmVal的值點亮LED analogWrite(LED_PIN, pwmVal); } else { // 關閉LED燈 digitalWrite(LED_PIN, LOW); } } // 紀錄這次的電源鍵訊號狀態 powerKey.lastStatus = btnStatus; // 讀取「調亮」鍵的狀態 btnStatus = digitalRead(upKey.pin); // 若「有開啟電源」且「此按鍵訊號是高電位」且「前次訊號是低電位」 if (powerOn && btnStatus && upKey.lastStatus == LOW) { // 增加亮度值,每次增加10,不能超過255。 if ((pwmVal+10) = 0) { pwmVal -= 10; Serial.println(pwmVal); analogWrite(LED_PIN, pwmVal); } } downKey.lastStatus = btnStatus; } 3,560 文章标题:电容式触控开关实验(二):触控式LED调光器 - Arduino 实验室 固定链接:https://arduino.nxez.com/2017/12/01/arduino-touch-led-dimmer.html![]() |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |