RM新时代网站-首页

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

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

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

基于XIAO SAMD21開(kāi)發(fā)板的數(shù)字鍵盤制作方案

柴火創(chuàng)客空間 ? 來(lái)源:柴火創(chuàng)客空間 ? 2024-09-06 10:02 ? 次閱讀

今天小編給大家?guī)?lái)了來(lái)自印度的Arnov Sharma 制作的基于XIAO SAMD21的數(shù)字鍵盤項(xiàng)目,該項(xiàng)目可以通過(guò)按鍵在電腦OLED的屏幕上輸入0-9的阿拉伯?dāng)?shù)字,可以當(dāng)作一個(gè)數(shù)字副鍵盤來(lái)使用。

這個(gè)項(xiàng)目的核心是 XIAO SAMD21 開(kāi)發(fā)板和 XIAO 擴(kuò)展板配對(duì),其中包含一個(gè)板載 OLED 顯示屏,我們?cè)谶@個(gè)項(xiàng)目中使用它來(lái)顯示按鈕按下。擴(kuò)展板固定在3D打印的特制外殼上。外殼內(nèi)包含了 9個(gè)12x12 毫米的觸覺(jué)按鈕。這些按鈕由在Fusion360中建模的支架部件牢固地固定。

材料清單

XIAO SAMD21開(kāi)發(fā)板

XIAO擴(kuò)展板

3D打印零件

12x12mm 點(diǎn)動(dòng)按鈕*9

第一步:代碼實(shí)現(xiàn)

由Seeed Studio制造的 XIAO SAMD21 微控制器和 XIAO 擴(kuò)展板構(gòu)成了該項(xiàng)目的核心。它配備了豐富的外設(shè),包括 OLED、RTC、SD 卡 Sot、無(wú)源蜂鳴器、復(fù)位/用戶按鈕、5V 伺服連接器和 Grove 連接器,用于將多個(gè) Grove 設(shè)備與 XIAO 配對(duì)。它還包含一個(gè)電池充電 IC,用于將此設(shè)置與鋰電池作為電源進(jìn)行分級(jí)。

項(xiàng)目的第一步相當(dāng)簡(jiǎn)單:我們將測(cè)試代碼上傳到 XIAO SAMD21 ,并利用擴(kuò)展板的板載按鈕(連接到 D1)用作輸入數(shù)字 1 的小鍵盤。


#include         //TEST SKETCH
int buttonPin = 1;  // Set a button to any pin          




          
void setup()          
{          
  pinMode(buttonPin, INPUT_PULLUP);  // Set the button as an input          
  digitalWrite(buttonPin, HIGH);  // Pull the button high          
}          




          
void loop()          
{          
  if (digitalRead(buttonPin) == 0)  // if the button goes low          
  {          
    Keyboard.write('1');  // send a '1' to the computer via Keyboard HID          
    delay(500);  // delay so there aren't a kajillion z's          
  }          
}        
  
 

測(cè)試結(jié)束后,我們可以準(zhǔn)備更多的功能,比如從 9 個(gè)按鈕中獲取輸入,并通過(guò) XIAO 內(nèi)部 SAMD21 微控制器的 HID 協(xié)議輸出數(shù)字。

以下為鍵盤中使用的主要代碼


#include




          
#include
#include
#include




          
#define OLED_WIDTH 128          
#defineOLED_HEIGHT64
          
#define OLED_ADDR   0x3C          
Adafruit_SSD1306display(OLED_WIDTH,OLED_HEIGHT);
          
