0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于XIAO SAMD21开发板的数字键盘制作方案

柴火创客空间 来源:柴火创客空间 2024-09-06 10:02 次阅读

今天小编给大家带来了来自印度的Arnov Sharma 制作的基于XIAO SAMD21的数字键盘项目,该项目可以通过按键在电脑OLED的屏幕上输入0-9的阿拉伯数字,可以当作一个数字副键盘来使用。

这个项目的核心是 XIAO SAMD21 开发板和 XIAO 扩展板配对,其中包含一个板载 OLED 显示屏,我们在这个项目中使用它来显示按钮按下。扩展板固定在3D打印的特制外壳上。外壳内包含了 9个12x12 毫米的触觉按钮。这些按钮由在Fusion360中建模的支架部件牢固地固定。

材料清单

XIAO SAMD21开发板

XIAO扩展板

3D打印零件

12x12mm 点动按钮*9

第一步:代码实现

由Seeed Studio制造的 XIAO SAMD21 微控制器和 XIAO 扩展板构成了该项目的核心。它配备了丰富的外设,包括 OLED、RTC、SD 卡 Sot、无源蜂鸣器、复位/用户按钮、5V 伺服连接器和 Grove 连接器,用于将多个 Grove 设备与 XIAO 配对。它还包含一个电池充电 IC,用于将此设置与锂电池作为电源进行分级。

项目的第一步相当简单:我们将测试代码上传到 XIAO SAMD21 ,并利用扩展板的板载按钮(连接到 D1)用作输入数字 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          
  }          
}        
  
 

测试结束后,我们可以准备更多的功能,比如从 9 个按钮中获取输入,并通过 XIAO 内部 SAMD21 微控制器的 HID 协议输出数字。

以下为键盘中使用的主要代码


#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();             




          
}        
  
 

此代码实质上充当一个简单的键盘输入系统,模拟在按下相应的物理按钮时按键盘上的按键。此外,它还在OLED显示屏上提供视觉反馈,以指示已按下哪个按钮。

我们使用的是 Adafruit SSD1306 OLED 库,您需要先下载并安装该库,然后再上传此草图。

第二步:外观设计

该项目的第二步从外观设计开始,它由首先创建的 XIAO 扩展板模型组成,该模型放置在一个矩形主体上,该主体从内部容纳了九个按钮。

XIAO扩展板使用四个M2螺钉从顶部安装。

我们从外壳内部安装了按钮,并创建了九个方形开口来放置开关同时创造了一个开关支架,它用四个 M2 螺钉固定到位,以便将开关固定在原位。

此外,我们还创建了一个盖子,可以从后面关闭设备。该设备通过盖子上的矩形延伸部分从顶部抬高,使其有点倾斜。

设计完成后,我们导出了设计的所有网格文件,并使用带有 0.4mm 喷嘴的 Ender 3 打印它们。

主体采用橙色PLA印刷,盖子和开关支架均采用透明PLA印刷。

组装过程:添加按钮

对于开关,我们将使用 12mm x 12mm 方形触觉按钮。

首先,我们只需在主体内一次一个地将每个开关拾取并插入其指定位置,将它们全部放入插槽中。

接下来,我们将 3D 打印的开关支架添加到其位置,并使用四个 M2 螺钉使其静止。该支架将保持所有开关完好无损地固定在原位。

接线方法

l每个开关的 GND 端子使用烙铁和银铜线相互连接。对于此阶段,我们坚持使用提供的接线图。

l接下来,我们在每个开关上放置连接线;该连接线将添加 XIAO 的数字引脚,用于开关输入。

wKgaombaYvqAaGJ-AACVrTPbjfY458.jpg

XIAO 扩展板使用从顶部插入的四个 M2 螺钉安装在其适当的位置。接下来,我们开始最后一个接线步骤,该步骤涉及根据提供的接线图将 XIAO 上的数字引脚与每个开关上的连接线对齐。对于此过程,使用烙铁。最后,我们将盖子放在底部,并用六个 M2 螺钉将其固定到主体上。

该项目已完全组装完成。

总结

这是这个简单而实用的构建的结果:一个功能齐全的 HID 数字键盘,如果您的笔记本电脑缺少专用的数字键盘,您可以使用它来输入数字。您还可以修改此项目,通过为每个按钮分配字母或函数来代替数字来操作宏键盘。

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

    关注

    48

    文章

    7542

    浏览量

    151316
  • 键盘
    +关注

    关注

    4

    文章

    859

    浏览量

    39647
  • 开发板
    +关注

    关注

    25

    文章

    5032

    浏览量

    97372

