首页 » 科学 » 电容式触控开关实验(二):触控式LED调光器_触控_模块

电容式触控开关实验(二):触控式LED调光器_触控_模块

乖囧猫 2025-01-16 18:06:51 0

扫一扫用手机浏览

文章目录 [+]

此触控模块的紧张构成电路如下,卖力处理电容触控旗子暗记的核心是TTP224芯片
TTP224的技能文件指出,每个触控感应端可连接0~50pF的电容,借以调度触控感应的灵敏度,此模块采取的电容值为30pF。
每当触控端感应到人体碰触时,对应的OUT1~OUT4将输出高电位,模块上的LED也将被点亮。

相较于上一篇文章的大略单纯DIY触控电路,利用触控IC的好处是稳定、不易受外界环境影响(如:汗水、油污)和噪声滋扰,而且程序也大略许多。

电容式触控开关实验(二):触控式LED调光器_触控_模块 科学

利用4路触控开关模块制作LED调光器

本单元实验将利用4路触控模块的个中3个开关,当作LED灯的开关、调亮和调暗掌握界面。

实验材料

Arduino Uno掌握板×14路触控开关模块×1电阻:680Ω×1LED×1(颜色不拘)

LED接在Arduino的第5脚(或其他具PWM输出的接脚),触控模块的3个输出,接Arduino的10~12脚。
面包板的接线示范:

侦测开关旗子暗记变革的程序

本单元程序将做出「单击开、再按一下关」的开关效果。
每碰触一次开关,开关模块就会输出一个脉冲(方波):

当触控旗子暗记从低电位变成高电位,代表有人碰触了开关,程序须要依照第5脚的LED状态,决定:

若LED灯是亮着的,则要关闭它。
若LED灯是熄灭的,则要点亮它。

侦测单一开关旗子暗记变革的程序:

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的值點亮LEDanalogWrite(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) <= 255) { pwmVal += 10; Serial.println(pwmVal); analogWrite(LED_PIN, pwmVal); } } upKey.lastStatus = btnStatus; // 讀取「調暗」鍵的狀態 btnStatus = digitalRead(downKey.pin); if (powerOn && btnStatus && downKey.lastStatus == LOW) { // 減少亮度值,最低值為0 if ((pwmVal-10) >= 0) {pwmVal -= 10;Serial.println(pwmVal);analogWrite(LED_PIN, pwmVal);}}downKey.lastStatus = btnStatus;}

标签:

相关文章

一文搞懂PLC的进制转换_基数_二进制数

数制也称计数制,是指用一组固定的符号和统一的规则来表示数值的方法。按进位的原则进行计数的方法,称为进位计数制。比如,在十进位计...

科学 2025-01-18 阅读0 评论0