Ja, ich rufe jeden Tag Zoom an. Ja, ich habe ein Kind, das diese Anrufe oft stört. Instagram Ad Delivery Algorithmus, Sie haben gewonnen, ich brauche diesen Button.
Aber ich habe Vorurteile. Instagram bewirbt ein Projekt mit Kickstarter. Außerdem möchte ich nicht zum Anzeigenumsatz von Facebook beitragen, selbst wenn ich auf dieses Video klicke. Jenny Odells Ausdruck "Es gibt keine freien Stunden" beschreibt meine Sicht auf die Produktqualität in Instagram-Anzeigen vollständig. Außerdem ist mein Finanzierungslimit für Kickstarter-Projekte fast erschöpft.
Ich habe viele Projekte auf Kickstarter unterstützt, und manchmal erinnerte mich das Ergebnis dieser Projekte an den Hamburger, den Michael Douglas in dem Film "Ich habe genug!"
Lassen Sie uns also selbst einen solchen Knopf zusammenstellen.
Das erste, woran ich denken muss, ist, welchen Knopf ich drücken möchte.
Ich liebe Tastaturen mit Cherry MX-Schaltern. Es gibt drei Arten von mechanischen Schaltern: linear, taktil und klickend. Linear - Der einfachste Schaltertyp, der sich fast ohne Rückkopplung auf und ab bewegt. Die taktilen Schalter haben einen Vorsprung in der Mitte des Hubs, mit dem Sie fühlen können, wenn eine Taste gedrückt wird. Und klickbare Schalter haben eine stärkere taktile Rückmeldung UND erzeugen beim Drücken ein hörbares Klicken.
Normalerweise würden wir einen Switch-Tester kaufen , um herauszufinden, welcher Typ auf uns reagiert . und wir würden auch unsere Kollegen fragen, welchen Klang die Tastatur erzeugen soll, damit sie uns nicht töten. Aber wir sind mitten in der COVID-Pandemie, also gibt es keine Kollegen! Entscheiden Sie sich für einen Cherry MX Blue-Schalter mit komfortablem taktilem Feedback, das extrem laut ist. Die Cherry MX-Website nennt diesen Schalter "anklickbar und sichtbar", aber dies wird noch sehr wenig gesagt.
Sieht hübsch aus, aber Sie könnten sich etwas Besseres vorstellen. Wenn ich glücklich bin, den Cherry MX Blue-Schalter zu drücken, wäre es nicht noch schöner, den komisch großen Cherry MX Blue zu drücken?
Und das ist der Novelkeys Big Switch .
Es ist in jeder Dimension 4-mal größer und im Volumen 64-mal größer als ein herkömmlicher Schalter. Es hat sogar eine riesige Kappe!
Leider wird der Big Switch nicht in einem Gehäuse verkauft, so dass ich 3D-Druck verwenden musste. Auf Thingiverse wurde ein wunderschöner Fall gefunden: NovelKeys Big Switch Case . Es lohnt sich immer, nach Remixen zu suchen, nur für den Fall, dass jemand das ursprüngliche Design verbessern möchte. In diesem Fall gab es einen Remix , der ein Fach für das Pro Micro hinzufügte, und der Schalter passt enger, also habe ich ihn gedruckt.
Jetzt, wo wir einen Koffer haben, brauchen wir eine Platine, die wir hineinstecken und am Schalter befestigen.
Das Pro Micro verfügt über einen ATmega32U4-Chip zur Emulation eines USB-HID-Geräts wie einer USB-Tastatur. Außerdem ist dieses Board klein.
An der Unterseite des großen Schalters befinden sich zwei Metallkontakte.
Wenn eine Taste im Schalter gedrückt wird, wird ein Stromkreis zwischen diesen beiden Kontakten geschlossen.
Werfen wir einen Blick auf das Pin-Layout von Pro Micro:
Sie können GND an einen Metallstift und Pin 2 an den anderen anschließen. Pin 2 ist ein digitaler E / A-Pin, der HIGH anzeigt, wenn eine Taste gedrückt wird, und LOW, wenn nicht.
Es wäre auch großartig, eine Art visuelle Anzeige des Stummschaltungsstatus zu haben, damit Sie eine LED hinzufügen können.
Ich habe eine 10mm LED bestellt:
Und ein 220 Ohm Widerstand:
Das lange Bein der LEDs ist mit PWR und das kurze Bein mit GND verbunden. Wir werden einen Widerstand zwischen das lange Bein und den anderen Stift einfügen, um die Strommenge zu reduzieren. Ich habe Pin 9 am unteren Rand der Platine ausgewählt. Ich habe das kurze Bein mit GND verbunden. Ich fand diese Seite über LEDs und Widerstände hilfreich .
Ich habe diesen 20 AWG Draht zwischen die Platine und den Schalter gelötet:
Das Ergebnis ist die folgende Konstruktion:
Lassen Sie uns einfach alles in unsere gedruckte Hülle stecken:
Jetzt müssen wir den Code schreiben.
Ich habe mit dem Code begonnen, den Sparkfun geschrieben hat, um einen riesigen Speichern-Button zu erstellen, und ihn ein wenig modifiziert.
Das Prinzip lautet wie folgt: Wenn Sie eine Taste drücken, wird eine Tastenkombination Zoom gesendet, um den Sound ein- und auszuschalten (auf dem Mac ist es Cmd-Shift-A). Sie müssen die Zoomeinstellungen ändern, damit diese Tastenkombination auch dann erkannt wird, wenn der Zoom unscharf ist. Aktivieren Sie das Kontrollkästchen Globale Verknüpfung aktivieren :
Wir möchten auch die LED nach jedem Tastendruck ein- oder ausschalten. Ich entschied, dass die LED analog zum "On Air" -Licht sein würde - wenn die blaue LED leuchtet, ist mein Ton an und die Leute hören, was ich sage.
Wenn Sie die LED jedoch jedes Mal ein- und ausschalten, wenn Sie eine Taste drücken, wie können Sie dann mit dem Stummschaltungsstatus im Zoom selbst synchron bleiben?
Der Komfort des Pro Micro besteht darin, dass es auch über eine serielle Verbindung verfügt. Es wird normalerweise zum Drucken von Debug-Informationen in der Arduino IDE verwendet, aber wir können es verwenden, um sie mit dem Audio-On-Status in Zoom synchron zu halten.
Hier ist der Code, den wir in Pro Micro selbst laden:
#include "Keyboard.h"
// OS parameters
typedef enum {
LINUX,
WINDOWS,
MAC
} os_types;
// Change this to your operating system
const os_types OS = MAC;
// Pins
const int btn_pin = 2;
const int led_pin = 9;
// Constants
const int debounce_delay = 50; // ms
// Globals
int btn_state = HIGH;
int btn_prev = HIGH;
unsigned long last_debounce_time = 0;
int os_ctrl;
int led_state = LOW;
void setup() {
Serial.begin(57600); // opens serial port, sets data rate to 57600 bps
// Set up LED and button pins
pinMode(btn_pin, INPUT_PULLUP); // Set the button as an input
pinMode(led_pin, OUTPUT);
digitalWrite(led_pin, led_state);
// Begin keyboard
Keyboard.begin();
// Switch to correct control/command key
switch(OS){
case LINUX:
case WINDOWS:
os_ctrl = KEY_LEFT_CTRL;
break;
case MAC:
os_ctrl = KEY_LEFT_GUI;
break;
default:
os_ctrl = KEY_LEFT_CTRL;
break;
}
// Get initial timestamp
Serial.println("started");
}
void loop() {
// Read current state of the button
int btn_read = digitalRead(btn_pin);
// Remember when the button changed states
if ( btn_read != btn_prev ) {
last_debounce_time = millis();
}
// Wait before checking the state of the button again
if ( millis() > (last_debounce_time + debounce_delay) ) {
if ( btn_read != btn_state ) {
btn_state = btn_read;
if ( btn_state == LOW ) {
// Send cmd+shift+a
Keyboard.press(KEY_LEFT_SHIFT);
Keyboard.press(os_ctrl);
Keyboard.press('a');
delay(100);
Keyboard.releaseAll();
Serial.println("pressed");
if (led_state == LOW) {
led_state = HIGH;
} else {
led_state = LOW;
}
digitalWrite(led_pin, led_state);
}
}
}
// Remember the previous button position for next loop()
btn_prev = btn_read;
if (Serial.available() > 0) {
String incomingString = Serial.readStringUntil('\n');
if (incomingString == "muted") {
led_state = LOW;
} else if (incomingString == "unmuted") {
led_state = HIGH;
}
digitalWrite(led_pin, led_state);
}
}
Als nächstes können wir ein Applescript hinzufügen, um den aktuellen Status des Zooms zu melden. Ich habe ein Zoom Streamdeck-Plug-In gefunden , das das ursprüngliche Applescript enthielt, und es so geändert, dass gemeldet wird, ob Zoom geöffnet ist und wie der Soundzustand ist. Ich habe auch das Skript geändert, um JSON auszugeben.
set zoomStatus to "closed"
set muteStatus to "disabled"
tell application "System Events"
if exists (window 1 of process "zoom.us") then
set zoomStatus to "open"
tell application process "zoom.us"
if exists (menu bar item "Meeting" of menu bar 1) then
set zoomStatus to "call"
if exists (menu item "Mute audio" of menu 1 of menu bar item "Meeting" of menu bar 1) then
set muteStatus to "unmuted"
else
set muteStatus to "muted"
end if
end if
end tell
end if
end tell
copy "{\"mute\":\"" & (muteStatus as text) & "\",\"status\":\"" & (zoomStatus as text) & "\"}" to stdout
Wenn wir es jetzt während eines Aufrufs von Zoom ausführen, gibt es ungefähr Folgendes aus:
$ osascript get-zoom-status.scpt
{"mute":"muted","status":"call"}
Dann habe ich eine kleine Anwendung in Node geschrieben, die als Vermittler zwischen Pro Micro und diesem Skript verwendet wird:
const { exec } = require('child_process');
const SerialPort = require('serialport');
const Readline = require('@serialport/parser-readline');
const port = new SerialPort('/dev/tty.usbmodemHIDPC1', {
baudRate: 57600
});
var checkStatus = function() {
console.log('Checking status...');
exec('osascript get-zoom-status.scpt', (error, stdout, stderr) => {
if (error) {
console.error(`exec error: ${error}`);
return;
}
var status = JSON.parse(stdout);
if (status.mute == 'unmuted') {
port.write('unmuted');
} else {
port.write('muted');
}
});
}
const parser = port.pipe(new Readline({ delimiter: '\r\n' }))
parser.on('data', function (data) {
if (data == "pressed") {
console.log('Button pressed.');
checkStatus();
}
})
checkStatus();
setInterval(checkStatus, 30000);
Dieses Skript macht zwei Dinge. Wenn die Taste gedrückt wird, sendet sie über die serielle Schnittstelle einen Befehl „gedrückt“ an die Pro Micro-Karte, auf der Applescript ausgeführt wird, um den aktuellen Status des Audios in Zoom zu ermitteln. Anschließend wird ein Befehl „Piepton aus“ oder „Piepton ein“ an die Pro Micro-Karte gesendet, wodurch die LED in den entsprechenden Zustand wechselt. Ich habe auch einen Timer erstellt, der alle 30 Sekunden ein Skript ausführt, falls ich den Ton versehentlich über die Zoom-Oberfläche und nicht über die Schaltfläche stummschalte oder die Stummschaltung aufhebe. Andernfalls wird der Status nur aktualisiert, wenn die Taste gedrückt wird.
So sieht die Schaltfläche aus, wenn sie in einem Anruf über Zoom verwendet wird:
Bitte unterstützen Sie meinen Kickstarter - nur ein Scherz, ich habe keinen Kickstarter, aber hoffentlich können Sie jetzt selbst einen erstellen.
Werbung
Bestellen Sie einen Server und arbeiten Sie sofort! Erstellung eines VDS jeder Konfiguration innerhalb einer Minute. Epos :)