构建缩放静音按钮

2021-03-12 03:20:02

Instagram最近向我展示了一个专用静音按钮的广告,用于缩放,这在鼻子上看起来很少。

是的,我整天都在缩放。是的,我有一个小孩,让客人出现在那些电话上。你赢了,Instagram广告算法,我想要一个。

但我有我的预订。这是一个用于Kickstarter项目的Instagram广告。即使点击它,我不想为Facebook的广告收入做出贡献。 Jenny Odell没有免费腕表,总结了我对Instagram广告中产品质量的看法。我的Kickstarter琐碎的追求饼非常满。

我已经支持了很多关于Kickstarter的项目,有时最终结果让我想起了迈克尔道格拉斯跌倒的汉堡包。

首先要考虑的是:媒体令人满意的是什么?如果您阅读了关于Yubikeys的帖子,那么您将知道这对我来说是一个重要的一点。

我在键盘中使用樱桃MX交换机。有三种机械开关:线性,触觉和咔哒声。线性是您的基本交换机,无需多大反馈即可上下。触觉交换机在旅行中有一个凹凸,让您觉得您的主要压力机发生了。键盘交换机具有更强的触觉反馈,并在按下它们时会发出声音。

通常,您可以购买交换机测试仪,并弄清楚哪一个对您感到有权,并调查您的同事以确定他们在谋杀您之前让您的键盘产生的声音。但我们在Covid的中间 - 你没有你周围的任何合作工人!让我们一起去一个令人满意的触觉反馈的樱桃MX蓝色开关,但也非常响亮。 Cherry MX的网站调用此交换机“咔哒声”,这是一个非常轻描淡写的。

看起来不错,但我想我们可以做得更好。如果樱桃MX蓝色开关令按压力机,那么又不会是一个可笑的大樱桃MX蓝色开关更加令人满意?

它在每个尺寸越大4倍,体积比正常开关更大64倍。它甚至带有一个巨大的钥匙图!

不幸的是,大型交换机不带案例,因此我们需要3D打印。我发现了一个漂亮的案例:novelkeys大开关盒。如果有人改善了原始设计,它总是值得浏览混音。在这种情况下,有一个混音,用于为Pro Micro添加一个外壳,并使开关更紧密,因此我印刷了一个。

现在我们有这样的情况,我们需要一个板子进入它并将其连接到开关。

Pro Micro具有Atmega32U4芯片,允许其模拟USB HID设备,如USB键盘。这也很小。

如果看看大开关的底部,有两个金属触点。

在开关内部,按下钥匙上的按下导致电路在这些触点之间完成。

我们可以将GND连接到一个金属触点和销2到另一个金属接触。 PIN 2是数字I / O引脚,当键按下并且当它不是时,将读取高电平。

如果我们可以拥有静音状态的某种视觉指示器,它也会很好,因此我们可以添加LED。

对于LED,较长的腿连接到PWR,较短的腿连接到GND。我们将粘贴在长腿之间的电阻和不同的销之间,以降低电流底部的电流量 - 我选择销9。我越短的腿直到gnd。我发现这个页面有关LED和电阻的有用。

现在我们可以编写一些软件,在缩放呼叫中的精神相反。

我始于一些代码,Sparkfun已经写成了构建一个巨大的保存按钮并修改了一下。

我们静音按钮背后的基本思想是,当您按下键时,它将发出变焦热键,以便静音和未经操作,在MAC上是CMD移位-A。您将要更改缩放设置,因此即使缩放未与“启用全局快捷方式”切换:

我们还要在每个钥匙按下后打开和关闭LED。我决定将LED视为类似于“空气”光 - 当蓝色LED亮起时,我取得取得取消,人们可以听到我所说的话。

但是,如果我们刚刚在每个钥匙按下拨打的LED和关闭后,它将如何与缩放的实际静音状态同步?

关于Pro Micro的一个很好的事情是它也具有串行通信。这通常用于在Arduino IDE中打印调试信息,但我们可以使用它来帮助我们与缩放的静音状态保持同步。