int buttonPin1 = 0;            
int buttonPin2 = 1;           
int buttonPin3 = 2;           
int buttonPin4 = 3;           
int buttonPin5 = 6;           
int buttonPin6 = 7;           
int buttonPin7 = 8;           
int buttonPin8 = 9;           
intbuttonPin9=10;


          
void setup()          
{          
  pinMode(buttonPin1, INPUT_PULLUP);  // Set the button as an input          
  digitalWrite(buttonPin1, HIGH);  // Pull the bu11tton high          




          
  pinMode(buttonPin2, INPUT_PULLUP);  // Set the button as an input          
  digitalWrite(buttonPin2, HIGH);  // Pull the bu11tton high          




          
  pinMode(buttonPin3, INPUT_PULLUP);  // Set the button as an input          
  digitalWrite(buttonPin3, HIGH);  // Pull the bu11tton high          




          
  pinMode(buttonPin4, INPUT_PULLUP);  // Set the button as an input          
  digitalWrite(buttonPin4, HIGH);  // Pull the bu11tton high          




          
  pinMode(buttonPin5, INPUT_PULLUP);  // Set the button as an input          
  digitalWrite(buttonPin5, HIGH);  // Pull the bu11tton high          




          
  pinMode(buttonPin6, INPUT_PULLUP);  // Set the button as an input          
  digitalWrite(buttonPin6, HIGH);  // Pull the bu11tton high          




          
  pinMode(buttonPin7, INPUT_PULLUP);  // Set the button as an input          
  digitalWrite(buttonPin7, HIGH);  // Pull the bu11tton high          




          
  pinMode(buttonPin8, INPUT_PULLUP);  // Set the button as an input          
  digitalWrite(buttonPin8, HIGH);  // Pull the bu11tton high          




          
  pinMode(buttonPin9, INPUT_PULLUP);  // Set the button as an input          
digitalWrite(buttonPin9,HIGH);//Pullthebu11ttonhigh
          
  display.begin(SSD1306_SWITCHCAPVCC, OLED_ADDR);          
  display.clearDisplay();           
}          




          
void loop()          
{          
  if (digitalRead(buttonPin1) == 0) // 01          
  {          
    Keyboard.write('1');            
              
  display.clearDisplay();          
  display.setTextSize(4);          
  display.setTextColor(WHITE);          
  display.setCursor(55, 20);          
  display.println("1");          
  display.display();          
  delay(500);            
  }          
    display.clearDisplay();          




          
  if (digitalRead(buttonPin2) == 0) // 02          
  {          
    Keyboard.write('2');            
              
  display.clearDisplay();          
  display.setTextSize(4);          
  display.setTextColor(WHITE);          
  display.setCursor(55, 20);          
  display.println("2");          
  display.display();                
  delay(500);            
  }          




          
display.clearDisplay();          




          
  if (digitalRead(buttonPin3) == 0)  // 03           
  {          
    Keyboard.write('3');           
              
  display.clearDisplay();          
  display.setTextSize(4);          
  display.setTextColor(WHITE);          
  display.setCursor(55, 20);          
  display.println("3");          
  display.display();          
  delay(500);            
  }          




          
display.clearDisplay();          




          
  if (digitalRead(buttonPin4) == 0)  // 04           
  {          
    Keyboard.write('4');           
              
  display.clearDisplay();          
  display.setTextSize(4);          
  display.setTextColor(WHITE);          
  display.setCursor(55, 20);          
  display.println("4");          
  display.display();          
  delay(500);            
  }            




          
display.clearDisplay();          




          
  if (digitalRead(buttonPin5) == 0)  // 05           
  {          
    Keyboard.write('5');           
              
  display.clearDisplay();          
  display.setTextSize(4);          
  display.setTextColor(WHITE);          
  display.setCursor(55, 20);          
  display.println("5");          
  display.display();          
  delay(500);            
}
          
display.clearDisplay();          




          
  if (digitalRead(buttonPin6) == 0)  // 06           
  {          
    Keyboard.write('6');           
              
  display.clearDisplay();          
  display.setTextSize(4);          
  display.setTextColor(WHITE);          
  display.setCursor(55, 20);          
  display.println("6");          
  display.display();          
  delay(500);            
  }           




          
display.clearDisplay();          




          
  if (digitalRead(buttonPin7) == 0)  // 07          
  {          
    Keyboard.write('7');           
              
  display.clearDisplay();          
  display.setTextSize(4);          
  display.setTextColor(WHITE);          
  display.setCursor(55, 20);          
  display.println("7");          
  display.display();          
  delay(500);            
  }           




          
display.clearDisplay();          




          
  if (digitalRead(buttonPin8) == 0)  // 08          
  {          
    Keyboard.write('8');           
              
  display.clearDisplay();          
  display.setTextSize(4);          
  display.setTextColor(WHITE);          
  display.setCursor(55, 20);          
  display.println("8");          
  display.display();          
  delay(500);            
  }           




          
display.clearDisplay();          




          
  if (digitalRead(buttonPin9) == 0)  // 09          
  {          
    Keyboard.write('9');           
              
  display.clearDisplay();          
  display.setTextSize(4);          
  display.setTextColor(WHITE);          
  display.setCursor(55, 20);          
  display.println("9");          
  display.display();          
  delay(500);            
  }          
            
display.clearDisplay();             




          
}        
  
 

