摇杆在很多应用场合被用来替代轻触按键,不但操作上方便,而且一个摇杆可替代多个按键,这使得电路设计得到简化。本篇演示如何将摇杆扭转的四个方向作为四个按键来操作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时才会再次触发一次按键返回。
关注微信公众号:TonyCode
Arduino学习交流群:868283450
更多内容,欢迎关注我的公众号。 微信扫一扫下方二维码即可关注: