色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

電子發(fā)燒友App

硬聲App

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創(chuàng)作中心

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

3天內(nèi)不再提示
創(chuàng)作
電子發(fā)燒友網(wǎng)>電子資料下載>電子資料>帶有APDS 9960手勢傳感器控制的Arduino菜單

帶有APDS 9960手勢傳感器控制的Arduino菜單

2022-12-16 | zip | 0.01 MB | 次下載 | 2積分

資料介紹

描述

我記得有幾次我問過以下問題:如何在不使用任何機械按鈕的情況下在 Arduino 上創(chuàng)建菜單?在我的大多數(shù)項目中,我需要使用帶有菜單的 LCD 來讓用戶配置系統(tǒng)。然而,必須使用按鈕,隨著時間的推移,它們會磨損,很快就會出現(xiàn)一些問題。

此外,我喜歡做不同的項目。我想創(chuàng)造一些比在我的項目中使用幾個按鈕更具技術(shù)性和趣味性的東西。

經(jīng)過這么長時間的思考,我找到了APDS 9960 手勢傳感器,它讓我可以做一些有趣的事情,我想在這個項目中向你展示。它很簡單,但對于許多應(yīng)用程序來說功能強大。

使用這個傳感器,我能夠創(chuàng)建一個完全受控的菜單,其中包含用于負載控制的手勢:JLCPCB Gesture Control

此外,您將學習:

  • 手勢傳感器的工作原理
  • 如何在 LCD 上創(chuàng)建菜單;
  • 如何操作手勢傳感器的控制功能。

現(xiàn)在,讓我們開始構(gòu)建我們的項目。

JLCPCB手勢控制

幾次我在 Arduino 上開發(fā)了 MENU,電路和代碼變得非常復雜這是由于大量的按鈕和代碼控制系統(tǒng)

為了避免這個問題,我決定使用這個手勢傳感器。它允許我只使用 2 條數(shù)據(jù)線并創(chuàng)建一個具有多個控制動作的更簡單的系統(tǒng)。

poYBAGOYoSOAB1P4AAFmjF8Z2aE196.jpg
圖 1 - 項目的電子原理圖。
?

另外,看看代碼有多簡單。

#include "SoftwareSerial.h"
#include 
#include "Adafruit_APDS9960.h"

Adafruit_APDS9960 apds;

LiquidCrystal_I2C lcd(0x27,16,2);
SoftwareSerial mySoftwareSerial(10, 11); // RX, TX

byte count = 2;

void setup() 
{
  Serial.begin(9600); 
  Wire.begin();

  lcd.init();                   
  lcd.backlight();

  for(byte i = 2; i <=4; i++)
  {
    pinMode(i, OUTPUT);
  }
  
  if(!apds.begin())
  { 
    Serial.println("Falha ao inicializar o dispositivo. Verifique as conex?es!");
  }
  else 
    Serial.println("Dispositivo inicializado!");

  apds.enableProximity(true);
  apds.enableGesture(true);

  show_menu(count);
}

void loop()
{
    uint8_t gesture = apds.readGesture();

          if(gesture == APDS9960_UP)
          {
           count++;
           
           if(count > 4)
           {
            count = 4; 
           }
           
           show_menu(count);
          }
         
          if(gesture == APDS9960_LEFT)
          {
           if(count == 2)
            {
              digitalWrite(2, LOW);  
            }

            if(count == 3)
            {
              digitalWrite(3, LOW);  
            }

            if(count == 4)
            {
              digitalWrite(2, LOW);  
              digitalWrite(3, LOW);  
            }
          }
          
          if(gesture == APDS9960_RIGHT)
          {
            if(count == 2)
            {
              digitalWrite(2, HIGH);  
            }

            if(count == 3)
            {
              digitalWrite(3, HIGH);  
            }

            if(count == 4)
            {
              digitalWrite(2, HIGH);  
              digitalWrite(3, HIGH);  
            }
          }
                    
          if(gesture == APDS9960_DOWN)
          {
           count--;

           if(count < 2)
           {
            count = 2;
           }

           show_menu(count);
          }
}

void show_menu(byte option)
{
  if(option == 2)
  {
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("-> LED1");
    lcd.setCursor(0,1);
    lcd.print("   LED2");

    return;
  }

  if(option == 3)
  {
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("   LED1");
    lcd.setCursor(0,1);
    lcd.print("-> LED2");

    return;
  }

  if(option == 4)
  {
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("-> LED1 and LED2");

    return;
  }
  
  return;
}