此代碼實(shí)質(zhì)上充當(dāng)一個(gè)簡(jiǎn)單的鍵盤輸入系統(tǒng),模擬在按下相應(yīng)的物理按鈕時(shí)按鍵盤上的按鍵。此外,它還在OLED顯示屏上提供視覺(jué)反饋,以指示已按下哪個(gè)按鈕。

我們使用的是 Adafruit SSD1306 OLED 庫(kù),您需要先下載并安裝該庫(kù),然后再上傳此草圖。

第二步:外觀設(shè)計(jì)

該項(xiàng)目的第二步從外觀設(shè)計(jì)開(kāi)始,它由首先創(chuàng)建的 XIAO 擴(kuò)展板模型組成,該模型放置在一個(gè)矩形主體上,該主體從內(nèi)部容納了九個(gè)按鈕。

XIAO擴(kuò)展板使用四個(gè)M2螺釘從頂部安裝。

我們從外殼內(nèi)部安裝了按鈕,并創(chuàng)建了九個(gè)方形開(kāi)口來(lái)放置開(kāi)關(guān)同時(shí)創(chuàng)造了一個(gè)開(kāi)關(guān)支架,它用四個(gè) M2 螺釘固定到位,以便將開(kāi)關(guān)固定在原位。

此外,我們還創(chuàng)建了一個(gè)蓋子,可以從后面關(guān)閉設(shè)備。該設(shè)備通過(guò)蓋子上的矩形延伸部分從頂部抬高,使其有點(diǎn)傾斜。

設(shè)計(jì)完成后,我們導(dǎo)出了設(shè)計(jì)的所有網(wǎng)格文件,并使用帶有 0.4mm 噴嘴的 Ender 3 打印它們。

主體采用橙色PLA印刷,蓋子和開(kāi)關(guān)支架均采用透明PLA印刷。

組裝過(guò)程:添加按鈕

對(duì)于開(kāi)關(guān),我們將使用 12mm x 12mm 方形觸覺(jué)按鈕。

首先,我們只需在主體內(nèi)一次一個(gè)地將每個(gè)開(kāi)關(guān)拾取并插入其指定位置,將它們?nèi)糠湃氩宀壑小?/p>

接下來(lái),我們將 3D 打印的開(kāi)關(guān)支架添加到其位置,并使用四個(gè) M2 螺釘使其靜止。該支架將保持所有開(kāi)關(guān)完好無(wú)損地固定在原位。

接線方法

l每個(gè)開(kāi)關(guān)的 GND 端子使用烙鐵和銀銅線相互連接。對(duì)于此階段,我們堅(jiān)持使用提供的接線圖。

l接下來(lái),我們?cè)诿總€(gè)開(kāi)關(guān)上放置連接線;該連接線將添加 XIAO 的數(shù)字引腳,用于開(kāi)關(guān)輸入。

wKgaombaYvqAaGJ-AACVrTPbjfY458.jpg