#include" keyboard.h" //os parationstypeef enum {linux,windows,mac} os_types; //将其更改为您的操作系统const os_types os = mac; // pinsconst int btn_pin = 2; const int let_pin = 9; // constantsconst int deboune_delay = 50; // ms // globalsint btn_state = high; int btn_prev = high; unsigned long last_debounce_time = 0; int os_ctrl; int let_state = low; void setup(){serial.begin(57600); //打开串行端口,将数据速率设置为57600 BPS //设置LED和按钮引脚PINMODE(BTN_PIN,INPUT_PULLUP); //将按钮设置为输入Pinmode(LED_PIN,输出); DigitalWrite(LED_PIN,LED_STATE); //开始键盘键盘.Begin(); //切换到正确的控制/命令键交换机(OS){案例Linux:case Windows:OS_CTRL = KEY_LEFT_CTRL;休息;案例mac:os_ctrl = key_left_gui;休息;默认值:os_ctrl = key_left_ctrl;休息; } //获得初始时间戳序列序列.println("开始"); } void循环(){//读取按钮的当前状态int btn_read = digitalread(btn_pin); //请记住,如果(btn_read!= btn_prev){last_debounce_time = millis(); } //在再次检查按钮的状态(millis()>(last_debounce_time + devounce_delay))之前等待在检查按钮的状态之前){if(btn_read!= btn_state){btn_state = btn_read; if(btn_state == low){//发送cmd + shift +键盘.press(key_left_shift);键盘.press(os_ctrl);键盘。按(' a');延迟(100);键盘.releaseall(); serial.println("按下"); if(LED_STATE == LOW){LED_STATE = HIGH; } else {led_state = low; DigitalWrite(LED_PIN,LED_STATE); }} //记住下一个循环的上一个按钮位置()btn_prev = btn_read; if(serial.available()> 0){string incomingstring = serial.readstringuntil(' \ n'); if(incomingstring =="柔和"){led_state = low; }如果(incomingstring =="取得的"){LED_STATE = HIGH; DigitalWrite(LED_PIN,LED_STATE); }}

接下来,我们可以添加一个AppleScript,它将报告当前缩放状态是什么。我找到了一个Zoom插件,用于集成初始AppleScript的StreamFeck设备,并将其修改为仅报告缩放是否已打开,并且其静音状态。我也改变了它来输出json。

将ZoomStatus设置为"关闭"将Mutestatus设置为"禁用"告诉申请"系统事件"如果存在(进程的窗口1和#34; zoom.us")然后将zoomstatus设置为"开放"告诉申请流程" zoom.us"如果存在(菜单栏项"会议"菜单栏1)然后将zoomstatus设置为"呼叫"如果存在(菜单项"静音音频"菜单栏项目的菜单1"会议"菜单栏1)然后将Mutestatus设置为"未被发电和#34;否则将mutestatus设置为"柔和"如果结束结束,如果结束告诉最终IFEND thelcopy" {\"静音\":\"" & (mutestatus作为文本)& " \",\"状态\":\"" & (ZoomStatus作为文本)& " \"}"到了斯丁

现在,当我们在缩放呼叫时运行它时,我们会像这样更多输出:

最后,我写了一个小节点应用程序,它在Pro Micro和此脚本之间充当中间人:

const {exec} =要求(' child_process'); const serialport =要求(' serialport'); const readline =要求(' @ serialport / parser-readline' ); const port = new serialport(' /dev/tty.usbmodemhidpc1',{baudrate:57600}); var checkstatus = function(){console.log('检查状态...& #39;); Exec(' Osascript get-zoom-status.scpt'(错误,stdout,stderr)=> {if(错误){console.error(`exec错误:$ {错误}`);返回;} var status = json.parse(stdout);如果(status.mute =='取得的'){port.write('未被发音');否则{port.write( '柔和');}});} const parser = port.pipe(新readline({delimiter:' \ r \ n'})parser.on('数据',函数(数据){if(data =="按下"){console.log('按下。'); checkstatus();}})checkstatus (); setInterval(checkstatus,30000);

这个脚本做了两件事。按下按钮时,Pro Micro将在串口上发送“按下”命令,并且这调用AppleScript来确定当前的缩放静音状态。然后,它将“静音”或“取消静音”命令发送回Pro Micro,触发相应的LED状态。如果我意外静音或取消静音,则还有一个每30秒运行这一点的计时器 - 否则只能在按下键时解析状态。

请回到我的kickstarter - 只是开玩笑,没有Kickstarter,但希望现在你可以自己建立一个。