0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

怎样使OLED和加速度计交互

454398 来源:网络整理 作者:网络整理 2019-11-19 10:54 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

步骤1:介绍加速度计ADXL335

在本教程中,我们将展示如何使用库显示球并使用加速度计使其在屏幕上移动。我们将使用的加速度计是ADXL335。

传感器可以测量x,y和z轴上的加速度,就像重力引起的加速度一样。因此,如果传感器在静止状态下与地面平行,则只有一根轴会感觉到重力加速度。倾斜设备时,其他轴也会开始感觉到重力加速度。这样,就有可能分析设备的移动方式。

步骤2:将加速度计添加到OLED设置

现在我们知道了OLED和加速度计的工作原理,现在该创建设置了。

首先,我们需要按照上图所示的以下方式将传感器添加到OLED设置中。

传感器的针脚如下所示连接到Arduino

VCC – 5V

GND – GND

X – A3

Y – A2

Z和ST保持未连接状态

步骤3:代码

设置好连线后,我们可以使用以下代码创建游戏:

#include

#include

#include

#include

using namespace JUGL;

SSD1306_128x64 driver;

const int xpin = A3; //Assign pin A3 to x

const int ypin = A2; //Assign pin A2 to y

int x, y, x1, y1, r, varx, vary, width, height; //Define variables

int xy [2]; //Array to hold (x,y) coordinate

//Declaration of functions

void Circle(IScreen& scr);

void move_right(IScreen& scr);

void stop_right(IScreen& scr);

void move_left(IScreen& scr);

void stop_left(IScreen& scr);

void move_up(IScreen& scr);

void stop_up(IScreen& scr);

void move_down(IScreen& scr);

void stop_down(IScreen& scr);

void setup(){

IScreen& screen = driver; //Make reference to driver

screen.Begin(); //Initialize screen

width = screen.GetWidth(); //Get width of screen (128)

height = screen.GetHeight(); //Get height of screen (64)

Circle(screen); //Draw circle

}

