美文网首页
Arduino提高篇14—摇杆按键操作OLED

Arduino提高篇14—摇杆按键操作OLED

作者: TonyCode | 来源:发表于2019-12-13 09:22 被阅读0次
    摇杆按键操作OLED

    摇杆在很多应用场合被用来替代轻触按键,不但操作上方便,而且一个摇杆可替代多个按键,这使得电路设计得到简化。本篇演示如何将摇杆扭转的四个方向作为四个按键来操作OLED显示。

    1. 实验材料

    • Uno R3开发板
    • 配套USB数据线
    • 面包板及配套连接线
    • 双轴按键摇杆模块
    • OLED显示屏

    2. 实验步骤

    1. 根据原理图搭建电路图。

    OLED屏的VCC、GND分别连接开发板的3.3V、GND,OLED屏的SDA和SCL分别连接开发板的A4和A5。双轴按键摇杆模块的VCC、GND分别连接开发板的5V、GND,模块的X轴输出、Y轴输出分别连接开发板的模拟引脚A0、A1。

    实验原理图如下图所示:

    实验原理图

    实物连接图如下图所示:

    实物连接图

    2. 新建sketch,拷贝如下代码替换自动生成的代码并进行保存。

    /*
       OLED_Key
       摇杆按键操作OLED
    */
    #include <Wire.h>
    #include <Adafruit_GFX.h>
    #include <Adafruit_SSD1306.h>
    
    #define OLED_RESET     4
    Adafruit_SSD1306 display(128, 64, &Wire, OLED_RESET);
    
    #define pinX  A0
    #define pinY  A1
    
    int valueX = 0;
    int valueY = 0;
    unsigned char keyValue = 0;
    int value = 0;
    
    
    void menu(unsigned char index)
    {
      display.clearDisplay();//清屏
      display.setCursor(20, 2);//设置显示位置
      display.println("--KEY--");
      display.setCursor(2, 35);//设置显示位置
    
      if (index == 1)
      {
        display.print("R:  [");
        value = value - 1;
      } else if (index == 2)
      {
        display.print("L:  [");
        value = value + 1;
      } else if (index == 3)
      {
        display.print("D:  [");
        value = value - 10;
      }
      else if (index == 4)
      {
        display.print("U:  [");
        value = value + 10;
      }
    
      if (value >= 100)
      {
        value = 100;
      }
      if (value <= 0)
      {
        value = 0;
      }
      display.print(value);
      display.print("]");
      display.display(); // 开显示
    
    }
    
    //按键扫描函数
    unsigned char keyScan(void)
    {
      static unsigned char keyUp = 1;
    
      valueX = analogRead(pinX);
      valueY = analogRead(pinY);
    
      if (keyUp && ((valueX <= 10) || (valueX >= 1010) || (valueY <= 10) || (valueY >= 1010)))
      {
        delay(10);
        keyUp = 0;
        if (valueX <= 10)return 1;
        else if (valueX >= 1010)return 2;
        else if (valueY <= 10)return 3;
        else if (valueY >= 1010)return 4;
      } else if ((valueX > 10) && (valueX < 1010) && (valueY > 10) && (valueY < 1010))keyUp = 1;
      return 0;
    }
    
    void setup()
    {
      display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
      display.setTextColor(WHITE);//开像素点发光
      display.clearDisplay();//清屏
      display.setTextSize(2); //设置字体大小
      display.setCursor(20, 2);//设置显示位置
      display.println("--KEY--");
      display.display(); // 开显示
    }
    
    void loop()
    {
      keyValue = keyScan();
    
      if (keyValue != 0)
      {
        menu(keyValue);
      }
    }
    

    3. 连接开发板,设置好对应端口号和开发板类型,进行程序下载。

    程序下载

    3. 实验现象

    扭转摇杆对应显示四个L、R、U、D四个方向标示以及对应的加减数字显示。

    实验现象

    4. 程序分析

    程序中最主要的部分是按键扫描函数,我们分别采集摇杆的X轴和Y轴模拟输入,选取模拟量AD值中的10和1010作为两个临界点,当扭动摇杆采集回的数据小于10或者大于1010,就认为这个轴向上进行了按键触发。

    使用静态变量keyValue保存按键按下状态,只有当模拟量再次进入小于10或者大于1010时才会再次触发一次按键返回。

    相关文章

      网友评论

          本文标题:Arduino提高篇14—摇杆按键操作OLED

          本文链接:https://www.haomeiwen.com/subject/ugkmgctx.html