Ein Knopf musste also her, der automatisch was startet. In der Bastelkiste hatte ich noch mehrere AVR USB-Sticks, wie diesen:
Hat beim netten Chinesen auf eBay nur 3,50 oder so gekostet und ist eine tolle Spielwiese: AT90usb162 Microcontroller, ein Taster, zwei LEDs – was will man mehr? Das Tasterchen entsprach aber nun gar nicht meinen eher plakativen Vorstellungen, also habe ich den USB-A Stecker entfernt und durch ein langes USB-Kabel ersetzt. An den Taster habe ich zwei Schaltdrähte drangelötet und an den schließenden Taster eines Pilztasters geklemmt. Das Ganze dann mit doppelseitigem Klebeband im Innenleben fixiert und mit Kabelbinder und etwas Sugru die Zugentlastung gebastelt:
Das sieht doch schon mal gut aus. Nun noch Firmware schreiben. Auch das war recht einfach. Ich habe als Startpunkt ein Stück Code für den Teensy verwendet, der demonstriert, wie man ein USB-HID device programmiert und das einfach nach meinen Bedürfnissen angepasst. Hier das Hauptprogramm:
/*
* DER KNOPF
*/
#include <avr/io.h>
#include <util/delay.h>
#include "usb_keyboard.h"
#define CPU_PRESCALE(n) (CLKPR = 0x80, CLKPR = (n))
int main(void){
uint8_t lock; // locking flag
CPU_PRESCALE(0);
DDRD &= ~(1<<PD7); // configure PD7 as input
PORTD |= (1<<PD7); // turn on pull-up
usb_init();
while (!usb_configured()); // wait for host
_delay_ms(1000); // sleep 1 more second, just in case
lock = 0; // unlock key
// job loop
while (1) {
if ( !(PIND & (1 << PIND7)) ){
// key pressed
if ( !lock ) {
lock = 1; // lock key
// type command
usb_keyboard_press(KEY_R, KEY_LEFT_GUI);
_delay_ms(300); // wait for dialog to open
usb_keyboard_press(KEY_D, 0);
usb_keyboard_press(KEY_E, 0);
usb_keyboard_press(KEY_R, 0);
usb_keyboard_press(KEY_K, 0);
usb_keyboard_press(KEY_N, 0);
usb_keyboard_press(KEY_O, 0);
usb_keyboard_press(KEY_P, 0);
usb_keyboard_press(KEY_F, 0);
usb_keyboard_press(KEY_PERIOD, 0);
usb_keyboard_press(KEY_B, 0);
usb_keyboard_press(KEY_A, 0);
usb_keyboard_press(KEY_T, 0);
usb_keyboard_press(KEY_ENTER, 0);
}
} else {
// key released
lock = 0; // unlock key
}
_delay_ms(100); // delay for debouncing
}
}
Steckt man das Ding nun an den Rechner, meldet sich der Knopf als Human Interface Device an - konkret behauptet er eine Cherry Tastatur zu sein (kann man in usb_keyboard.c konfigurieren). Wenn man ihn drückt, "tippt" er dann zunächst Win+R (also "run command" unter Windows) und danach "DERKNOPF.BAT". Nun muss man also nur noch dafür sorgen, dass ein batch File dieses Namens im Pfad liegt (z.B. c:\Benutzer\philipp\) und schon tut der Knopf sein Werk.
Keine Kommentare:
Kommentar veröffentlichen