XIAO 擴(kuò)展板使用從頂部插入的四個(gè) M2 螺釘安裝在其適當(dāng)?shù)奈恢?。接下?lái),我們開(kāi)始最后一個(gè)接線步驟,該步驟涉及根據(jù)提供的接線圖將 XIAO 上的數(shù)字引腳與每個(gè)開(kāi)關(guān)上的連接線對(duì)齊。對(duì)于此過(guò)程,使用烙鐵。最后,我們將蓋子放在底部,并用六個(gè) M2 螺釘將其固定到主體上。

該項(xiàng)目已完全組裝完成。

總結(jié)

這是這個(gè)簡(jiǎn)單而實(shí)用的構(gòu)建的結(jié)果:一個(gè)功能齊全的 HID 數(shù)字鍵盤,如果您的筆記本電腦缺少專用的數(shù)字鍵盤,您可以使用它來(lái)輸入數(shù)字。您還可以修改此項(xiàng)目,通過(guò)為每個(gè)按鈕分配字母或函數(shù)來(lái)代替數(shù)字來(lái)操作宏鍵盤。

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

    關(guān)注

    48

    文章

    7542

    瀏覽量

    151316
  • 鍵盤
    +關(guān)注

    關(guān)注

    4

    文章

    859

    瀏覽量

    39647
  • 開(kāi)發(fā)板
    +關(guān)注

    關(guān)注

    25

    文章

    5032

    瀏覽量

    97371

原文標(biāo)題:創(chuàng)客項(xiàng)目秀|基于XIAO SAMD21的HID數(shù)字鍵盤

