DIY QMK量子键盘

        最近放假了,趁这个空余在做一个分支项目,一款机械键盘,量子键盘取自固件名称QMK(Quantum Mechanical Keyboard)。

        键盘作为计算机或其他电子设备的重要输入设备之一,通过将按键的物理动作转换为数字信号,实现用户与设备的交互。

        键盘的工作原理可以分为几个关键部分,包括按键矩阵、扫描电路、信号传输和固件控制等。下面将详细介绍这些基本原理。

1. 键盘按键矩阵

        大多数键盘采用按键矩阵结构来实现多个按键的检测。按键矩阵是一种通过行列交叉的方式连接多个按键的电路布局,这样可以减少所需的电线数量。

  • 行(Rows)和列(Columns):键盘的每个按键通常通过一个行和一个列来标识。当按下某个键时,它连接了一个特定的行和列,这样可以通过电路检测出该按键的位置。

  • 矩阵布局:假设有一个4x4的矩阵布局,代表16个按键。每个按键都由一行和一列组成。按下某个按键时,电路中对应的行和列之间会闭合,从而让控制器可以确定是哪个按键被按下。

    /*

     * ┌───┬───┬───┬───┐

     * │ 7 │ 8 │ 9 │   │

     * ├───┼───┼───┤ + │

     * │ 4 │ 5 │ 6 │   │

     * ├───┼───┼───┼───┤

     * │ 1 │ 2 │ 3 │   │

     * ├───┴───┼───┤Ent│

     * │   0   │ . │   │

     * └───────┴───┴───┘

     */

例如,如果你按下位于第2行和第3列的按键,电路会通过扫描检测到该按键位置,输出6这个数字。

2. 键盘扫描与信号检测

        键盘的扫描是通过控制器(通常是微控制器或专用的键盘芯片)完成的。扫描过程可以分为以下步骤:

  1. 行激活:控制器逐一激活键盘的每一行,并读取与之连接的所有列。

  2. 列检测:在某一行激活时,控制器会读取所有列的信号。如果某个列的信号改变(通常是由按键按下引起的电流流动),说明该行列交点上的按键被按下。

  3. 去抖动:按键的物理开关会在按下和松开时发生微小的震动,这会导致信号的不稳定。为了避免错误的按键输入,控制器会进行去抖动处理,即在按键被按下后,控制器会等待短暂时间再确认按键状态。

  4. 重复检测:当用户按住某个按键时,键盘通常会以一定的速度重复发送按键信号,直到按键松开。这是为了在长时间按住某个按键时能够持续输入。

        提起键盘定制,QMK(Quantum Mechanical Keyboard)固件无疑是其中的佼佼者。作为一个开源项目,QMK固件已经成为了键盘爱好者和DIY者的标配工具。它不仅提供了高度的定制能力,还支持各种复杂的功能和设置,使得用户能够根据自己的需求,打造出个性化的键盘布局和操作体验。QMK固件是一款针对机械键盘的开源固件,基于C语言编写,允许用户自由修改和配置键盘的各项功能。QMK原本是基于一个叫做TMK的开源固件开发的,后来因为功能强大和灵活性高,逐渐成为了社区的主流选择。

        QMK的最大亮点在于它的高度可定制性,它不仅支持常见的按键映射和宏命令,还支持更多复杂的功能,如多层布局、特殊键位、RGB灯效等。用户可以通过修改QMK固件中的代码,轻松实现个人化需求。

QMK固件的强大之处还在于它可以对键盘的各个方面进行深入的定制。以下是QMK固件的一些核心功能:
  • 按键映射(Keymap):QMK允许用户自定义每个按键的功能,包括普通键位、功能键、组合键、宏命令等。通过QMK的配置文件,用户可以为每个按键分配不同的任务,使得每个按键的功能都可以根据需要进行调整。

  • 多层(Layers)支持:QMK固件支持多层布局功能,允许用户通过按下特定的修饰键(如Shift、Ctrl等)来切换不同的键位布局。这使得键盘的功能得到极大的扩展。例如,你可以将一层映射为数字键盘,另一层用于控制媒体播放,或者将一层配置为游戏快捷键。

  • 宏命令(Macros):QMK支持宏命令功能,允许用户定义一组按键序列,并将其绑定到某个单独的按键上。通过按下这个特定的按键,QMK会自动执行这组按键序列。宏命令功能非常适合需要频繁输入复杂命令的用户,比如程序员、游戏玩家等。

  • RGB灯效:QMK还支持RGB背光的控制,可以根据需要调整灯效的颜色、亮度以及动态效果。用户可以通过固件代码自定义灯效模式,例如设置呼吸灯、波浪灯、渐变色等效果,或者根据按键的状态变化调整灯光。

  • 定制功能:QMK固件还支持一些特殊的功能,如按键防抖、长按触发、按键禁用、音效反馈等。这些功能可以进一步提升用户体验,使得键盘更加智能和人性化。

