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

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

3天内不再提示

如何使用Arduino Nano构建一个手势控制的电梯原型

科技观察员 来源:circuitdigest 作者:Ashish Choudhary 2022-08-08 16:53 次阅读

在新冠病毒大流行的这段时间,电梯已成为每个人都触摸相同按钮的高风险场所。在许多地方,人们发现了防止接触电梯按钮的技巧,例如使用抽纸、牙签或卫生纸来按下电梯按钮。

因此,为了延续我们之前的 Corona 安全项目,如 自动消毒机、非接触式温度监测和社交距离检测器,我们将在这里使用Arduino Nano构建一个手势控制的电梯原型。

这款非接触式电梯使用 Arduino Nano、APDS9960 手势传感器OLED 显示模块。使用这个基于手势的控制面板,您可以通过手势轻松控制您的 Lift。APDS9960 传感器用于读取手势。UP和DOWN手势用于设置楼层号,左侧手势关闭电梯门并根据楼层号移动电梯,右侧手势用于开门。

所需组件

Arduino纳米

OLED显示模块

APDS9960 RGB & 手势传感器

面包板

跳线

APDS9960 RGB & 手势传感器

APDS9960 RGB 和手势检测模块是一款小型分线板,配有内置 APDS-9960 传感器、UV 和 IR 阻挡滤光片、四个对不同方向敏感的独立二极管以及 I2C 兼容接口。该传感器可用于环境光和颜色测量、接近检测和非接触式手势感应。它的手势检测范围为 10 到 20 厘米,可用于控制微控制器机器人和许多其他项目。

pYYBAGLwziCAYdftAAOvngC9cOE434.png

特征:

工作电压:2.4V 至 3.6V

操作范围:4-8 英寸(10-20 厘米)。

I2C 接口(I2C 地址:0x39)。

环境光和 RGB 颜色感应、接近

光学模块中的传感和手势检测

I2C 总线快速模式兼容接口,数据速率高达 400 kHz。

电路原理

下面给出了使用 APDS9960 的非接触式电梯的电路图。

poYBAGLwzheAKhmrAAGvC5XUUSE248.png

我们正在将 Arduino Nano 与 APDS9960 传感器和 OLED 显示器连接起来。APDS9960 Sensor 和 OLED Display 的 VCC 和 GND 引脚连接到 Arduino 的 3.3V 和 GND。而 APDS9960 Sensor 和 OLED Display 的 SCL 和 SDA 引脚分别连接到 Arduino 的 A5 和 A4 引脚。

poYBAGLwzhKAXmaXAAANrDDMOK4176.png

这是使用 Arduino 的手势控制电梯的完整设置的外观:

poYBAGLwzg6AQj29AAUGBpH2HO8348.png

代码说明

使用 APDS9960 的非接触式电梯的完整代码在页面末尾给出。在这里,我们将解释代码的一些重要部分。在这个程序中,我们将使用 APDS9960 和Adafruit_SH1106 库。可以从 Arduino IDE 下载 APDS9960 库。要下载库,请转到Sketch > Library Manager > Search,然后输入Arduino APDS9960。而Adafruit_SH1106 库可以从这里下载。

因此,像往常一样通过包含所有必需的库来启动代码。Adafruit_SH1106.h是原始 Adafruit 库的修改版本。

#include 
#include 
#include 
#include 

在接下来的几行中,定义变量以存储用户想要去的当前楼层和楼层号。

整数楼层数=0;
诠释当前地板=0;

之后,输入向上箭头、向下箭头、开门和关门图片的位图。可以使用Image2cpp 之类的转换器生成图像的 HEX 代码。要了解有关如何使用Image2cpp 的更多信息,请遵循此Arduino 二维码生成器教程

const unsigned char up [] PROGMEM = {
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,…………………………………………………… …………………………………………..
};
const unsigned char down [] PROGMEM = {
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,…………………………………………………… …………………………………………..
};
const unsigned char dooropen [] PROGMEM = {
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xc0, 0x1f, 0xff, 0xff, 0xe0, ,……………………………………………… ………………………………………………..
};

