忍者ブログ

業務テンキー作成

テンキー自作

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

テンキー自作

会社のテンキーが壊れた上に廃盤のため、作成することになった
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);
}
----------------------------------------------------------------------------
PR

コメント

プロフィール

HN:
No Name Ninja
性別:
非公開

カテゴリー

最新記事

P R