首先,我們聲明每個組件的庫,創(chuàng)建它的對象,最后,我們聲明項目中使用的變量。代碼部分如下所示。

#include "SoftwareSerial.h"
#include <LiquidCrystal_I2C.h>
#include "Adafruit_APDS9960.h"

Adafruit_APDS9960 apds;

LiquidCrystal_I2C lcd(0x27,16,2);
SoftwareSerial mySoftwareSerial(10, 11); // RX, TX

byte count = 2;

之后,我創(chuàng)建了 void setup 函數(shù)。必須對項目中使用的設(shè)備進行初始配置。

見下文,我開始了串行通信、I2C 通信和 LCD 操作。

此外,我通過循環(huán)將 LED 引腳配置為輸出。

void setup() 
{
  Serial.begin(9600);
  Wire.begin();

  lcd.init();
  lcd.backlight();

  for(byte i = 2; i <=4; i++)
  {
    pinMode(i, OUTPUT);
  }
  
  if(!apds.begin())
  {
    Serial.println("Falha ao inicializar o dispositivo. Verifique as conex?es!");
  }
  else 
    Serial.println("Dispositivo inicializado!");

  apds.enableProximity(true);
  apds.enableGesture(true);

  show_menu(count);
}

最后,您需要做一些非常重要的事情:測試手勢傳感器的功能。檢查它是否已正確初始化

如果正確啟動,請將傳感器配置為在檢測到附近有物體時啟用手勢檢測模式。APDS-9960 傳感器如下圖所示。

pYYBAGOYoUeAUeQ3AApNfcM5kd4683.jpg
圖 2 - 面包板中的電子項目。
?

這將在您將手指靠近模塊并移開時完成。使用最后兩行代碼執(zhí)行此配置過程。

之后,系統(tǒng)向用戶顯示帶有選項菜單的屏幕,如圖 2 所示。

poYBAGOYoWKATBYrAAqNO7yNDIk705.jpg
圖 3 - 在 LCD 屏幕 16x2 中顯示菜單。
?

在此之后,它準備進入循環(huán)功能。

無效循環(huán)功能和 APDS-9960 手勢傳感器

一切都發(fā)生在 void 循環(huán)函數(shù)中。這是我們項目的核心。下面給出了代碼 void 循環(huán)函數(shù)。

void loop()
{
    uint8_t gesture = apds.readGesture();

          if(gesture == APDS9960_UP)
          {
           count++;
           
           if(count > 4)
           {
            count = 4; 
           }
           
           show_menu(count);
          }
          
          if(gesture == APDS9960_LEFT)
          {
           if(count == 2)
            {
              digitalWrite(2, LOW);  
            }

            if(count == 3)
            {
              digitalWrite(3, LOW);  
            }

            if(count == 4)
            {
              digitalWrite(2, LOW);  
              digitalWrite(3, LOW);  
            }
          }
          
          if(gesture == APDS9960_RIGHT)
          {
            if(count == 2)
            {
              digitalWrite(2, HIGH);  
            }

            if(count == 3)
            {
              digitalWrite(3, HIGH);  
            }

            if(count == 4)
            {
              digitalWrite(2, HIGH);  
              digitalWrite(3, HIGH);  
            }
          }
                    
          if(gesture == APDS9960_DOWN)
          {
           count--;

           if(count < 2)
           {
            count = 2;
           }

           show_menu(count);
          }
}

上面開發(fā)的邏輯非常簡單。首先,系統(tǒng)使用下面的讀取功能讀取用戶執(zhí)行的手勢。

uint8_t gesture = apds.readGesture();

系統(tǒng)檢查 4 種類型的手勢:左、右、上或下。上下手勢用于在選項菜單中選擇負載

左手勢用于禁用加載,右手勢用于觸發(fā)加載,如上面的代碼所示。

每次用戶做出向上或向下手勢時,計數(shù)變量都會增加或減少。此變量的值用于向屏幕顯示選項并允許用戶瀏覽菜單。

基本上,對于每個計數(shù)值 2、3 和 4,我們有 3 個屏幕。

計數(shù)從值 2 開始,因為它是 LED 引腳的編號。請參見下面的示例。

 if(gesture == APDS9960_UP)
 {
     count++;
           
     if(count > 4)
     {
       count = 4; 
     }
           
        show_menu(count);
 }

 if(gesture == APDS9960_DOWN)
 {
      count--;

      if(count < 2)
      {
        count = 2;
      }

        show_menu(count);
  }