QMK固件的配置和编程过程是有一定的学习曲线,但一旦掌握了,就可以进行极其灵活和深入的定制。以下是QMK固件配置的基本步骤:

安装QMK MSYS

打开QMK MSYS在shell里面输入qmk setup

        下载QMK固件源代码:会通过git 去QMK官方GitHub仓库下载固件源代码。QMK的源代码中包含了许多已经预定义好的配置文件和示例代码,用户可以根据自己的需求进行修改。本着国内GitHub访问的不稳定性,科学上网是必要的,因为在sub-routine这块很容易失败      

这个最好设置一下git的代理

 如果想取消代理  

 在shell里面输入qmk new-keyboard

输入一个键盘的名称和Github用户名称

选择键盘和布局:在QMK固件中,每个键盘都有一个对应的配置文件,用户需要选择适合自己键盘的文件。如果是自定义键盘,用户需要根据自己的硬件设计来编写新的配置文件。

选择你想要的键盘布局,然后选择开发板,这里手里因为有块树莓派的RP2040的开发板,所以选择了15

这里的RP2040有足够的IO口关键还很便宜10-20RMB,还包邮

修改按键映射和功能:在QMK的配置文件中,用户可以根据自己的需求修改每个按键的功能。可以是单一的字符,也可以是复杂的宏命令。QMK允许用户通过修改C语言代码来自定义每个按键的行为,例如设置某个按键为切换多层、触发宏命令等。

设计好引脚和键盘扫描电路的mapping

一些个性化的定制也可以通过QMK Configurator进行修改,生成的文件替换文件夹里的文件

在编译之前一定修改matrix_pins的对应,因为我用了RP2040

编译并烧录固件:修改完配置后,用户需要使用QMK的编译工具将固件编译成可供键盘使用的二进制文件。然后,使用适当的工具(如QMK Toolbox)将固件烧录到键盘的微控制器中。

输入:qmk compile -kb demo_keyboard -km default

开始编译固件

编译成功

烧录固件,qmk flash -kb demo_keyboard -km default   注意RP2040按住boot键然后松开

调试与测试:烧录完成后,用户需要通过测试确保每个按键的功能都正常工作。如果有任何问题,可以重新调整配置文件并编译新的固件版本。

这个是4*4矩阵键盘打印出的

7++++++7744566456123

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/8920.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Unity3D】aab包太大无法上传Google问题

目录 一、勾选Split Application Binary,Unity直接打aab包 勾选Split Application Binary选项的影响 不勾选Split Application Binary选项的影响 总结 2、导出Android工程打包aab 一、勾选Split Application Binary,Unity直接打aab包 超出150MB部分…

DeepSeek助力学术文献搜索!

搜集文献 宝子们如果是第一次发表学术论文,论文往往是会署名多个作者。在这种情况下,即便成功发表了论文,独立撰作或主导写作的挑战仍旧存在。那么,怎样才能独立地完成一篇属于自己的学术论文呢?对于初次尝试学术论文…

【时时三省】(C语言基础)文件的随机读写

山不在高,有仙则名。水不在深,有龙则灵。 ----CSDN 时时三省 fseek 根据文件指针的位置和偏移量来定位文件指针 示例: 这个输出的就是ade seek_cur的意思是从当前偏移量 2就是从a往后偏移两个就是d 偏移量 SEEK_CUR…

Python-基于PyQt5,json和playsound的通用闹钟

前言:刚刚结束2024年秋季学期的学习,接下来我们继续来学习PyQt5。由于之前我们已经学习了PyQt5以及PyUIC,Pyrcc和QtDesigner的安装,配置。所以接下来我们一起深入PyQt5,学习如何利用PyQt5进行实际开发-基于PyQt5,json和…

数据结构课程设计(三)构建决策树

3 决策树 3.1 需求规格说明 【问题描述】 ID3算法是一种贪心算法,用来构造决策树。ID3算法起源于概念学习系统(CLS),以信息熵的下降速度为选取测试属性的标准,即在每个节点选取还尚未被用来划分的具有最高信息增益的…

2024收尾工作

目录 开场白 栈与队列 LeetCode232. 用栈实现队列 LeetCode225. 用队列实现栈 LeetCode102. 二叉树的层序遍历 LeetCode103. 二叉树的锯齿形层序遍历 堆(优先级队列) 堆排序 LeetCode215. 数组中的第 k 个最大元素 总结 开场白 今天是除夕&…

纯css实现div宽度可调整

<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title>纯css实现div尺寸可调整</title><style…

浅谈Linux的发展

目录 1.Linux背景 1.1 发展史 UNIX发展的历史 1.2开源 1.3官网 1.4.企业应用现状 1.5.发行版本 1.6 os概念&#xff0c;定位 1.Linux背景 1.1 发展史 学习Linux系统编程&#xff0c;你可能要问Linux从哪里来&#xff1f;它是怎么发展的&#xff1f;在这里简要介绍Linux的发展史…

四层网络模型

