今天小編給大家?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)輸入。
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)操作宏鍵盤。
-
微控制器
+關(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)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論