在setup()函数中,以 9600 的波特率初始化串行监视器以进行调试。然后在接下来的几行中,使用begin()方法初始化 OLED 显示器和 APDS9960 传感器,如下所示:

序列号.开始(9600);
  如果(!APDS.begin()){
    Serial.println("初始化 APDS9960 传感器时出错!");
  }
Serial.println("检测手势...");
  display.begin(SH1106_SWITCHCAPVCC, 0x3C);

初始化显示器和传感器后,使用clearDisplay()方法清除显示缓冲区,并使用display.setTextSize()和display.setTextColor()方法设置字体大小和颜色。

  display.setTextSize(2);
  display.setTextColor(白色);
  display.clearDisplay();
  显示.显示();

在void loop()内部,不断检查是否做出任何手势。如果是,则读取手势值并检查它是哪个手势(上、下、右、左)并在串行监视器上打印相应的读数。UP 和 DOWN 手势用于设置用户想去的楼层。左手势是关闭电梯门并根据楼层号移动电梯,而右手势用于开门。

如果(APDS.gestureAvailable()){
    int 手势 = APDS.readGesture();
    切换(手势){
      案例 GESTURE_UP:
        Serial.println("检测到向上手势");
        display.clearDisplay();
        楼数++;
        首页1();
        休息;
      案例 GESTURE_DOWN:
        Serial.println("检测到向下手势");
        display.clearDisplay();
        地板号码——;
        首页1();
        休息;
      案例 GESTURE_LEFT:
         Serial.println("检测到左手势");
         display.clearDisplay();
         开始();
         休息;
     案例 GESTURE_RIGHT:
        Serial.println("检测到正确的手势");
        display.clearDisplay();
        首页1();
        休息;
        默认:
        休息;
    }

home1()函数用于绘制电梯的主页显示。这包括向上箭头、向下箭头、开门、关门标志和当前楼层号。drawBitmap()函数用于在 OLED 显示器上绘制图像。drawBitmap()函数的语法如下:

drawBitmap(int16_t x, int16_t y, 位图, int16_t w, int16_t h, colour);

在哪里:

int16_t x, int16_t y是OLED显示屏的X和Y坐标

位图是位图的名称

int16_t w, int16_t h是图像的高度和重量。

无效的 home1()
{
  display.setCursor(101,23);
  display.println(floornum);
  display.drawBitmap(23, 0, uparrow, 40, 18, WHITE);
  display.drawBitmap(26, 46, downarrow, 40, 18, WHITE);
  display.drawBitmap(0, 15, dooropen, 29, 30, WHITE);
  display.drawBitmap(60, 15, closedoor, 29, 30, WHITE);
  显示.显示();
}

start()函数用于向上或向下移动电梯。为此,将当前楼层号与用户想去的楼层号进行比较。如果楼层号大于当前楼层号。如果楼层号小于当前楼层号,则电梯将向上移动。然后电梯将向下移动。当两个当前楼层都没有时,电梯将停止。和楼层号。是相同的。

无效的开始()
{
      而(地板编号>当前地板){
      Serial.println("向上");
      当前楼层++;
      display.drawBitmap(0, 0, up, 100, 64, WHITE);
      display.setCursor(101,23);
      display.println(currentfloor);
      显示.显示();
      display.clearDisplay();
      延迟(2000);
       }
   而(地板编号<当前地板){
      Serial.println("往下走");
      当前楼层——;
      display.drawBitmap(0, 0, down, 100, 64, WHITE);
      display.setCursor(101,23);
      display.println(currentfloor);
      显示.显示();
      display.clearDisplay();
      延迟(2000);
       }
   如果(地板编号== 当前地板){
        Serial.println("到达");
        display.clearDisplay();
        首页1();
        Serial.print(当前楼层);
      }
  }

测试手势控制的非接触式升降机

硬件和代码准备就绪后,将 Arduino Nano 连接到笔记本电脑并上传下面给出的完整代码。如您所见,默认情况下 OLED 将显示电梯用户界面。

pYYBAGLwzgSADGv8AAF3bxpwxOQ749.png

现在向上或向下挥动你的手,如下面的视频所示,设置你想去的地板。然后做出确认电梯到该楼层的向左手势。如果您想停止电梯,请用手做出正确的手势。

#include

#include

#include

#include

#define OLED_RESET -1

Adafruit_SH1106 显示器(OLED_RESET);

整数楼层数=0;

诠释当前地板=0;

//在这里粘贴你的位图

const unsigned char up [] PROGMEM = {

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x03, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x0f, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xf0,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xfc, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x03, 0xff, 0xc7, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x07, 0xff, 0x81, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xfe, 0x00,

0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xfc, 0x00, 0x3f, 0xf8, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xf0, 0x00, 0x1f, 0xfe, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x01, 0xff, 0xe0, 0x00, 0x07, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x07, 0xff, 0x80, 0x00, 0x03, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0x00,

0x00, 0x00, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xfc, 0x00, 0x00, 0x00, 0x7f,

0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xf8, 0x00, 0x00, 0x00, 0x1f, 0xfc, 0x00, 0x00,

0x00, 0x00, 0x00, 0x01, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x0f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,

0x03, 0xff, 0xc0, 0x00, 0x38, 0x00, 0x03, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0x00,

0x00, 0x7c, 0x00, 0x01, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xfe, 0x00, 0x01, 0xff, 0x00,

0x00, 0x7f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xf8, 0x00, 0x03, 0xff, 0x80, 0x00, 0x3f, 0xfc,

0x00, 0x00, 0x00, 0x00, 0xff, 0xf0, 0x00, 0x0f, 0xff, 0xe0, 0x00, 0x0f, 0xfe, 0x00, 0x00, 0x00,

0x03, 0xff, 0xc0, 0x00, 0x1f, 0xff, 0xf0, 0x00, 0x07, 0xff, 0x80, 0x00, 0x00, 0x07, 0xff, 0x80,

0x00, 0x7f, 0xff, 0xfc, 0x00, 0x01, 0xff, 0xc0, 0x00, 0x00, 0x1f, 0xfe, 0x00, 0x00, 0xff, 0xff,

0xfe, 0x00, 0x00, 0xff, 0xf0, 0x00, 0x00, 0x3f, 0xfc, 0x00, 0x03, 0xff, 0xc7, 0xff, 0x80, 0x00,

0x3f, 0xf8, 0x00, 0x00, 0xff, 0xf0, 0x00, 0x07, 0xff, 0x81, 0xff, 0xc0, 0x00, 0x1f, 0xfe, 0x00,

0x01, 0xff, 0xe0, 0x00, 0x1f, 0xfe, 0x00, 0xff, 0xf0, 0x00, 0x07, 0xff, 0x00, 0x07, 0xff, 0x80,

0x00, 0x3f, 0xfc, 0x00, 0x3f, 0xf8, 0x00, 0x03, 0xff, 0xc0, 0x0f, 0xfe, 0x00, 0x00, 0xff, 0xf0,

0x00, 0x1f, 0xfe, 0x00, 0x00, 0xff, 0xe0, 0x3f, 0xfc, 0x00, 0x01, 0xff, 0xe0, 0x00, 0x07, 0xff,

0x00, 0x00, 0x7f, 0xf0, 0x1f, 0xf0, 0x00, 0x07, 0xff, 0x80, 0x00, 0x03, 0xff, 0xc0, 0x00, 0x1f,

0xf0, 0x0f, 0xe0, 0x00, 0x0f, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe0, 0x00, 0x0f, 0xe0, 0x03, 0xc0,

0x00, 0x3f, 0xfc, 0x00, 0x00, 0x00, 0x7f, 0xf8, 0x00, 0x03, 0x80, 0x01, 0x00, 0x00, 0x7f, 0xf8,

0x00, 0x00, 0x00, 0x1f, 0xfc, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0xff, 0xe0, 0x00, 0x00, 0x00,

0x0f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x03, 0xff, 0x80,

0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xe0, 0x00, 0x00, 0x00,

0x00, 0x1f, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xf8,

0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xfc, 0x00, 0x00, 0x00, 0x00, 0xff, 0xf0, 0x00, 0x00, 0x00,

0x00, 0x00, 0x0f, 0xfe, 0x00, 0x00, 0x00, 0x03, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07,

0xff, 0x80, 0x00, 0x00, 0x07, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xc0, 0x00,

0x00, 0x1f, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xf0, 0x00, 0x00, 0x3f, 0xfc,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xf8, 0x00, 0x00, 0xff, 0xf0, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x1f, 0xfe, 0x00, 0x01, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x07, 0xff, 0x00, 0x07, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff,

0xc0, 0x0f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xe0, 0x3f, 0xfc,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xf0, 0x1f, 0xf0, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xf0, 0x0f, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x0f, 0xe0, 0x03, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x03, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00

};

const unsigned char down [] PROGMEM = {

// '向下, 105x64px

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0xe0,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x03, 0xf8, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xf0, 0x0f, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x07, 0xf0, 0x0f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x1f, 0xf0, 0x03, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xf0, 0x01,

0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xf0, 0x00, 0x7f, 0xf0, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xc0, 0x00, 0x3f, 0xfc, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x07, 0xff, 0x80, 0x00, 0x0f, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x1f, 0xfe, 0x00, 0x00, 0x07, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xfc, 0x00,

0x00, 0x01, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xf0, 0x00, 0x00, 0x00, 0xff,

0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x3f, 0xf8, 0x00, 0x00,

0x00, 0x00, 0x00, 0x07, 0xff, 0x80, 0x00, 0x00, 0x00, 0x1f, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00,

0x0f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xfc, 0x00,

0x00, 0x00, 0x00, 0x03, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xf8, 0x00, 0x00, 0x00, 0x00,

0x00, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x01, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xf8,

0x00, 0x00, 0x00, 0x03, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x40, 0x00, 0x1f, 0xfc, 0x00, 0x00, 0x00,

0x0f, 0xff, 0x00, 0x00, 0x40, 0x00, 0xe0, 0x00, 0x0f, 0xff, 0x00, 0x00, 0x00, 0x1f, 0xfe, 0x00,

0x01, 0xe0, 0x03, 0xf8, 0x00, 0x03, 0xff, 0x80, 0x00, 0x00, 0x7f, 0xf8, 0x00, 0x03, 0xf0, 0x0f,

0xfc, 0x00, 0x01, 0xff, 0xe0, 0x00, 0x00, 0xff, 0xf0, 0x00, 0x07, 0xf0, 0x0f, 0xff, 0x00, 0x00,

0x7f, 0xf0, 0x00, 0x03, 0xff, 0xc0, 0x00, 0x1f, 0xf0, 0x03, 0xff, 0x80, 0x00, 0x3f, 0xfc, 0x00,

0x07, 0xff, 0x80, 0x00, 0x3f, 0xf0, 0x01, 0xff, 0xe0, 0x00, 0x0f, 0xfe, 0x00, 0x1f, 0xfe, 0x00,

0x00, 0xff, 0xf0, 0x00, 0x7f, 0xf0, 0x00, 0x07, 0xff, 0x80, 0x3f, 0xfc, 0x00, 0x03, 0xff, 0xc0,

0x00, 0x3f, 0xfc, 0x00, 0x01, 0xff, 0xc0, 0xff, 0xf0, 0x00, 0x07, 0xff, 0x80, 0x00, 0x0f, 0xfe,

0x00, 0x00, 0xff, 0xf1, 0xff, 0xe0, 0x00, 0x1f, 0xfe, 0x00, 0x00, 0x07, 0xff, 0x80, 0x00, 0x3f,

0xff, 0xff, 0x80, 0x00, 0x3f, 0xfc, 0x00, 0x00, 0x01, 0xff, 0xc0, 0x00, 0x1f, 0xff, 0xff, 0x00,

0x00, 0xff, 0xf0, 0x00, 0x00, 0x00, 0xff, 0xf0, 0x00, 0x07, 0xff, 0xfc, 0x00, 0x01, 0xff, 0xe0,

0x00, 0x00, 0x00, 0x3f, 0xf8, 0x00, 0x03, 0xff, 0xf8, 0x00, 0x07, 0xff, 0x80, 0x00, 0x00, 0x00,

0x1f, 0xfe, 0x00, 0x00, 0xff, 0xe0, 0x00, 0x0f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0x00,

0x00, 0x7f, 0xc0, 0x00, 0x3f, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xc0, 0x00, 0x1f, 0x00,

0x00, 0x7f, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xe0, 0x00, 0x0e, 0x00, 0x01, 0xff, 0xe0,

0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xf8, 0x00, 0x00, 0x00, 0x03, 0xff, 0xc0, 0x00, 0x00, 0x00,

0x00, 0x00, 0x1f, 0xfc, 0x00, 0x00, 0x00, 0x0f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f,

0xff, 0x00, 0x00, 0x00, 0x1f, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0x80, 0x00,

0x00, 0x7f, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xe0, 0x00, 0x00, 0xff, 0xf0,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xf0, 0x00, 0x03, 0xff, 0xc0, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x3f, 0xfc, 0x00, 0x07, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x0f, 0xfe, 0x00, 0x1f, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff,

0x80, 0x3f, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xc0, 0xff, 0xf0,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xf1, 0xff, 0xe0, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x07, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xf8,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xe0, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00

};

const unsigned char uparrow [] PROGMEM = {

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x80, 0x00, 0x00, 0x00,

0xff, 0xc0, 0x00, 0x00, 0x01, 0xff, 0xf0, 0x00, 0x00, 0x03, 0xff, 0xf8, 0x00, 0x00, 0x07, 0xff,

0xfc, 0x00, 0x00, 0x1f, 0xff, 0xff, 0x00, 0x00, 0x3f, 0xff, 0xff, 0x80, 0x00, 0xff, 0xff, 0xff,

0xc0, 0x01, 0xff, 0xff, 0xff, 0xf0, 0x03, 0xff, 0xff, 0xff, 0xf8, 0x03, 0xff, 0xff, 0xff, 0xf8,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00

};

const unsigned char downarrow [] PROGMEM = {

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xc0, 0x1f,

0xff, 0xff, 0xff, 0xc0, 0x0f, 0xff, 0xff, 0xff, 0x80, 0x03, 0xff, 0xff, 0xff, 0x00, 0x01, 0xff,

0xff, 0xfc, 0x00, 0x00, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x3f, 0xff, 0xe0, 0x00, 0x00, 0x1f, 0xff,

0xc0, 0x00, 0x00, 0x0f, 0xff, 0x80, 0x00, 0x00, 0x03, 0xff, 0x00, 0x00, 0x00, 0x01, 0xfc, 0x00,

0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00

};

const unsigned char dooropen [] PROGMEM = {

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xc0, 0x1f, 0xff, 0xff, 0xe0,

0x3f, 0xff, 0xff, 0xe0, 0x3f, 0xff, 0xff, 0xf0, 0x38, 0x00, 0x00, 0xf0, 0x38, 0x00, 0x00, 0xf0,

0x38, 0x00, 0x00, 0xf0, 0x38, 0x04, 0x80, 0xf0, 0x38, 0x1c, 0xc0, 0xf0, 0x38, 0x3c, 0xf0, 0xf0,

0x38, 0x7c, 0xf8, 0xf0, 0x39, 0xfc, 0xfc, 0xf0, 0x3b, 0xfc, 0xfe, 0xf0, 0x3b, 0xfc, 0xfe, 0xf0,

0x38, 0xfc, 0xfc, 0xf0, 0x38, 0x7c, 0xf8, 0xf0, 0x38, 0x3c, 0xf0, 0xf0, 0x38, 0x1c, 0xc0, 0xf0,

0x38, 0x04, 0x80, 0xf0, 0x38, 0x00, 0x00, 0xf0, 0x38, 0x00, 0x00, 0xf0, 0x38, 0x00, 0x00, 0xf0,

0x3c, 0x00, 0x00, 0xf0, 0x3f, 0xff, 0xff, 0xe0, 0x1f, 0xff, 0xff, 0xe0, 0x1f, 0xff, 0xff, 0xc0,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00

};

const unsigned char closedoor [] PROGMEM = {

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x0f, 0xff, 0xff, 0xc0, 0x0f, 0xff, 0xff, 0xc0, 0x08, 0x00, 0x00, 0x40, 0x0a, 0x00, 0x03, 0x40,

0x0b, 0x80, 0x07, 0x40, 0x0b, 0xc0, 0x0f, 0x40, 0x0b, 0xe0, 0x1f, 0x40, 0x0b, 0xf0, 0x3f, 0x40,

0x0b, 0xf8, 0x7f, 0x40, 0x0b, 0xfc, 0xff, 0x40, 0x0b, 0xff, 0xff, 0x40, 0x0b, 0xff, 0xff, 0x40,

0x0b, 0xfe, 0xff, 0x40, 0x0b, 0xf8, 0x7f, 0x40, 0x0b, 0xf0, 0x3f, 0x40, 0x0b, 0xe0, 0x1f, 0x40,

0x0b, 0xc0, 0x0f, 0x40, 0x0b, 0x80, 0x07, 0x40, 0x0b, 0x00, 0x03, 0x40, 0x08, 0x00, 0x01, 0x40,

0x0f, 0xff, 0xff, 0xc0, 0x0f, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00

};

无效设置(){

序列号.开始(9600);

如果(!APDS.begin()){

Serial.println("初始化 APDS9960 传感器时出错!");

}

Serial.println("检测手势...");

display.begin(SH1106_SWITCHCAPVCC, 0x3C);

display.setTextSize(2);

display.setTextColor(白色);

display.clearDisplay();

显示.显示();

首页1();

}

无效循环(){

display.clearDisplay();

如果(APDS.gestureAvailable()){

int 手势 = APDS.readGesture();

切换(手势){

案例 GESTURE_UP:

Serial.println("检测到向上手势");

display.clearDisplay();

楼数++;

首页1();

休息;

案例 GESTURE_DOWN:

Serial.println("检测到向下手势");

display.clearDisplay();

地板号码——;

首页1();

休息;

案例 GESTURE_LEFT:

Serial.println("检测到左手势");

display.clearDisplay();

开始();

休息;

案例 GESTURE_RIGHT:

Serial.println("检测到正确的手势");

display.clearDisplay();

首页1();

休息;

默认:

休息;

}

}

}

无效的 home1()

{

display.setCursor(101,23);

display.println(floornum);

display.drawBitmap(23, 0, uparrow, 40, 18, WHITE);

display.drawBitmap(26, 46, downarrow, 40, 18, WHITE);

display.drawBitmap(0, 15, dooropen, 29, 30, WHITE);

display.drawBitmap(60, 15, closedoor, 29, 30, WHITE);

显示.显示();

}

无效的开始()

{

而(地板编号>当前地板){

Serial.println("向上");

当前楼层++;

display.drawBitmap(0, 0, up, 100, 64, WHITE);

display.setCursor(101,23);

display.println(currentfloor);

显示.显示();

display.clearDisplay();

延迟(2000);

}

而(地板编号<当前地板){

Serial.println("往下走");

当前楼层——;

display.drawBitmap(0, 0, down, 100, 64, WHITE);

display.setCursor(101,23);

display.println(currentfloor);

显示.显示();

display.clearDisplay();

延迟(2000);

}

如果(地板编号== 当前地板){

Serial.println("到达");

display.clearDisplay();

首页1();

Serial.print(当前楼层);

}

}

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

    关注

    0

    文章

    63

    浏览量

    14214
  • Arduino
    +关注

    关注

    184

    文章

    6421

    浏览量

    184568
  • 手势控制
    +关注

    关注

    4

    文章

    44

    浏览量

    21486
收藏 人收藏

    评论

    相关推荐

    Arduino手势控制手套源代码共享,隔空操控电脑

    很有趣的帖子和资料手势控制手套的核心是Arduino。只要轻轻移动手指,你就可以用熟悉的T9键盘隔空打字了。你可以将它作为研发基础,为
    发表于 09-23 15:12

    请问怎样去设计种基于Arduino Nano的智能门禁控制系统

    基于Arduino Nano的智能门禁控制系统的硬件是怎样构成的?基于Arduino Nano的智能门禁
    发表于 08-23 07:15

    如何构建Arduino官方开发环境

    本系列教程将向大家讲述,在自己的计算机上构建完善的嵌入式系统开发环境的方法。本文将向大家讲述构建Arduino官方开发环境的方法。Arduino简介:
    发表于 12-24 06:44

    基于Arduino设计的手势控制机器人

    描述如何在家制作 DIY Arduino 手势控制机器人接收器(坦克)所需的零件:1) 机器人坦克底盘 2) Arduino Nano V3
    发表于 06-20 09:21

    基于Arduino创建手势控制

    描述如何制作手势控制机器人|| #MadeWithArduino(发射器)嘿,欢迎回到新项目。所以今天我们将学习使用Arduino创建
    发表于 06-22 06:55

    arduino手势控制小车

    描述arduino手势控制
    发表于 08-09 06:51

    带有Arduino NANO V3的PLC项目

    描述PLC Arduino NANO 可编程梯形图该项目是带有 Arduino NANO V
    发表于 08-23 06:54

    基于arduino设计的手势控制小车

    基于arduino手势控制小车
    发表于 09-25 06:06

    dfrobot Arduino Nano控制板介绍

    DFRduino Nano(兼容Arduino NANO)是一款开源的控制板,非常适合爱好电子制作的朋友制作互动作品,但对于一些不熟悉电子技术的人,要在
    的头像 发表于 12-26 09:50 5004次阅读
    dfrobot <b class='flag-5'>Arduino</b> <b class='flag-5'>Nano</b><b class='flag-5'>控制</b>板介绍

    如何使用Arduino Nano控制红绿灯

    本文将介绍如何基于一个简单PCB洞洞板制作红绿灯,并通过Arduino Nano R3对它进行控制
    的头像 发表于 04-08 15:19 4251次阅读
    如何使用<b class='flag-5'>Arduino</b> <b class='flag-5'>Nano</b><b class='flag-5'>控制</b>红绿灯

    arduino手势控制

    电子发烧友网站提供《arduino手势控制车.zip》资料免费下载
    发表于 07-26 10:29 1次下载
    <b class='flag-5'>arduino</b><b class='flag-5'>手势</b><b class='flag-5'>控制</b>车

    我自己的Arduino Nano控制器板

    电子发烧友网站提供《我自己的Arduino Nano控制器板.zip》资料免费下载
    发表于 10-26 11:01 2次下载
    我自己的<b class='flag-5'>Arduino</b> <b class='flag-5'>Nano</b>微<b class='flag-5'>控制</b>器板

    Arduino手势控制LED亮度

    电子发烧友网站提供《Arduino手势控制LED亮度.zip》资料免费下载
    发表于 01-31 14:47 1次下载
    <b class='flag-5'>Arduino</b><b class='flag-5'>手势</b><b class='flag-5'>控制</b>LED亮度

    Arduino Nano控制的激光测量

    电子发烧友网站提供《Arduino Nano控制的激光测量.zip》资料免费下载
    发表于 06-19 16:33 0次下载
    <b class='flag-5'>Arduino</b> <b class='flag-5'>Nano</b><b class='flag-5'>控制</b>的激光测量

    使用Arduino Nano 33构建嵌入式语音识别应用程序

    电子发烧友网站提供《使用Arduino Nano 33构建嵌入式语音识别应用程序.zip》资料免费下载
    发表于 06-28 14:50 0次下载
    使用<b class='flag-5'>Arduino</b> <b class='flag-5'>Nano</b> 33<b class='flag-5'>构建</b>嵌入式语音识别应用程序