找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5325|回复: 0
打印 上一主题 下一主题
收起左侧

通过蓝牙模块发送按键信号,arduino源码

[复制链接]
跳转到指定楼层
楼主
功能简介:5个微动开关接到arduino的UNO R3 I/O口;
定义一个虚拟串口连接蓝牙模块;
微动开关加了去抖动;
每个开关按下然后弹起会从串口发送一段字符串。

源码:

  1. // 引脚定义
  2. int buttonPin[5] ={2,4,7,8,12};    // 按键位置
  3. const int ledPin = 13;      // led位置

  4. // 定义变量
  5. int ledState = LOW;         // 当前led状态
  6. int buttonState[5] = {0};             // 读取的当前按键状态
  7. int lastButtonState[5] = {0};   // 上次读取的按键状态
  8. int a[5]={0};

  9. // 使用长整型变量
  10. long lastDebounceTime[5] = {0};  // 上次按键触发时间
  11. long debounceDelay = 50;    // 去抖时间,根据实际情况调整

  12. #include <SoftwareSerial.h>
  13. //使用软件串口,能将数字口模拟成串口
  14. SoftwareSerial BL(5, 6);  //新建对象,接收脚为5,发送脚为6

  15. void setup() {
  16.   BL.begin(115200);
  17.   for(int i=0;i<5;i++){
  18.   pinMode(buttonPin[i],INPUT);
  19.   }
  20.   pinMode(ledPin, OUTPUT);

  21.   // 初始化led的状态
  22.   digitalWrite(ledPin, ledState);
  23. }

  24. void loop() {
  25.   int reading[5]={0};
  26.   for(int j=0;j<5;j++){
  27.   reading[j] = digitalRead(buttonPin[j]);// 读取按键状态赋值到一个变量
  28.   //如果按键状态变化,不过是由于抖动还是按键按下造成的下面的程序都需要进行这一步处理
  29.   if (reading[j] != lastButtonState[j]) {
  30.     // 复位去抖时间,就是把当前时间保存下来
  31.     lastDebounceTime[j] = millis();
  32.   }
  33.   if ((millis() - lastDebounceTime[j]) > debounceDelay) {
  34.     // 等过了去抖时间,再次去检测按键的状态
  35.     if (reading[j] != buttonState[j]) {
  36.       buttonState[j] = reading[j];

  37.       // 如果按键仍然保持上次的状态,我们认为这个按键按下是真实有效的
  38.       if (buttonState[j] == HIGH) {
  39.         ledState = HIGH;
  40.      //BL.println("0000000000000000");
  41.       }
  42.       else {
  43.         ledState = LOW;
  44.         switch(j){
  45.       case 0:BL.println("aa00000000000000");break;
  46.       case 1:BL.println("00aa000000000000");break;
  47.       case 2:BL.println("00000000aa000000");break;
  48.       case 3:BL.println("0000aa0000000000");break;
  49.       case 4:BL.println("0000000000aa0000");break;  
  50.       }
  51.       }
  52.     }   
  53.   }
  54.   // 把led的最终结果输出到对应的引脚
  55.   digitalWrite(ledPin, ledState);
  56.   // 保存当前值,一边下一个循环检测的时候使用

  57. …………余下代码请下载附件…………
复制代码

下载:
Switch5_0314.rar (1.2 KB, 下载次数: 21)
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表