0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何使用Arduino Nano構(gòu)建一個(gè)手勢(shì)控制的電梯原型

科技觀察員 ? 來源:circuitdigest ? 作者:Ashish Choudhary ? 2022-08-08 16:53 ? 次閱讀

在新冠病毒大流行的這段時(shí)間,電梯已成為每個(gè)人都觸摸相同按鈕的高風(fēng)險(xiǎn)場(chǎng)所。在許多地方,人們發(fā)現(xiàn)了防止接觸電梯按鈕的技巧,例如使用抽紙、牙簽或衛(wèi)生紙來按下電梯按鈕。

因此,為了延續(xù)我們之前的 Corona 安全項(xiàng)目,如 自動(dòng)消毒機(jī)、非接觸式溫度監(jiān)測(cè)和社交距離檢測(cè)器,我們將在這里使用Arduino Nano構(gòu)建一個(gè)手勢(shì)控制的電梯原型。

這款非接觸式電梯使用 Arduino Nano、APDS9960 手勢(shì)傳感器OLED 顯示模塊。使用這個(gè)基于手勢(shì)的控制面板,您可以通過手勢(shì)輕松控制您的 Lift。APDS9960 傳感器用于讀取手勢(shì)。UP和DOWN手勢(shì)用于設(shè)置樓層號(hào),左側(cè)手勢(shì)關(guān)閉電梯門并根據(jù)樓層號(hào)移動(dòng)電梯,右側(cè)手勢(shì)用于開門。

所需組件

Arduino納米

OLED顯示模塊

APDS9960 RGB & 手勢(shì)傳感器

面包板

跳線

APDS9960 RGB & 手勢(shì)傳感器

APDS9960 RGB 和手勢(shì)檢測(cè)模塊是一款小型分線板,配有內(nèi)置 APDS-9960 傳感器、UV 和 IR 阻擋濾光片、四個(gè)對(duì)不同方向敏感的獨(dú)立二極管以及 I2C 兼容接口。該傳感器可用于環(huán)境光和顏色測(cè)量、接近檢測(cè)和非接觸式手勢(shì)感應(yīng)。它的手勢(shì)檢測(cè)范圍為 10 到 20 厘米,可用于控制微控制器、機(jī)器人和許多其他項(xiàng)目。

pYYBAGLwziCAYdftAAOvngC9cOE434.png

特征:

工作電壓:2.4V 至 3.6V

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

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

環(huán)境光和 RGB 顏色感應(yīng)、接近

光學(xué)模塊中的傳感和手勢(shì)檢測(cè)

I2C 總線快速模式兼容接口,數(shù)據(jù)速率高達(dá) 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 的手勢(shì)控制電梯的完整設(shè)置的外觀:

poYBAGLwzg6AQj29AAUGBpH2HO8348.png

代碼說明

使用 APDS9960 的非接觸式電梯的完整代碼在頁(yè)面末尾給出。在這里,我們將解釋代碼的一些重要部分。在這個(gè)程序中,我們將使用 APDS9960 和Adafruit_SH1106 庫(kù)??梢詮?Arduino IDE 下載 APDS9960 庫(kù)。要下載庫(kù),請(qǐng)轉(zhuǎn)到Sketch > Library Manager > Search,然后輸入Arduino APDS9960。而Adafruit_SH1106 庫(kù)可以從這里下載。

因此,像往常一樣通過包含所有必需的庫(kù)來啟動(dòng)代碼。Adafruit_SH1106.h是原始 Adafruit 庫(kù)的修改版本。

#include 
#include 
#include 
#include 

在接下來的幾行中,定義變量以存儲(chǔ)用戶想要去的當(dāng)前樓層和樓層號(hào)。

整數(shù)樓層數(shù)=0;
詮釋當(dāng)前地板=0;

之后,輸入向上箭頭、向下箭頭、開門和關(guān)門圖片的位圖。可以使用Image2cpp 之類的轉(zhuǎn)換器生成圖像的 HEX 代碼。要了解有關(guān)如何使用Image2cpp 的更多信息,請(qǐng)遵循此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()函數(shù)中,以 9600 的波特率初始化串行監(jiān)視器以進(jìn)行調(diào)試。然后在接下來的幾行中,使用begin()方法初始化 OLED 顯示器和 APDS9960 傳感器,如下所示:

序列號(hào).開始(9600);
  如果(!APDS.begin()){
    Serial.println("初始化 APDS9960 傳感器時(shí)出錯(cuò)!");
  }
Serial.println("檢測(cè)手勢(shì)...");
  display.begin(SH1106_SWITCHCAPVCC, 0x3C);

初始化顯示器和傳感器后,使用clearDisplay()方法清除顯示緩沖區(qū),并使用display.setTextSize()和display.setTextColor()方法設(shè)置字體大小和顏色。

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

在void loop()內(nèi)部,不斷檢查是否做出任何手勢(shì)。如果是,則讀取手勢(shì)值并檢查它是哪個(gè)手勢(shì)(上、下、右、左)并在串行監(jiān)視器上打印相應(yīng)的讀數(shù)。UP 和 DOWN 手勢(shì)用于設(shè)置用戶想去的樓層。左手勢(shì)是關(guān)閉電梯門并根據(jù)樓層號(hào)移動(dòng)電梯,而右手勢(shì)用于開門。

如果(APDS.gestureAvailable()){
    int 手勢(shì) = APDS.readGesture();
    切換(手勢(shì)){
      案例 GESTURE_UP:
        Serial.println("檢測(cè)到向上手勢(shì)");
        display.clearDisplay();
        樓數(shù)++;
        首頁(yè)1();
        休息;
      案例 GESTURE_DOWN:
        Serial.println("檢測(cè)到向下手勢(shì)");
        display.clearDisplay();
        地板號(hào)碼——;
        首頁(yè)1();
        休息;
      案例 GESTURE_LEFT:
         Serial.println("檢測(cè)到左手勢(shì)");
         display.clearDisplay();
         開始();
         休息;
     案例 GESTURE_RIGHT:
        Serial.println("檢測(cè)到正確的手勢(shì)");
        display.clearDisplay();
        首頁(yè)1();
        休息;
        默認(rèn):
        休息;
    }

home1()函數(shù)用于繪制電梯的主頁(yè)顯示。這包括向上箭頭、向下箭頭、開門、關(guān)門標(biāo)志和當(dāng)前樓層號(hào)。drawBitmap()函數(shù)用于在 OLED 顯示器上繪制圖像。drawBitmap()函數(shù)的語(yǔ)法如下:

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

在哪里:

int16_t x, int16_t y是OLED顯示屏的X和Y坐標(biāo)

位圖是位圖的名稱

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()函數(shù)用于向上或向下移動(dòng)電梯。為此,將當(dāng)前樓層號(hào)與用戶想去的樓層號(hào)進(jìn)行比較。如果樓層號(hào)大于當(dāng)前樓層號(hào)。如果樓層號(hào)小于當(dāng)前樓層號(hào),則電梯將向上移動(dòng)。然后電梯將向下移動(dòng)。當(dāng)兩個(gè)當(dāng)前樓層都沒有時(shí),電梯將停止。和樓層號(hào)。是相同的。

無效的開始()
{
      而(地板編號(hào)>當(dāng)前地板){
      Serial.println("向上");
      當(dāng)前樓層++;
      display.drawBitmap(0, 0, up, 100, 64, WHITE);
      display.setCursor(101,23);
      display.println(currentfloor);
      顯示.顯示();
      display.clearDisplay();
      延遲(2000);
       }
   而(地板編號(hào)<當(dāng)前地板){
      Serial.println("往下走");
      當(dāng)前樓層——;
      display.drawBitmap(0, 0, down, 100, 64, WHITE);
      display.setCursor(101,23);
      display.println(currentfloor);
      顯示.顯示();
      display.clearDisplay();
      延遲(2000);
       }
   如果(地板編號(hào)== 當(dāng)前地板){
        Serial.println("到達(dá)");
        display.clearDisplay();
        首頁(yè)1();
        Serial.print(當(dāng)前樓層);
      }
  }

測(cè)試手勢(shì)控制的非接觸式升降機(jī)

硬件和代碼準(zhǔn)備就緒后,將 Arduino Nano 連接到筆記本電腦并上傳下面給出的完整代碼。如您所見,默認(rèn)情況下 OLED 將顯示電梯用戶界面。

pYYBAGLwzgSADGv8AAF3bxpwxOQ749.png

現(xiàn)在向上或向下?lián)]動(dòng)你的手,如下面的視頻所示,設(shè)置你想去的地板。然后做出確認(rèn)電梯到該樓層的向左手勢(shì)。如果您想停止電梯,請(qǐng)用手做出正確的手勢(shì)。

#include

#include

#include

#include

#define OLED_RESET -1

Adafruit_SH1106 顯示器(OLED_RESET);

整數(shù)樓層數(shù)=0;

詮釋當(dāng)前地板=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

};

無效設(shè)置(){

序列號(hào).開始(9600);

如果(!APDS.begin()){

Serial.println("初始化 APDS9960 傳感器時(shí)出錯(cuò)!");

}

Serial.println("檢測(cè)手勢(shì)...");

display.begin(SH1106_SWITCHCAPVCC, 0x3C);

display.setTextSize(2);

display.setTextColor(白色);

display.clearDisplay();

顯示.顯示();

首頁(yè)1();

}

無效循環(huán)(){

display.clearDisplay();

如果(APDS.gestureAvailable()){

int 手勢(shì) = APDS.readGesture();

切換(手勢(shì)){

案例 GESTURE_UP:

Serial.println("檢測(cè)到向上手勢(shì)");

display.clearDisplay();

樓數(shù)++;

首頁(yè)1();

休息;

案例 GESTURE_DOWN:

Serial.println("檢測(cè)到向下手勢(shì)");

display.clearDisplay();

地板號(hào)碼——;

首頁(yè)1();

休息;

案例 GESTURE_LEFT:

Serial.println("檢測(cè)到左手勢(shì)");

display.clearDisplay();

開始();

休息;

案例 GESTURE_RIGHT:

Serial.println("檢測(cè)到正確的手勢(shì)");

display.clearDisplay();

首頁(yè)1();

休息;

默認(rèn):

休息;

}

}

}

無效的 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);

顯示.顯示();

}

無效的開始()

