在新冠病毒大流行的這段時(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)目。
特征:
工作電壓: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 的非接觸式電梯的電路圖。
我們正在將 Arduino Nano 與 APDS9960 傳感器和 OLED 顯示器連接起來。APDS9960 Sensor 和 OLED Display 的 VCC 和 GND 引腳連接到 Arduino 的 3.3V 和 GND。而 APDS9960 Sensor 和 OLED Display 的 SCL 和 SDA 引腳分別連接到 Arduino 的 A5 和 A4 引腳。
這是使用 Arduino 的手勢(shì)控制電梯的完整設(shè)置的外觀:
代碼說明
使用 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 將顯示電梯用戶界面。
現(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)前樓層);
}
}
-
非接觸式
+關(guān)注
關(guān)注
0文章
77瀏覽量
14277 -
Arduino
+關(guān)注
關(guān)注
188文章
6472瀏覽量
187317 -
手勢(shì)控制
+關(guān)注
關(guān)注
4文章
44瀏覽量
21759
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論