文章目录[隐藏]
简介:拨动开关和按钮逻辑
这可指导的内容涵盖了拨动开关和按钮逻辑。我将介绍如何读取开关的状态以及如何使用它来控制进程或调用函数。本示例中的示例程序具有直接在您自己的项目中进行复制,粘贴,编辑和使用的功能。
程序逻辑涵盖以下用例:
- 按下按钮或翻转拨动开关时,请使用开关来调用功能。例如,在按住按钮的同时,LED灯会保持点亮状态。释放或不按下按钮时,指示灯熄灭。
- 当按下按钮或翻转拨动开关时,可以通过调用函数来打开设备。第二次按下该按钮时,设备将关闭。例如,当按下并释放按钮时,LED灯会亮起并保持点亮状态。再次按下并释放按钮时,LED指示灯熄灭并保持熄灭。该逻辑允许您打开和关闭设备。
-
当按下按钮或切换按钮时调用函数;或在释放按钮时调用该函数。这使您可以选择何时调用函数:在按下时或在释放时。
如果没有程序逻辑,则当按下按钮时,如果调用了一个函数,则在按住该按钮的过程中可能会一遍又一遍地调用该函数。即使您只希望它调用一次,无论您按住按钮多长时间。或者,您可能希望在释放按钮时而不是在按住按钮时调用该函数。
我还将介绍接线选项:
- 使用下拉电阻
- 或者,在程序中,更改引脚模式设置,然后Arduino将使用内部电阻器,从而省去了在电路中布线额外电阻器的麻烦。
我将介绍以下开关切换和按钮:
- 一个按钮,按下该按钮可使电流流动。释放后,它将返回到无流量状态。
- 扳动开关扳动,当扳动并保持时,允许电流流过。释放后,它将返回到无流量状态。拨动开关的拨动开关基本上与按钮相同。我使用的拨动开关拨动开关可以在2个方向上拨动,以允许2个回路流动。这称为开/关/开SPDT 3位置瞬时切换。
这个可指导的步骤是接线和测试Arduino板。下一步是连接拨动开关,2个按钮和2个LED灯。接线后,加载并运行示例程序,该程序将读取开关状态并根据状态调用功能。
此说明要求您已安装Arduino IDE。您还需要具备基本技能,才能从该项目中的链接下载Arduino素描程序,并为该程序创建目录(目录名与程序名相同)。下载后,接下来的步骤是将程序加载到IDE中,对其进行查看和编辑。然后,通过USB电缆将程序上传到Arduino开发板。
材料清单:
- Arduino ATmega2560(Mega),Uno或Nano ATmega328P微控制器板,通过USB电缆连接到您的计算机。
- 2个面包板按钮
- 1 SPDT开/关/开3位置瞬时切换。
- 2个LED灯
- 2个10K电阻器
- 1个1K至5K电阻器
- 面包板
- 面包板电线或电缆(公对母)
我在eBay上购买了这些零件,主要是从香港或中国的分销商那里购买的。美国的分销商可能会以合理的价格和更快的交货期使用相同或相似的零件。中国部分需要3到6周的时间才能交付。我用过的发行商都很可靠。
大约的费用:Mega 15美元,Nano3美元。我的SPDT On / Off / On 3 Position Momentary拨动开关是一个直径6毫米(0.2英寸)的微型微型扬声器。我以6.79美元的价格购买了10个拨动开关。
步骤 1:测试Arduino Nano,Uno或Mega
如果您使用的是Arduino Nano,请将其插入面包板。将Arduino的电源和地线连接到面包板的电源条。将Arduino 5V +引脚连接到面包板的正极。将Arduino GND(接地)引脚连接到面包板的负极(接地)排。电源条将用于连接按钮和拨动开关。
下载并运行基本的Arduino测试程序:arduinoTest.ino。在运行程序时,板载LED灯将亮1秒钟,然后熄灭1秒钟,然后连续循环。此外,还会发布消息,可以在Arduino IDE工具/串行监视器中查看消息。
+++ Setup.
+ Initialized the on board LED digital pin for output. LED is off.
++ Go to loop.
+ Loop counter = 1
+ Loop counter = 2
+ Loop counter = 3
...
请注意,您可以使用此程序测试Nano,Mega或Uno,它们对于板载LED灯都具有相同的引脚号。
步骤2:连接开关和按钮
我的试验板电路具有以下组件和连接。
2个按钮带有下拉电阻。
- 每个按钮的一侧连接到Nano数字引脚(引脚6和7),并且10K电阻器也连接到Nano数字引脚一侧的按钮。
- 电阻的另一侧接地。因此,将其名称下拉,然后将Nano数字引脚接地。
- 按钮的另一端连接到5V +。
当按下按钮时,电流从5V +穿过按钮,流经电阻到地。数字将从LOW(接地)变为HIGH(正电压)。1开/关/开拨动开关。
拨动开关的每一侧都是上拉电路,不需要电阻。
- 拨动开关的中间触点接地。
- 其他2个触点连接到Nano数字引脚8和9。
- 我已经将3英寸的导线焊接到每个拨动触点上,以进行连接,从而可以将拨动触点连接到面包板上。
2个LED灯。
- LED的正极直接连接到Nano数字引脚(引脚A1和A2,它们是用作数字引脚的模拟引脚)。
- LED灯的另一侧通过5K电阻器接地。我使用了5K电阻器,因为它可以工作,并且我有很多。
接下来,再次列出连接,以及相应的程序pinMode语句和电路流信息。
对于面包板按钮,
下拉电路连接,将Arduino数字引脚连接到开关或按钮的一侧。 接地至10K欧姆电阻器,至开关的同一侧。 开关另一端为5V +。 用, pinMode(inPinDown,INPUT); //需要一个10K的下拉电阻。 Arduino数字引脚读数为低电平。 当开关闭合(按下按钮)时,数字引脚显示为高电平。
对于开/关/开SPDT切换,
上拉电路连接, Arduino数字引脚连接到开关或按钮的一侧。接地到开关或按钮的另一侧。 用, pinMode(inPinUp,INPUT_PULLUP); //不需要任何电阻。 Arduino从数字引脚读取高电平。 当开关关闭(按下按钮)时,Arduino读取低电平
对于LED灯,
为了进行拨动测试,请将2个LED灯连接到Arduino数字引脚。 Arduino数字引脚连接到LED灯的正(+)端。1K电阻器连接到LED灯的接地(-)端。 可以使用各种尺寸的电阻:1K至5K。 电阻器的另一侧接地
步骤3:测试开关和切换逻辑
在Arduino上下载并运行逻辑测试程序:switchInputTest.ino。该程序已成功通过Mega和Nano进行了测试。程序检查开关状态。如果状态改变,则根据程序逻辑,LED会亮起或熄灭。
计划须知
在设置部分,设置引脚模式(pinMode):
- LED灯的输出
- 输入下拉电阻开关。
- INPUT_PULLUP用于使用Arduino内置电阻的上拉开关。
void setup() { ... pinMode(LED_PIN, OUTPUT); // Onboard LED light pinMode(LED_TOGGLE_PIN1, OUTPUT); pinMode(LED_TOGGLE_PIN2, OUTPUT); Serial.println("+ LED output pins initialized."); // Initialize the button pin. pinMode(PIN_PULL_DOWN1, INPUT); // Requires a 10K resister. pinMode(PIN_PULL_DOWN2, INPUT); // Requires a 10K resister. pinMode(PIN_PULL_UP1, INPUT_PULLUP); // Doesn't require a resister. pinMode(PIN_PULL_UP2, INPUT_PULLUP); // Doesn't require a resister. Serial.println("+ Input pins initialized."); ... }
程序启动时,板载LED指示灯和2个LED指示灯均熄灭。在IDE监视器窗口中,显示安装消息。
+++ Setup. + LED output pins initialized. + Input pins initialized. +++ Go to loop and check if the switches are switched.
在程序循环中,delay语句用于控制所谓的反跳。进行连接时,在很短的时间间隔内可以进行连接,断开连接,连接,断开连接,直到连接稳定为止。delay语句将处理这种情况,因为该连接被视为仅连接一次。
void loop() { checkPullUpSwitch(); checkPullUpToggle(); checkPullDownSwitch(); checkPullDownToggle(); delay (100); }
切换逻辑
按下其中一个按钮。按住按钮期间,板载LED灯保持点亮。释放时,指示灯熄灭。该按钮的函数名称为checkPullDownSwitch()。
在一个方向上翻转拨动开关,并在保持该方向的同时,板载LED灯仍保持点亮状态。释放时,指示灯熄灭。切换器的函数名称为checkPullUpSwitch()。
两个函数checkPullDownSwitch()和checkPullUpSwitch()的程序结构相同。该电路表明,相同的基本功能适用于多种类型的开关。
请注意,无论是否使用下拉电阻,最终结果都是LED灯以相同的方式打开和关闭。
// Turn light on when the button is pressed. boolean setPullDownState1 = false; void checkPullDownSwitch() { // When using a pull down resister, LOW is not switched, HIGH is switched. if (digitalRead(PIN_PULL_DOWN1) == HIGH) { if (!setPullDownState1) { Serial.println("+ Pushed, pull down pin switch 1, LED on."); setPullDownState1 = false; // Logic: button pushed down. digitalWrite(LED_PIN, HIGH); } setPullDownState1 = true; } else { if (setPullDownState1) { Serial.println("+ Released, pull down pin switch 1, LED off."); setPullDownState1 = false; // Logic: button released. digitalWrite(LED_PIN, LOW); } } }
切换逻辑
按下另一个按钮然后松开,其中一个LED灯将点亮并保持点亮状态。再次按下按钮,然后释放它,指示灯熄灭并保持熄灭。该按钮的函数名称为checkPullDownToggle()。
向另一个方向扳动扳钮并松开,其中一个LED灯将点亮并保持点亮状态。再次向同一方向扳动扳钮,然后松开,指示灯熄灭并保持熄灭。切换器的函数名称为checkPullUpToggle()。
两个函数checkPullDownToggle()和checkPullUpToggle()的程序结构相同。电路再次表明,相同的基本功能适用于多种类型的开关。附加逻辑显示了如何使用开关使用布尔值来切换设备。在示例程序中,值是:theTogglePullDown和theTogglePullUp。
请注意,无论是否使用下拉电阻,最终结果都是LED灯以相同的方式打开和关闭。
// Toggle light on and off each time the switch is flipped. boolean theTogglePullUp = false; boolean setPullUpState2 = false; // Case the button is pressed and held, only toggle once. void checkPullUpToggle() { // If the button is pressed (circuit closed), the button status is HIGH. if (digitalRead(PIN_PULL_UP2) == LOW) { if (setPullUpState2) { if (theTogglePullUp) { Serial.println("+ Flipped, pull up pin switch 2, toggle off."); theTogglePullUp = false; // Logic: switch flipped, circuit closed. digitalWrite(LED_TOGGLE_PIN1, LOW); } else { Serial.println("+ Released, pull up pin switch 2, toggle on."); theTogglePullUp = true; // Logic: switch released. digitalWrite(LED_TOGGLE_PIN1, HIGH); } } setPullUpState2 = false; } else { setPullUpState2 = true; } }
步骤4:摘要
在上面的照片中,您可以看到我的Altair 8800仿真器有很多拨动开关。此可指导应用程序的逻辑功能来自该项目。由于每个开关都有其自己的逻辑功能,因此可以轻松地将开关逻辑功能添加到其他项目中。
版权说明
本文遵循CC BY-SA版权协议,转载请附上原文出处链接及本声明。
链接:https://chandianzi.cn/toggle-switch-and-button-logic.html
作者:TigerFarmPress
版权协议:CC BY-NC-SA
分类名称:arduino-10
资源标识:Toggle-Switch-and-Button-Logic
暂无评论