{

而(地板編號(hào)>當(dāng)前地板){

Serial.println("向上");

當(dāng)前樓層++;

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

display.setCursor(101,23);

display.println(currentfloor);

顯示.顯示();

display.clearDisplay();

延遲(2000);

}

而(地板編號(hào)<當(dāng)前地板){

Serial.println("往下走");

當(dāng)前樓層——;

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

display.setCursor(101,23);

display.println(currentfloor);

顯示.顯示();

display.clearDisplay();

延遲(2000);

}

如果(地板編號(hào)== 當(dāng)前地板){

Serial.println("到達(dá)");

display.clearDisplay();

首頁(yè)1();

Serial.print(當(dāng)前樓層);

}

}

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 非接觸式
    +關(guān)注

    關(guān)注

    0

    文章

    77

    瀏覽量

    14277
  • Arduino
    +關(guān)注

    關(guān)注

    188

    文章

    6472

    瀏覽量

    187317
  • 手勢(shì)控制
    +關(guān)注

    關(guān)注

    4

    文章

    44

    瀏覽量

    21759
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    如何使用Arduino Nano構(gòu)建個(gè)金屬探測(cè)器

    在這個(gè)項(xiàng)目中,我們將使用個(gè)線圈和電容器來檢測(cè)金屬。在這里,我們使用Arduino Nano構(gòu)建這個(gè)金屬探測(cè)器項(xiàng)目。對(duì)于所有電子愛好者來說
    的頭像 發(fā)表于 11-22 17:15 ?3682次閱讀
    如何使用<b class='flag-5'>Arduino</b> <b class='flag-5'>Nano</b><b class='flag-5'>構(gòu)建</b><b class='flag-5'>一</b><b class='flag-5'>個(gè)</b>金屬探測(cè)器

    Arduino手勢(shì)控制手套源代碼共享,隔空操控電腦

    轉(zhuǎn)個(gè)很有趣的帖子和資料手勢(shì)控制手套的核心是Arduino。只要輕輕移動(dòng)手指,你就可以用熟悉的T9鍵盤隔空打字了。你可以將它作為研發(fā)基礎(chǔ),為
    發(fā)表于 09-23 15:12

    如何構(gòu)建Arduino官方開發(fā)環(huán)境

    本系列教程將向大家講述,在自己的計(jì)算機(jī)上構(gòu)建完善的嵌入式系統(tǒng)開發(fā)環(huán)境的方法。本文將向大家講述構(gòu)建Arduino官方開發(fā)環(huán)境的方法。Arduino簡(jiǎn)介:
    發(fā)表于 12-24 06:44

    基于Arduino設(shè)計(jì)的手勢(shì)控制機(jī)器人

    描述如何在家制作 DIY Arduino 手勢(shì)控制機(jī)器人接收器(坦克)所需的零件:1) 機(jī)器人坦克底盤 2) Arduino Nano V3
    發(fā)表于 06-20 09:21

    基于Arduino創(chuàng)建個(gè)手勢(shì)控制

    描述如何制作手勢(shì)控制機(jī)器人|| #MadeWithArduino(發(fā)射器)嘿,歡迎回到個(gè)新項(xiàng)目。所以今天我們將學(xué)習(xí)使用Arduino創(chuàng)建
    發(fā)表于 06-22 06:55

    arduino手勢(shì)控制小車

    描述arduino手勢(shì)控制
    發(fā)表于 08-09 06:51

    基于arduino設(shè)計(jì)的手勢(shì)控制小車

    基于arduino手勢(shì)控制小車
    發(fā)表于 09-25 06:06

    dfrobot Arduino Nano控制板介紹

    DFRduino Nano(兼容Arduino NANO)是款開源的控制板,非常適合愛好電子制作的朋友制作互動(dòng)作品,但對(duì)于
    的頭像 發(fā)表于 12-26 09:50 ?5937次閱讀
    dfrobot <b class='flag-5'>Arduino</b> <b class='flag-5'>Nano</b><b class='flag-5'>控制</b>板介紹

    如何使用Arduino Leonardo和MPU6050制作個(gè)有線的手勢(shì)控制

    本文將向你展示如何使用Arduino Leonardo和MPU6050加速計(jì)/陀螺儀模塊來制作個(gè)類似于任天堂Wii控制器的手勢(shì)
    的頭像 發(fā)表于 04-03 17:02 ?2947次閱讀
    如何使用<b class='flag-5'>Arduino</b> Leonardo和MPU6050制作<b class='flag-5'>一</b><b class='flag-5'>個(gè)</b>有線的<b class='flag-5'>手勢(shì)</b><b class='flag-5'>控制</b>器

    如何使用Arduino Nano控制紅綠燈

    本文將介紹如何基于個(gè)簡(jiǎn)單PCB洞洞板制作紅綠燈,并通過Arduino Nano R3對(duì)它進(jìn)行控制。
    的頭像 發(fā)表于 04-08 15:19 ?5394次閱讀
    如何使用<b class='flag-5'>Arduino</b> <b class='flag-5'>Nano</b><b class='flag-5'>控制</b>紅綠燈

    arduino手勢(shì)控制

    電子發(fā)燒友網(wǎng)站提供《arduino手勢(shì)控制車.zip》資料免費(fèi)下載
    發(fā)表于 07-26 10:29 ?1次下載
    <b class='flag-5'>arduino</b><b class='flag-5'>手勢(shì)</b><b class='flag-5'>控制</b>車

    使用Open cv python(手勢(shì))和arduino控制Led

    電子發(fā)燒友網(wǎng)站提供《使用Open cv python(手勢(shì))和arduino控制Led.zip》資料免費(fèi)下載
    發(fā)表于 10-28 10:19 ?6次下載
    使用Open cv python(<b class='flag-5'>手勢(shì)</b>)和<b class='flag-5'>arduino</b><b class='flag-5'>控制</b>Led

    Arduino Nano構(gòu)建個(gè)SN76489 USB MIDI合成器

    電子發(fā)燒友網(wǎng)站提供《用Arduino Nano構(gòu)建個(gè)SN76489 USB MIDI合成器.zip》資料免費(fèi)下載
    發(fā)表于 11-10 14:24 ?0次下載
    用<b class='flag-5'>Arduino</b> <b class='flag-5'>Nano</b><b class='flag-5'>構(gòu)建</b><b class='flag-5'>一</b><b class='flag-5'>個(gè)</b>SN76489 USB MIDI合成器

    Arduino手勢(shì)控制LED亮度

    電子發(fā)燒友網(wǎng)站提供《Arduino手勢(shì)控制LED亮度.zip》資料免費(fèi)下載
    發(fā)表于 01-31 14:47 ?1次下載
    <b class='flag-5'>Arduino</b><b class='flag-5'>手勢(shì)</b><b class='flag-5'>控制</b>LED亮度

    Arduino Nano控制的激光測(cè)量

    電子發(fā)燒友網(wǎng)站提供《Arduino Nano控制的激光測(cè)量.zip》資料免費(fèi)下載
    發(fā)表于 06-19 16:33 ?0次下載
    <b class='flag-5'>Arduino</b> <b class='flag-5'>Nano</b><b class='flag-5'>控制</b>的激光測(cè)量