コピペ専用キーボード
はじめに
仕事中データをまとめていたときあまりにもコピペ回数が多く、コピペ専用キーボードを作成したい!というのが事の発端です。(Dvorak配列でC,Vキーが右手側にあるのです。マウスとキーボードのもちかえが頻繁すぎてつらかった)
こういうの欲しい
こういうのが欲しいわけです。左手側に置いておいて、右手でマウス操作、左手でコピペ。
普通ならばそうなっているのですが、当方Dvorak配列使いのためX,C,Vが右手側にあるのです。多少のコピペならば問題ないのですが、データ纏めで一日コピペしていたときにはうんざりしてしまい、コピペ専用キーボードの作成を決心しました。
USB HID
Arduino UNOで出来るんじゃないかと調べてみたら、ちょっと普通にはUSB HIDを実現できないみたい。一方でSTM32F103C8であれば実現できるということで試してみたのがこちらの記事。
ハードウェア
STM32CubeMXでPB12-14へキーアサイン。プルアップ設定にしてスイッチをグランドに落すのみのハードウェア。キースイッチはAliexpressで注文中のため、到着までにソフトの作成を完了させたいというのが目的。
ソフトウェア
内容としては、main()のwhile文を下記にしたのみ。
while (1)
{
/* USER CODE END WHILE */
HAL_Delay(10);
// STSの更新
bKey_Ctrl = !HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_12);
bKey_C = !HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_13);
bKey_V = !HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_14);
if( bKey_Ctrl != bKey_Ctrl_Old ) // 押された or はなされた
{
bUpdate_Ctrl = 1;
}
else
{
if(bUpdate_Ctrl)
{
if( bKey_Ctrl ) // ON
{
keyboardHID.modifiers = 0x01;
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, 0); // LED ON
USBD_HID_SendReport(&hUsbDeviceFS, &keyboardHID, sizeof(struct keyboardHID_t));
}
else
{
keyboardHID.modifiers = 0x00;
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, 1); // LED OFF
USBD_HID_SendReport(&hUsbDeviceFS, &keyboardHID, sizeof(struct keyboardHID_t));
}
bUpdate_Ctrl = 0;
}
}
if( bKey_C != bKey_C_Old ) // 押された or はなされた
{
bUpdate_C = 1;
}
else
{
if(bUpdate_C)
{
if( bKey_C ) // ON
{
keyboardHID.key1 = 0x0C;
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, 0); // LED ON
USBD_HID_SendReport(&hUsbDeviceFS, &keyboardHID, sizeof(struct keyboardHID_t));
}
else
{
keyboardHID.key1 = 0x00;
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, 1); // LED OFF
USBD_HID_SendReport(&hUsbDeviceFS, &keyboardHID, sizeof(struct keyboardHID_t));
}
bUpdate_C = 0;
}
}
// VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
if( bKey_V != bKey_V_Old ) // 押された or はなされた
{
bUpdate_V = 1;
}
else
{
if(bUpdate_V)
{
if( bKey_V ) // ON
{
keyboardHID.key2 = 0x37;
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, 0); // LED ON
USBD_HID_SendReport(&hUsbDeviceFS, &keyboardHID, sizeof(struct keyboardHID_t));
}
else
{
keyboardHID.key2 = 0x00;
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, 1); // LED OFF
USBD_HID_SendReport(&hUsbDeviceFS, &keyboardHID, sizeof(struct keyboardHID_t));
}
bUpdate_V = 0;
}
}
/* USER CODE BEGIN 3 */
// STSの保存
bKey_Ctrl_Old = bKey_Ctrl ;
bKey_C_Old = bKey_C ;
bKey_V_Old = bKey_V ;
}
コンパイル&書き込みすればキチンと動作する。が、上記はDvorak配列向けのキーコードなので一般キー配列では動作しないことに注意して欲しい。
2017/11/05 Ikeda
Author And Source
この問題について(コピペ専用キーボード), 我々は、より多くの情報をここで見つけました https://qiita.com/tlab/items/b362d43f892e9f6eb907著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .