会社のテンキーが壊れた上に廃盤のため、作成することになった
REVIVE USBというものを見つけた
まずはどうしても必要なのは4キーなのでこれで試そうと思って
タクトスイッチを購入して接続した
こういうものだ。
しかしながらCTRL+キーやALT+キーは設定できるものの必要としている動作はしないことが判明した
あきらめて6*6のマトリクスを組もうとしたが手持ちのテンキーが8*3の為諦めた
どうせ組み合わせられないキーがあることだし。
次に調べて見つけたのがarduino
創作事例が豊富だったので購入したものの、用途が違うものを3つ買ってしまった
まぁ本物ではないから4つで1500円くらい…
結局arduino pro microが用途に合うものだった
600円前後で売ってた
それと
メカニカルテンキー 22キータイプ
縦ライン4 横ライン6で交差するため、普通の基板ならば表裏で組むがキーボードなので裏しか使えない
また、ユニバーサル基板ではキースイッチの足のピッチが違う
調べていると導電銅箔シールと絶縁テープによるベーク板への配線が見つかった
その情報により配線を行った
元々の基板を外し、ベーク板に重ね穴を開ける
その開けた部分、スイッチの足の所と縦ラインに銅箔シールを貼り付け、小信号ダイオードを横ラインに繋いだ
試行錯誤でここまで一ヶ月
書き込むプログラムはほかのブログから拾って登録したものの、動作しない、誤作動などが続きわからなくなったので頼みの綱、知恵袋へ
とても親切な方がプログラムすべて書き直してくださって無事動作した
----------------------------------------------------------------------------
#define KEY_KEYPAD_DIVIDE 0xDC // /
#define KEY_KEYPAD_MULTIPLY 0xDD // *
#define KEY_KEYPAD_SUBTRACT 0xDE // -
#define KEY_KEYPAD_ADD 0xDF // +
#define KEY_KEYPAD_ENTER 0xE0
#define KEY_KEYPAD_1 0xE1
#define KEY_KEYPAD_2 0xE2
#define KEY_KEYPAD_3 0xE3
#define KEY_KEYPAD_4 0xE4
#define KEY_KEYPAD_5 0xE5
#define KEY_KEYPAD_6 0xE6
#define KEY_KEYPAD_7 0xE7
#define KEY_KEYPAD_8 0xE8
#define KEY_KEYPAD_9 0xE9
#define KEY_KEYPAD_0 0xEA
#define KEY_KEYPAD_DECIMAL 0xEB // .
#include "Keyboard.h"
// pin assign
byte output[6] ={3,2,5,6,7,8}; //横
byte input[4] = {10,16,14,15}; //縦
// key matrix shiftregister
byte key_matrix [2][6][4] = {0};
byte key_map [6][4] = {
{KEY_RIGHT_CTRL,KEY_F2,1,KEY_F9}, //1:[Alt]+[F8]→[↑]→[Enter]
{KEY_UP_ARROW,KEY_KEYPAD_DIVIDE,KEY_KEYPAD_MULTIPLY,KEY_BACKSPACE},
{KEY_KEYPAD_7,KEY_KEYPAD_8,KEY_KEYPAD_9,KEY_KEYPAD_SUBTRACT}, //0:NONE
{KEY_KEYPAD_4,KEY_KEYPAD_5,KEY_KEYPAD_6,KEY_KEYPAD_ADD},
{KEY_KEYPAD_1,KEY_KEYPAD_2,KEY_KEYPAD_3,KEY_KEYPAD_ENTER},
{KEY_KEYPAD_0,0,KEY_KEYPAD_DECIMAL,0},
};
void setup() {
Serial.begin(115200);
for(byte i=0;i<6;i++) pinMode(output[i], INPUT_PULLUP);
for(byte j=0;j<4;j++) pinMode(input[j], INPUT_PULLUP);
Keyboard.begin();
delay(1000);
}
void key(byte num){
Keyboard.press(num);
Keyboard.release(num);
}
void loop() {
byte i, j;
for (i = 0; i < 6; i++) {
// out port
pinMode(output[(i+5)%6], INPUT_PULLUP);
pinMode(output[i], OUTPUT);
digitalWrite(output[i], LOW);
delayMicroseconds(100);
for (j = 0; j < 4; j++) {
key_matrix[0][i][j] = key_matrix[0][i][j] << 1;
if (digitalRead(input[j]) == LOW ) key_matrix[0][i][j]++;
}
}
for (i = 0; i < 6; i++) {
for (j = 0; j <4; j++) {
if(((key_matrix[0][i][j]&0b1111)==0b1111) && (key_matrix[1][i][j]==0)){ //off→on、mask:0b1111
key_matrix[1][i][j]=1;
if(key_map[i][j]>7) Keyboard.press(key_map[i][j]);
else if(key_map[i][j]==1){ //[Alt]+[F8]→[↑]→[Enter]
Keyboard.press(KEY_RIGHT_ALT);
Keyboard.press(KEY_F8);
delay(50);
Keyboard.releaseAll();
key(KEY_UP_ARROW);
delay(50);
key(KEY_KEYPAD_ENTER);
}
}else if((key_matrix[0][i][j]&0b1111)==0 && key_matrix[1][i][j]==1){ //on→off
key_matrix[1][i][j]=0;
if(key_map[i][j]>7) Keyboard.release(key_map[i][j]);
}
}
}
delay(1);
}
----------------------------------------------------------------------------