|
功能简介:5个微动开关接到arduino的UNO R3 I/O口;
定义一个虚拟串口连接蓝牙模块;
微动开关加了去抖动;
每个开关按下然后弹起会从串口发送一段字符串。
源码:
- // 引脚定义
- int buttonPin[5] ={2,4,7,8,12}; // 按键位置
- const int ledPin = 13; // led位置
- // 定义变量
- int ledState = LOW; // 当前led状态
- int buttonState[5] = {0}; // 读取的当前按键状态
- int lastButtonState[5] = {0}; // 上次读取的按键状态
- int a[5]={0};
- // 使用长整型变量
- long lastDebounceTime[5] = {0}; // 上次按键触发时间
- long debounceDelay = 50; // 去抖时间,根据实际情况调整
- #include <SoftwareSerial.h>
- //使用软件串口,能将数字口模拟成串口
- SoftwareSerial BL(5, 6); //新建对象,接收脚为5,发送脚为6
- void setup() {
- BL.begin(115200);
- for(int i=0;i<5;i++){
- pinMode(buttonPin[i],INPUT);
- }
- pinMode(ledPin, OUTPUT);
- // 初始化led的状态
- digitalWrite(ledPin, ledState);
- }
- void loop() {
- int reading[5]={0};
- for(int j=0;j<5;j++){
- reading[j] = digitalRead(buttonPin[j]);// 读取按键状态赋值到一个变量
- //如果按键状态变化,不过是由于抖动还是按键按下造成的下面的程序都需要进行这一步处理
- if (reading[j] != lastButtonState[j]) {
- // 复位去抖时间,就是把当前时间保存下来
- lastDebounceTime[j] = millis();
- }
- if ((millis() - lastDebounceTime[j]) > debounceDelay) {
- // 等过了去抖时间,再次去检测按键的状态
- if (reading[j] != buttonState[j]) {
- buttonState[j] = reading[j];
- // 如果按键仍然保持上次的状态,我们认为这个按键按下是真实有效的
- if (buttonState[j] == HIGH) {
- ledState = HIGH;
- //BL.println("0000000000000000");
- }
- else {
- ledState = LOW;
- switch(j){
- case 0:BL.println("aa00000000000000");break;
- case 1:BL.println("00aa000000000000");break;
- case 2:BL.println("00000000aa000000");break;
- case 3:BL.println("0000aa0000000000");break;
- case 4:BL.println("0000000000aa0000");break;
- }
- }
- }
- }
- // 把led的最终结果输出到对应的引脚
- digitalWrite(ledPin, ledState);
- // 保存当前值,一边下一个循环检测的时候使用
- …………余下代码请下载附件…………
复制代码
下载:
Switch5_0314.rar
(1.2 KB, 下载次数: 21)
|
|