void loop(){

x1 = analogRead(xpin); //Read x analog data

y1 = analogRead(ypin); //Read y analog data

IScreen& screen = driver; //Make reference to driver

if(x1《500){ //Check if sensor is tilted to the right

move_right(screen); //Move ball right

if(varx》=width-1-r ){ //Check if ball reached end of screen

stop_right(screen); //Stop moving

}

}

if(x1》520){ //Check if sensor is tilted to the left

move_left(screen); //Move ball left

if(varx=height-1-r){ //Check if ball reached end of screen

stop_up(screen); //Stop moving

}

}

if(y1》510){ //Check if sensor is tilted down

move_down(screen); //Move ball down

if(varyr){ //Check if ball is within boundaries

scr.Flush(); //Display on screen

}

}

void stop_left(IScreen& scr){

scr.Clear(); //Clear screen

varx = r; //Update varx

xy[0] = varx; //Store new varx value

scr.FillCircle(Point(5,xy[1]),r); //Draw circle

scr.Flush(); //Display on screen

}

void move_up(IScreen& scr){

scr.Clear(); //Clear screen

vary += 10; //Move ball 10 pixels up, assign value to vary

xy[1] = vary; //Store new vary value

scr.FillCircle(Point(xy[0],vary),r); //Draw circle

if(varyr){ //Check if ball is within boundaries

scr.Flush(); //Display on screen

}

}

void stop_down(IScreen& scr){

scr.Clear(); //Clear screen

vary = r; //Update vary

xy[1] = vary; //Store new vary value

scr.FillCircle(Point(xy[0],5),r); //Draw circle

scr.Flush(); //Display on screen

}

第4步:代码说明

所以这是代码中正在发生的事情。首先,我们包含了运行该程序所需的所有库。 JUGL库包含绘制圆所需的功能,而JUGL_SSD1306_128x64库用于初始化屏幕。最后一个库还包含“ DrawPoint”和“ Flush”功能,以绘制圆的每个像素并将其显示在屏幕上。 SPI和Wire库用于通过SPI或I2C与设备通信。在这种情况下,我们正在使用I2C通信。由于该库支持许多驱动程序,因此需要指定我们正在使用的驱动程序。第6行通过指定在128x64屏幕上使用驱动程序SSD1306来解决此问题。以下是该库支持的其他驱动程序:

EPD 2.0

EPD 1.44

EPD 2.7

PCF8833

KS0107

在代码的下一部分,我们将Arduino的模拟输入A3和A2分别分配给传感器的x和y引脚。我们还定义了将要使用的变量,并创建一个数组来保存x和y坐标(球的原点)。然后,对将在此程序中使用的功能进行前向声明。

接下来,我们转到代码的设置部分。在这里,我们引用了正在使用的驱动程序。基于参考,我们初始化屏幕,并获取其宽度和高度。最后,我们将函数称为“圆形”。该函数清除屏幕并设置球的半径和原点。我们使用库中的“ FillCircle”和“ Flush”功能绘制球并显示。这将在屏幕的左下角生成一个球,该球的半径为5个像素,原点为(5,5)。

步骤5:动作中的传感器

现在我们有了球,我们可以使用传感器使其移动。

在程序的循环部分中,我们引用了我们再次使用的驱动程序。然后,我们从引脚x和y读取数据,并将值分别分配给变量x1和y1。上表显示了每个引脚的值,具体取决于设备的倾斜度。

通过将这些值与“静止”值进行比较,我们可以确定设备是否向右,向左倾斜,等。让我们以程序中的第一种情况为例。

我们知道,如果设备向右倾斜,则“静止”值将减小。发生这种情况时,程序将调用函数“ move_right”。该函数清除屏幕,然后将值10添加到变量“ varx”(在这种情况下为零)。这表示我们要在x轴上移动球原点的像素数。然后,我们将新值“ varx”存储在数组的第一个位置。最后,我们调用“ FillCircle”和“ Flush”函数在屏幕上显示一个新的圆,该新圆与x轴上的上一个圆相距10个像素。只要引脚X的值小于510,该过程就会不断重复,从而擦除上一个圆,并在每次迭代时将新的像素画出10个像素。这给人一种错觉,那就是球在向右移动。

但是,如果球到达屏幕末端,则会调用“ stop_right”功能。此函数清除屏幕,将varx设置为126,并将此值存储在数组的第一个位置。然后调用函数“ FillCircle”和“ Flush”绘制并显示一个球,球的原点为(126,xy [1])。换句话说,该程序将停止将球向右移动10个像素,而是将在屏幕y所在的任何位置继续在屏幕右侧的边缘绘制相同的圆。

当设备向左,向上或向下倾斜时,使用相同的想法。

步骤6:传感器在起作用-继续

每次我们在屏幕上移动球时,都需要跟踪x和y轴的变化。如前所述,这是通过在每次球的原点发生变化时将新的x和y值存储在数组中来完成的。例如,如果我们将球向右移动并停止,以使绘制的最后一个球的原点为(30,5),则要从那里向上移动球,则必须考虑到球的变化。 x轴,以便在绘制新球时,其原点位于(30,15)。换句话说,数组中保存的值用作下一个要绘制的球的参考位置。

责任编辑:wv

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • OLED
    +关注

    关注

    121

    文章

    6370

    浏览量

    234267
  • 加速度计
    +关注

    关注

    6

    文章

    823

    浏览量

    48322
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    石英加速度计让空间受限的平台拥有“高精度感知”

    在惯性测量领域,传统加速度计往往面临两难:要么体积庞大,挤占宝贵的系统空间;要么温漂严重,一遇温度变化数据就“飘忽不定”。普通石英加速度计虽有一定精度,但零偏稳定性差、温度系数高,在长时间连续工作中
    的头像 发表于 04-14 15:01 148次阅读
    石英<b class='flag-5'>加速度计</b>让空间受限的平台拥有“高精度感知”

    探索NXP FXLS8964AF 3轴低g加速度计:特性、应用与设计要点

    探索NXP FXLS8964AF 3轴低g加速度计:特性、应用与设计要点 在汽车电子领域,对于高性能、低功耗的传感器需求日益增长。NXP的FXLS8964AF 3轴低g加速度计,凭借其出色的特性和丰
    的头像 发表于 12-25 10:20 567次阅读

    深入解析FXLS8971CF:3轴低g加速度计的卓越性能与应用

    深入解析FXLS8971CF:3轴低g加速度计的卓越性能与应用 在当今工业和医疗物联网(IoT)领域,对于高性能、低功耗的传感器需求日益增长。NXP Semiconductors
    的头像 发表于 12-24 14:00 673次阅读

    深入解析FXLS8961AF:汽车应用中的3轴低g加速度计

    深入解析FXLS8961AF:汽车应用中的3轴低g加速度计 在汽车电子领域,传感器技术的发展日新月异。其中,3轴加速度计在汽车安全和便利性应用中扮演着至关重要的角色。今天,我们就来详细探讨NXP
    的头像 发表于 12-24 13:55 518次阅读

    探索Series 660低成本可嵌入式加速度计:应用与技术解析

    探索Series 660低成本可嵌入式加速度计:应用与技术解析 在电子工程领域,加速度计是用于测量加速度的设备,在众多应用场景中发挥着关键作用。今天,我们将深入探讨PCB Piezotronics
    的头像 发表于 12-12 15:45 487次阅读
    探索Series 660低成本可嵌入式<b class='flag-5'>加速度计</b>:应用与技术解析

    IMI微功耗ICP®嵌入式加速度计:无线物联网设备的理想之选

    IMI微功耗ICP®嵌入式加速度计:无线物联网设备的理想之选 在电子工程师的日常工作中,为无线、电池供电的物联网设备选择合适的加速度计是一项关键任务。今天,我们就来深入了解一下IMI的微功耗ICP
    的头像 发表于 12-10 16:00 592次阅读
    IMI微功耗ICP®嵌入式<b class='flag-5'>加速度计</b>:无线物联网设备的理想之选

    加速度计都有哪些分类?

    加速度计的分类主要依据其工作原理和测量维度(轴数),以下是详细的分类:按工作原理分类(这是最核心的分类方式)这是根据加速度计内部如何感知和转换加速度信号来划分的。
    的头像 发表于 12-04 15:55 734次阅读
    <b class='flag-5'>加速度计</b>都有哪些分类?

    加速度计伺服电路模块原理与应用

    在惯性导航与姿态控制这一尖端技术领域,系统感知运动状态的能力直接决定了其精度与可靠性。而将物理世界的加速度精确转换为可用电信号的关键,在于一个核心部件——加速度计伺服电路模块。该模块专为光电加速度计
    的头像 发表于 11-28 15:43 605次阅读

    如何为你的项目选择合适的加速度计

    在智能科技飞速发展的今天,从翱翔天空的飞行器到我们手中的智能设备,对运动的精准感知已成为关键。加速度计,作为测量加速度和振动的核心传感器,其选型直接决定了项目的成败。面对不同的技术类型,如何才能做出最明智的选择?本文将带您了解主要的加速
    的头像 发表于 11-06 15:32 408次阅读
    如何为你的项目选择合适的<b class='flag-5'>加速度计</b>?

    石油钻井为何离不开抗高温抗冲击的石英加速度计

    在地下数千米的复杂钻井环境中,钻头需要穿越坚硬的岩层、承受剧烈振动和超过150℃的高温。此时,石英加速度计就如同钻井系统的"感知神经",通过与陀螺仪协同工作,精确测量角速度和加速度
    的头像 发表于 09-30 15:16 815次阅读
    石油钻井为何离不开抗高温抗冲击的石英<b class='flag-5'>加速度计</b>?

    MEMS加速度计与石英加速度计的发展现状与水平对比

    在工程测量与惯性导航领域,加速度计是感知运动与振动的核心传感器。其中,微机电系统(MEMS)加速度计和石英加速度计是两种技术路线迥异但应用广泛的重要类型。它们各自的发展现状和技术水平呈现出一种既竞争又互补的格局。
    的头像 发表于 09-19 14:55 1447次阅读
    MEMS<b class='flag-5'>加速度计</b>与石英<b class='flag-5'>加速度计</b>的发展现状与水平对比

    洞察万物运动:详解加速度计的分类与广泛应用

    在我们日常生活中,从智能手机屏幕的自动旋转到汽车的紧急安全气囊触发,一种看不见的技术始终在默默工作,感知着物体的运动和振动。这种技术的核心元件就是加速度计。它是一种能够测量加速度(包括静态重力加速度
    的头像 发表于 09-18 16:06 1157次阅读
    洞察万物运动:详解<b class='flag-5'>加速度计</b>的分类与广泛应用

    为什么在振动分析中加速度计最常用?

    尽管振动可以通过位移、速度加速度三个参数来完整描述,但在现代预测性维护和状态监测领域,加速度传感器(加速度计)占据了绝对主导地位,原因如下:宽广的频率范围:机械设备的早期故障(如轴承
    的头像 发表于 09-12 12:02 1124次阅读
    为什么在振动分析中<b class='flag-5'>加速度计</b>最常用?

    超高精度MEMS加速度计能否撼动石英加速度计的市场地位?

    在惯性传感技术飞速发展的今天,ER-MA-6 MEMS加速度计以其突破性的技术指标,正在挑战传统石英加速度计的市场地位。这款采用先进微机电系统技术打造的高精度传感器,不仅继承了MEMS器件固有
    的头像 发表于 08-28 15:21 827次阅读
    超高精度MEMS<b class='flag-5'>加速度计</b>能否撼动石英<b class='flag-5'>加速度计</b>的市场地位?

    航空航天对石英加速度计的要求?

    在航空航天这一对精度与可靠性要求近乎极致的领域,石英加速度计不仅是测量的工具,更是飞行安全、导航精度和任务成功的核心保障。它如同飞行器的“精密感官”,必须在地面、高空乃至太空的极端环境下,瞬间捕捉
    的头像 发表于 08-21 15:56 1085次阅读
    航空航天对石英<b class='flag-5'>加速度计</b>的要求?