向上手勢增加,向下手勢減小計數(shù)變量的值。這允許用戶瀏覽菜單,如圖 3 所示。

poYBAGOYoYKAM4lNAAqrCQKOfpg024.jpg
圖 4 - 在菜單上導航。
?

選擇選項后,用戶必須激活或停用 LED。為此,他必須使用向左(禁用)或向右(激活)的手勢。

如前所述,系統(tǒng)將使用計數(shù)器變量值來顯示屏幕并激活/禁用 LED。

if(gesture == APDS9960_LEFT)
{
           if(count == 2)
            {
              digitalWrite(2, LOW);  
            }

            if(count == 3)
            {
              digitalWrite(3, LOW);  
            }

            if(count == 4)
            {
              digitalWrite(2, LOW);  
              digitalWrite(3, LOW);  
            }
}
          
if(gesture == APDS9960_RIGHT)
{
            if(count == 2)
            {
              digitalWrite(2, HIGH);  
            }

            if(count == 3)
            {
              digitalWrite(3, HIGH);  
            }

            if(count == 4)
            {
              digitalWrite(2, HIGH);  
              digitalWrite(3, HIGH);  
            }
}

除了控制 LED 和通過菜單導航的過程之外,我們還保留了一個特定主題來討論將在菜單中呈現(xiàn)的屏幕的創(chuàng)建。

在 16x2 LCD 顯示器上創(chuàng)建屏幕

為了向用戶展示導航屏幕,我們創(chuàng)建了一個名為 show_menu() 的函數(shù)。

void show_menu(byte option)
{
  if(option == 2)
  {
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("-> LED1");
    lcd.setCursor(0,1);
    lcd.print("   LED2");

    return;
  }

  if(option == 3)
  {
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("   LED1");
    lcd.setCursor(0,1);
    lcd.print("-> LED2");

    return;
  }

  if(option == 4)
  {
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("-> LED1 and LED2");

    return;
  }
  
  return;
}

為了向用戶展示導航屏幕,我們創(chuàng)建了一個名為 show_menu () 的函數(shù)。

此函數(shù)必須接收計數(shù)變量的值作為參數(shù)收到值后,系統(tǒng)將與值 2、3 和 4 進行比較。每個值代表一個不同的選項。

  • 如果值為 2,系統(tǒng)將在第一行打印帶有箭頭的選項 LED 1,在第二行打印 LED 2。
  • 如果值為 3,系統(tǒng)將在第一行打印選項 LED 1,在第二行打印帶有箭頭的 LED 2。
  • 最后,如果該值等于 4,系統(tǒng)將打印選項 LED 1 和 LED 2。

開發(fā)的系統(tǒng)很簡單,可用于使用 APDS-9960 手勢傳感器開發(fā)多種類型的菜單。

但是在完成這個項目之前,我開發(fā)了一個板子,它允許您使用手勢傳感器和一個控制菜單作為用戶界面來控制任何項目

JLCPCB手勢控制印刷電路板

下圖中的這個印刷電路板是使用JLCPCB 軟件 - EasyEDA在幾分鐘內(nèi)開發(fā)出來的,通過這個電路板,您可以連接您的 LCD Display 16x2 及其傳感器。

pYYBAGOYoYaALM1_AADO5mOC-7A586.png
圖 5 - 3D 可視化中的印刷電路板。
?

在這個項目中,我決定為您的 Arduino Nano 的每個引腳放置螺釘連接器

通過這些連接器,您可以連接任何類型的負載并使您的項目更加靈活,以方便與其他幾個項目的組裝。

poYBAGOYoYiABwaYAADqT8_j4X8431.png
圖 6 - PCB 設(shè)計布局。
?

從布局來看,PCB 是由 JLCPCB 公司開發(fā)的,價格為 2 美元,包含 10 個 PCB,通過此鏈接,您可以訪問文件以供下載

最后,我們有如下所示的印刷電路板。

pYYBAGOYoYqATJCGAACdPccZdDU540.png
圖 7 - EasyEDA 中的 PCB 設(shè)計結(jié)果。
?

通過這個項目,您可以將您的 PCB 與組件組裝在一起,并使用手勢傳感器和帶有 Arduino Nano 的 16x2 液晶顯示器創(chuàng)建多個項目。

結(jié)論

該項目展示了用完全由手勢控制的控制界面取代機械按鈕的巨大成果。

此外,通過單個連接的傳感器,可以降低電路連接和編程的復雜性。可以控制 4 個控制命令。