文章出處:【微信號(hào):ChaiHuoMakerSpace,微信公眾號(hào):柴火創(chuàng)客空間】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    USB數(shù)字鍵盤的數(shù)據(jù)傳輸模式是什么?

    當(dāng) 數(shù)字鍵盤 有一個(gè)健按下,傳輸是以什么傳至USB口進(jìn)行數(shù)據(jù)通信,是直接以標(biāo)準(zhǔn)的鍵盤ASCII碼輸出嗎?
    發(fā)表于 04-27 10:03

    單機(jī)數(shù)值輸入控件,彈出數(shù)字鍵盤,單擊數(shù)字輸入值

    我想將觸摸屏用到電腦上,所以數(shù)值輸入不能用鍵盤,我需要一個(gè)vi,單擊數(shù)值輸入控件后彈出數(shù)字鍵盤,單擊數(shù)字鍵盤的值實(shí)現(xiàn)數(shù)值輸入。請(qǐng)問(wèn)哪位大神給點(diǎn)意見(jiàn)
    發(fā)表于 03-10 09:12

    如何用TJC串口屏去做一個(gè)數(shù)字鍵盤

    如何用TJC串口屏去做一個(gè)數(shù)字鍵盤?遇到了哪些問(wèn)題?怎樣去解決?
    發(fā)表于 10-25 07:15

    STM32F103ZET6數(shù)字鍵盤的代碼分享

    STM32F103ZET6數(shù)字鍵盤的代碼分享
    發(fā)表于 12-14 06:07

    LCD和數(shù)字鍵盤實(shí)現(xiàn)的人機(jī)交互式界面

    引言目前,以LCD和數(shù)字鍵盤實(shí)現(xiàn)的人機(jī)交互式界面在智能終端中廣泛采用。在不同的應(yīng)用場(chǎng)合,對(duì)人機(jī)界面的要求也不同,一些情況下只要求簡(jiǎn)單參數(shù)的顯示和選擇,而在一些信息終端中,還要求文字的輸入。 在
    發(fā)表于 12-22 06:09

    如何制作一個(gè)小數(shù)字鍵盤

    按鍵數(shù)量,按鍵功能,我這里制作一個(gè)小數(shù)字鍵盤,增加了Delete按鍵,使用的是紅軸機(jī)械按鍵,效果如下二、環(huán)境stm32f1keilwindow10三、正文我畫(huà)的原理圖如下pcb核心程序#include "stm32f10x.h"#i...
    發(fā)表于 01-25 07:41

    如何實(shí)現(xiàn)基于Arduino的HID數(shù)字鍵盤設(shè)計(jì)?

    如何實(shí)現(xiàn)基于Arduino的HID數(shù)字鍵盤設(shè)計(jì)?
    發(fā)表于 02-15 07:23

    如何利用HAL庫(kù)去制作一種u***數(shù)字鍵盤

    如何利用HAL庫(kù)去制作一種u***數(shù)字鍵盤呢?有哪些制作步驟?
    發(fā)表于 03-01 07:37

    如何利用CH549開(kāi)發(fā)一款觸摸的數(shù)字鍵盤?

    最近有個(gè)數(shù)字鍵盤的小項(xiàng)目要做,前段時(shí)間搜索了一些芯片發(fā)現(xiàn)CH549似乎可以單片即可實(shí)現(xiàn)。咨詢了下價(jià)格也非常優(yōu)秀,就打了塊板子回來(lái)測(cè)試,今天搗鼓了半天才把下載的問(wèn)題解決。網(wǎng)上買的這種下載,居然弄不了哎
    發(fā)表于 05-26 06:56

    如何切換筆記本小鍵盤

    在臺(tái)式電腦中都有設(shè)在右邊之專用數(shù)字鍵盤,而在筆記本中由于鍵盤容量問(wèn)題,只有橫排之數(shù)字鍵盤,沒(méi)有專用數(shù)字鍵盤,但在筆記本之中間右側(cè),有些字母鍵下方也標(biāo)有
    發(fā)表于 10-08 15:25 ?2.4w次閱讀

    基于Raspberry Pi Pico實(shí)現(xiàn)的數(shù)字鍵盤設(shè)計(jì)方案

    今天,我將構(gòu)建一個(gè)基于RaspberryPiPico的數(shù)字鍵盤。我將構(gòu)建一個(gè)帶有20個(gè)開(kāi)關(guān)的簡(jiǎn)單正交數(shù)字鍵盤。然后我將介紹如何在其上安裝KMK固件。
    的頭像 發(fā)表于 04-06 15:37 ?3095次閱讀
    基于Raspberry Pi Pico實(shí)現(xiàn)的<b class='flag-5'>數(shù)字鍵盤</b>設(shè)計(jì)<b class='flag-5'>方案</b>

    減少數(shù)字鍵盤所需的引腳數(shù)量開(kāi)源

    電子發(fā)燒友網(wǎng)站提供《減少數(shù)字鍵盤所需的引腳數(shù)量開(kāi)源.zip》資料免費(fèi)下載
    發(fā)表于 10-28 11:42 ?2次下載
    減少<b class='flag-5'>數(shù)字鍵盤</b>所需的引腳數(shù)量開(kāi)源

    數(shù)字鍵盤開(kāi)源硬件

    電子發(fā)燒友網(wǎng)站提供《數(shù)字鍵盤開(kāi)源硬件.zip》資料免費(fèi)下載
    發(fā)表于 01-29 16:51 ?0次下載
    <b class='flag-5'>數(shù)字鍵盤</b>開(kāi)源硬件

    如何使用數(shù)字鍵盤控制7段顯示器

    電子發(fā)燒友網(wǎng)站提供《如何使用數(shù)字鍵盤控制7段顯示器.zip》資料免費(fèi)下載
    發(fā)表于 02-03 14:03 ?0次下載
    如何使用<b class='flag-5'>數(shù)字鍵盤</b>控制7段顯示器

    使用SAMD21 ML評(píng)估套件進(jìn)行手勢(shì)識(shí)別

    電子發(fā)燒友網(wǎng)站提供《使用SAMD21 ML評(píng)估套件進(jìn)行手勢(shì)識(shí)別.zip》資料免費(fèi)下載
    發(fā)表于 06-15 10:32 ?0次下載
    使用<b class='flag-5'>SAMD21</b> ML評(píng)估套件進(jìn)行手勢(shì)識(shí)別
    RM新时代网站-首页