互联网由终端主机、链路和路由器组成&#xff0c;数据通过逐跳的方式&#xff0c;依次经过每条链路进行传输。 网络层的工作是将数据包从源端到目的端&#xff0c;跨越整个互联网。 网络层的数据包称为数据报。网络将数据报交给链路层&#xff0c;指示它通过第一条链路发送数据…

世上本没有路,只有“场”et“Bravo”

楔子&#xff1a;电气本科“工程电磁场”电气研究生课程“高等电磁场分析”和“电磁兼容”自学”天线“、“通信原理”、“射频电路”、“微波理论”等课程 文章目录 前言零、学习历程一、Maxwells equations1.James Clerk Maxwell2.自由空间中传播的电磁波3.边界条件和有限时域…

python学opencv|读取图像(四十六)使用cv2.bitwise_or()函数实现图像按位或运算

【0】基础定义 按位与运算&#xff1a;全1取1&#xff0c;其余取0。按位或运算&#xff1a;全0取0&#xff0c;其余取1。 【1】引言 前序学习进程中&#xff0c;已经对图像按位与计算进行了详细探究&#xff0c;相关文章链接如下&#xff1a; python学opencv|读取图像&…

如何把obsidian的md文档导出成图片,并加上文档属性

上篇关于这个插件PKMer_Obsidian 插件&#xff1a;Export Image plugin 一键将笔记转换为图片分享的文章 如何把obsidian的md文档导出成图片&#xff0c;并加上水印-CSDN博客 如何导出图片的时候让文档属性也显示出来&#xff0c;啊啊&#xff0c;这个功能找了一晚上&#xf…

MATLAB算法实战应用案例精讲-【数模应用】方向梯度直方图(HOG)(附python代码实现)

目录 前言 算法原理 特征描述 什么是方向梯度直方图? 算法思想: 实现方法: 性能提高: HOG特征提取 直方图阈值化 直方图均衡化 算法步骤: 算法流程 1. 图像预处理 2. 计算图像梯度 3. 计算梯度直方图 4. 图像HOG特征向量 直方图反向投影 其它类型图像直…

CycleGAN模型解读(附源码+论文)

CycleGAN 论文链接&#xff1a;Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks 官方链接&#xff1a;pytorch-CycleGAN-and-pix2pix 老规矩&#xff0c;先看看效果 总体流程 先简单过一遍流程&#xff0c;细节在代码里说。CycleGAN有…

ue5 GAS制作一个技能,技能冷却,给剑添加碰撞预设,打击敌人

总结&#xff1a; 新建文件夹 ability 取名BP_BaseAbility 新建一个技能GAB_Melee 上面技能GAB_Melee和技能基类BP_BaseAbility 进入技能GAB_Melee&#xff0c;添加打印火云掌 给这个技能添加标签 点这个号 这样命名&#xff0c;小心这个点&#xff08;.&#xff09…

工作总结:git篇

文章目录 前言基础Gerrit1.克隆2.新建本地分支和checkout3.添加到暂存区新增文件到暂存区修改已经添加到暂存区的文件取消添加到暂存区的文件 4.提交到本地仓库在不重复提交的情况下&#xff0c;修改本次提交 5.提交到远程仓库6.评审其他辅助命令 前言 目前也算是工作一段时间…

ESP32 I2S音频总线学习笔记(二):I2S读取INMP441音频数据

简介 在这个系列的上一篇文章中&#xff0c;我们介绍了ESP32 I2S音频总线的相关知识&#xff0c;简要了解了什么是I2S总线、它的通信格式&#xff0c;以及相关的底层API函数。没有看过上篇文章的可以点击文章进行回顾&#xff1a; ESP32 I2S音频总线学习笔记&#xff08;一&a…

(学习总结21)C++11 异常与智能指针

C11 异常与智能指针 异常异常的概念异常的抛出和捕获栈展开查找匹配的处理代码异常重新抛出异常安全问题异常规范标准库的异常 智能指针RAII 和智能指针的设计思路智能指针的使用场景分析C标准库智能指针的使用weak_ptr 和 shared_ptr循环引用weak_ptrshared_ptr 循环引用问题 …

智能调度体系与自动驾驶技术优化运输配送效率的研究——兼论开源AI智能名片2+1链动模式S2B2C商城小程序的应用潜力

摘要&#xff1a;随着全球化和数字化进程的加速&#xff0c;消费者需求日益呈现出碎片化和个性化的趋势&#xff0c;这对物流运输行业提出了前所未有的挑战。传统的物流调度体系与调度方式已难以满足当前复杂多变的物流需求&#xff0c;因此&#xff0c;物流企业必须积极引入大…

AndroidCompose Navigation导航精通1-基本页面导航与ViewPager

文章目录 前言基本页面导航库依赖导航核心部件简单NavHost实现ViewPagerPager切换逻辑图阐述Pager导航实战前言 在当今的移动应用开发中,导航是用户与应用交互的核心环节。随着 Android Compose 的兴起,它为开发者提供了一种全新的、声明式的方式来构建用户界面,同时也带来…