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

2024-04-17 22:08

本文主要是介绍Arduino提高篇14—摇杆按键操作OLED,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

摇杆按键操作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  A1int 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

更多内容,欢迎关注我的公众号。 微信扫一扫下方二维码即可关注:
扫码加入微信公众号:TonyCode

这篇关于Arduino提高篇14—摇杆按键操作OLED的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/912986

相关文章

业务中14个需要进行A/B测试的时刻[信息图]

在本指南中,我们将全面了解有关 A/B测试 的所有内容。 我们将介绍不同类型的A/B测试,如何有效地规划和启动测试,如何评估测试是否成功,您应该关注哪些指标,多年来我们发现的常见错误等等。 什么是A/B测试? A/B测试(有时称为“分割测试”)是一种实验类型,其中您创建两种或多种内容变体——如登录页面、电子邮件或广告——并将它们显示给不同的受众群体,以查看哪一种效果最好。 本质上,A/B测

键盘快捷键:提高工作效率与电脑操作的利器

键盘快捷键:提高工作效率与电脑操作的利器 在数字化时代,键盘快捷键成为了提高工作效率和优化电脑操作的重要工具。无论是日常办公、图像编辑、编程开发,还是游戏娱乐,掌握键盘快捷键都能带来极大的便利。本文将详细介绍键盘快捷键的概念、重要性、以及在不同应用场景中的具体应用。 什么是键盘快捷键? 键盘快捷键,也称为热键或快捷键,是指通过按下键盘上的一组键来完成特定命令或操作的方式。这些快捷键通常涉及同

CSP 2023 提高级第一轮 CSP-S 2023初试题 完善程序第二题解析 未完

一、题目阅读 (最大值之和)给定整数序列 a0,⋯,an−1,求该序列所有非空连续子序列的最大值之和。上述参数满足 1≤n≤105 和 1≤ai≤108。 一个序列的非空连续子序列可以用两个下标 ll 和 rr(其中0≤l≤r<n0≤l≤r<n)表示,对应的序列为 al,al+1,⋯,ar​。两个非空连续子序列不同,当且仅当下标不同。 例如,当原序列为 [1,2,1,2] 时,要计算子序列 [

arduino ide安装详细步骤

​ 大家好,我是程序员小羊! 前言: Arduino IDE 是一个专为编程 Arduino 微控制器设计的集成开发环境,使用起来非常方便。下面将介绍如何在不同平台上安装 Arduino IDE 的详细步骤,包括 Windows、Mac 和 Linux 系统。 一、在 Windows 上安装 Arduino IDE 1. 下载 Arduino IDE 打开 Arduino 官网

如何提高 GitHub 的下载速度

如何提高 GitHub 的下载速度 文章目录 如何提高 GitHub 的下载速度1. 注册账号2. 准备好链接3. 创建仓库4. 在码云上下载代码5. 仓库更新了怎么办 一般来说,国内的朋友从 GitHub 上面下载代码,速度最大是 20KB/s,这种龟速,谁能忍受呢? 本文介绍一种方法——利用“码云”,可以大大提高下载速度,亲测有效。 1. 注册账号 去“码云”注册一

动手学深度学习【数据操作+数据预处理】

import osos.makedirs(os.path.join('.', 'data'), exist_ok=True)data_file = os.path.join('.', 'data', 'house_tiny.csv')with open(data_file, 'w') as f:f.write('NumRooms,Alley,Price\n') # 列名f.write('NA

线程的四种操作

所属专栏:Java学习        1. 线程的开启 start和run的区别: run:描述了线程要执行的任务,也可以称为线程的入口 start:调用系统函数,真正的在系统内核中创建线程(创建PCB,加入到链表中),此处的start会根据不同的系统,分别调用不同的api,创建好之后的线程,再单独去执行run(所以说,start的本质是调用系统api,系统的api

Java IO 操作——个人理解

之前一直Java的IO操作一知半解。今天看到一个便文章觉得很有道理( 原文章),记录一下。 首先,理解Java的IO操作到底操作的什么内容,过程又是怎么样子。          数据来源的操作: 来源有文件,网络数据。使用File类和Sockets等。这里操作的是数据本身,1,0结构。    File file = new File("path");   字

MySQL——表操作

目录 一、创建表 二、查看表 2.1 查看表中某成员的数据 2.2 查看整个表中的表成员 2.3 查看创建表时的句柄 三、修改表 alter 3.1 重命名 rename 3.2 新增一列 add 3.3 更改列属性 modify 3.4 更改列名称 change 3.5 删除某列 上一篇博客介绍了库的操作,接下来来看一下表的相关操作。 一、创建表 create

封装MySQL操作时Where条件语句的组织

在对数据库进行封装的过程中,条件语句应该是相对难以处理的,毕竟条件语句太过于多样性。 条件语句大致分为以下几种: 1、单一条件,比如:where id = 1; 2、多个条件,相互间关系统一。比如:where id > 10 and age > 20 and score < 60; 3、多个条件,相互间关系不统一。比如:where (id > 10 OR age > 20) AND sco