原文标题:创客项目秀|基于XIAO SAMD21的HID数字键盘

文章出处:【微信号:ChaiHuoMakerSpace,微信公众号:柴火创客空间】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    USB数字键盘的数据传输模式是什么?

    数字键盘 有一个健按下,传输是以什么传至USB口进行数据通信,是直接以标准的键盘ASCII码输出吗?
    发表于 04-27 10:03

    单机数值输入控件,弹出数字键盘,单击数字输入值

    我想将触摸屏用到电脑上,所以数值输入不能用键盘,我需要一个vi,单击数值输入控件后弹出数字键盘,单击数字键盘的值实现数值输入。请问哪位大神给点意见
    发表于 03-10 09:12

    如何用TJC串口屏去做一个数字键盘

    如何用TJC串口屏去做一个数字键盘?遇到了哪些问题?怎样去解决?
    发表于 10-25 07:15

    STM32F103ZET6数字键盘的代码分享

    STM32F103ZET6数字键盘的代码分享
    发表于 12-14 06:07

    LCD和数字键盘实现的人机交互式界面

    引言目前,以LCD和数字键盘实现的人机交互式界面在智能终端中广泛采用。在不同的应用场合,对人机界面的要求也不同,一些情况下只要求简单参数的显示和选择,而在一些信息终端中,还要求文字的输入。 在
    发表于 12-22 06:09

    如何制作一个小数字键盘

    按键数量,按键功能,我这里制作一个小数字键盘,增加了Delete按键,使用的是红轴机械按键,效果如下二、环境stm32f1keilwindow10三、正文我画的原理图如下pcb核心程序#include "stm32f10x.h"#i...
    发表于 01-25 07:41

    如何实现基于Arduino的HID数字键盘设计?

    如何实现基于Arduino的HID数字键盘设计?
    发表于 02-15 07:23

    如何利用HAL库去制作一种u***数字键盘

    如何利用HAL库去制作一种u***数字键盘呢?有哪些制作步骤?
    发表于 03-01 07:37

    如何利用CH549开发一款触摸的数字键盘

    最近有个数字键盘的小项目要做,前段时间搜索了一些芯片发现CH549似乎可以单片即可实现。咨询了下价格也非常优秀,就打了块板子回来测试,今天捣鼓了半天才把下载的问题解决。网上买的这种下载,居然弄不了哎
    发表于 05-26 06:56

    如何切换笔记本小键盘

    在台式电脑中都有设在右边之专用数字键盘,而在笔记本中由于键盘容量问题,只有横排之数字键盘,没有专用数字键盘,但在笔记本之中间右侧,有些字母键下方也标有
    发表于 10-08 15:25 2.4w次阅读

    基于Raspberry Pi Pico实现的数字键盘设计方案

    今天,我将构建一个基于RaspberryPiPico的数字键盘。我将构建一个带有20个开关的简单正交数字键盘。然后我将介绍如何在其上安装KMK固件。
    的头像 发表于 04-06 15:37 3096次阅读
    基于Raspberry Pi Pico实现的<b class='flag-5'>数字键盘</b>设计<b class='flag-5'>方案</b>

    减少数字键盘所需的引脚数量开源

    电子发烧友网站提供《减少数字键盘所需的引脚数量开源.zip》资料免费下载
    发表于 10-28 11:42 2次下载
    减少<b class='flag-5'>数字键盘</b>所需的引脚数量开源

    数字键盘开源硬件

    电子发烧友网站提供《数字键盘开源硬件.zip》资料免费下载
    发表于 01-29 16:51 0次下载
    <b class='flag-5'>数字键盘</b>开源硬件

    如何使用数字键盘控制7段显示器

    电子发烧友网站提供《如何使用数字键盘控制7段显示器.zip》资料免费下载
    发表于 02-03 14:03 0次下载
    如何使用<b class='flag-5'>数字键盘</b>控制7段显示器

    使用SAMD21 ML评估套件进行手势识别

    电子发烧友网站提供《使用SAMD21 ML评估套件进行手势识别.zip》资料免费下载
    发表于 06-15 10:32 0次下载
    使用<b class='flag-5'>SAMD21</b> ML评估套件进行手势识别