該項目還使使用 JLCPCB 開發(fā)的印刷電路板成為可能。該PCB是通用的,即它可以應(yīng)用于任何項目,您可以使用螺絲端子使其適應(yīng)任何項目。

因此,我們感謝您的閱讀,并留下文件的訪問鏈接,以便您在 JLCPCB 獲得 10 塊印刷電路板

?


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

下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評論

请按住滑块,拖动到最右边
了解新功能

查看更多

广告

下載排行

本周

  1. 1山景DSP芯片AP8248A2數(shù)據(jù)手冊
  2. 1.06 MB  |  532次下載  |  免費
  3. 2RK3399完整板原理圖(支持平板,盒子VR)
  4. 3.28 MB  |  339次下載  |  免費
  5. 3TC358743XBG評估板參考手冊
  6. 1.36 MB  |  330次下載  |  免費
  7. 4DFM軟件使用教程
  8. 0.84 MB  |  295次下載  |  免費
  9. 5元宇宙深度解析—未來的未來-風口還是泡沫
  10. 6.40 MB  |  227次下載  |  免費
  11. 6迪文DGUS開發(fā)指南
  12. 31.67 MB  |  194次下載  |  免費
  13. 7元宇宙底層硬件系列報告
  14. 13.42 MB  |  182次下載  |  免費
  15. 8FP5207XR-G1中文應(yīng)用手冊
  16. 1.09 MB  |  178次下載  |  免費

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234315次下載  |  免費
  3. 2555集成電路應(yīng)用800例(新編版)
  4. 0.00 MB  |  33566次下載  |  免費
  5. 3接口電路圖大全
  6. 未知  |  30323次下載  |  免費
  7. 4開關(guān)電源設(shè)計實例指南
  8. 未知  |  21549次下載  |  免費
  9. 5電氣工程師手冊免費下載(新編第二版pdf電子書)
  10. 0.00 MB  |  15349次下載  |  免費
  11. 6數(shù)字電路基礎(chǔ)pdf(下載)
  12. 未知  |  13750次下載  |  免費
  13. 7電子制作實例集錦 下載
  14. 未知  |  8113次下載  |  免費
  15. 8《LED驅(qū)動電路設(shè)計》 溫德爾著
  16. 0.00 MB  |  6656次下載  |  免費

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935054次下載  |  免費
  3. 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
  4. 78.1 MB  |  537798次下載  |  免費
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420027次下載  |  免費
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234315次下載  |  免費
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費
  11. 6電路仿真軟件multisim 10.0免費下載
  12. 340992  |  191187次下載  |  免費
  13. 7十天學會AVR單片機與C語言視頻教程 下載
  14. 158M  |  183279次下載  |  免費
  15. 8proe5.0野火版下載(中文版免費下載)
  16. 未知  |  138040次下載  |  免費
主站蜘蛛池模板: 亚洲国产精麻豆 | 伊人久久大香线蕉avapp下载 | 免费观看的毛片 | 中文字幕乱码一区AV久久 | japansemature护士 JAPANRCEP老熟妇乱子伦视频 | 国产精品人成在线播放新网站 | 超碰视频在线 | 久久精品国产欧美日韩99热 | 菠萝蜜国际一区麻豆 | 国产国产人免费观看在线视频 | 亚洲欧美综合在线中文 | 在线免费观看毛片 | 蜜芽无码亚洲资源网站 | 一本到道免费线观看 | 芒果影院网站在线观看 | 国产成人女人在线视频观看 | 一本之道高清www在线观看 | 日本真人啪啪试看30秒 | 24小时日本在线观看片免费 | 亚洲精品国产精品麻豆99 | 中字幕久久久人妻熟女天美传媒 | 大学生高潮无套内谢视频 | 国产精品日本欧美一区二区 | 国产乱国产乱老熟300部视频 | 综合一区无套内射中文字幕 | 国产成人免费在线 | 不卡一区二区高清观看视频 | 91久久偷偷做嫩草影院免 | 四虎影视国产精品亚洲精品 | 蜜桃成熟时2在线观看完整版hd | 野花4在线观看 | GOGOGO高清在线播放韩国 | 国产成人免费高清视频 | 国产高清免费视频免费观看 | 黄色天堂网站 | 亚洲色图在线视频 | 亚洲嫩草AV永久无码精品无码 | 欧美色妞AV重囗味视频 | 超碰97免费人妻 | 一本到2v不卡区 | 儿子你得太大了慢点插 |