Arduino Leonardo microプログラム(USB HID KeyBoard対応)

Arduino

ArduinoマウスのライブラリKey_codepin_Mode 和文もあるね

Window10:注意
書き込み後の再書き込みでCOMポートが接続から外れる。ツールの「シリアルポート」で再度有効なCOMポートを指定して書き込むこと。

1.外付スイッチでのキー入力
 GPIOピンはモード指定してるが、浮いている状態のようで手を近づけただけで入力ありとなってしまう。ノイズのように入るのかどんどん入力されてキー入力で溢れる。外付け抵抗でプルアップが必要だ。今回は↑と↓とCTRL+HOMEキーを足で操作できるようにした。マウスを机の上で操作するのってこの頃限界なんだ。手をブラント下げてソースやPDFの資料を読めたらいいなとずっと思っていた。まだフットスイッチをどうするか思案中だが実験的にはいい感じだ。

キーのアップダウンだけだとスムースさに欠けるな。そこでマウスのセンターボタンのスクロールを使用してみた。普段使いのロジクール超高速スクロールがないと仕事にならないのでこれを足でを目指す。しっくりくるまで頑張る。出来たらこれをケースというか操作しやすいようにしたい。
3Dプリンタで作るいうのもいいかもね。段々家内工業に近づいている。

#include "Keyboard.h"
#include "Mouse.h"

// send data when mouse wheel is move:
const int scrollWheelStop = 0x00;
const int scrollWheelUp   = 0x01;
const int scrollWheelDown = 0xFF;
const int scrollInterval = 500;

const int mouseScrollModeButton = 6;

#define Button1 7
#define Button2 5
//#define Button3 6
#define Button4 10
bool flag = false;
int const dtm = 20; //-- 20msec
boolean scrollMode = false; 

void setup() {
    pinMode(Button1, INPUT_PULLUP);
    pinMode(Button2, INPUT_PULLUP);
    pinMode(Button4, OUTPUT);
    pinMode(mouseScrollModeButton, INPUT_PULLUP);     // the mouse mode change Button pin
    flag = true;
    Keyboard.begin();
    Mouse.begin();
}

void loop() {
    if(digitalRead(mouseScrollModeButton) == LOW)
    { 
      if( flag == true )
      {
        Mouse.move(0,0, scrollWheelUp);
      }
      else
      {
        Mouse.move(0,0, scrollWheelDown);
      }
        delay(20);
        digitalWrite( Button4,HIGH);
    }

    if(digitalRead(Button1) == LOW)
    { 
      Keyboard.press(KEY_UP_ARROW);
      delay(dtm);
      while(digitalRead(Button1) == LOW);
      digitalWrite( Button4,LOW);
      Keyboard.releaseAll();
      flag = true;
    }
    
    if(digitalRead(Button2) == LOW)
    {
      Keyboard.press(KEY_DOWN_ARROW);
      delay(dtm);
      while(digitalRead(Button2) == LOW);
      digitalWrite( Button4,LOW);
      Keyboard.releaseAll();
      flag = false;
    }
}

 

#include "Keyboard.h"

#define Button1 7
#define Button2 5
#define Button3 6
#define Button4 10
bool flag = false;
int const dtm = 20; //-- 20msec

void setup() {
    Keyboard.begin();
    pinMode(Button1, INPUT_PULLUP);
    pinMode(Button2, INPUT_PULLUP);
    pinMode(Button3, INPUT_PULLUP);
    pinMode(Button4, OUTPUT);
    flag = true;
}

void loop() {
    if(digitalRead(Button3) == LOW)
    { 
      Keyboard.press(KEY_LEFT_CTRL);
      Keyboard.press(KEY_HOME);
      while(digitalRead(Button3) == LOW);
      digitalWrite( Button4,HIGH);
      delay(dtm);
      Keyboard.releaseAll();
    }

    if(digitalRead(Button1) == LOW)
    { 
      Keyboard.press(KEY_UP_ARROW);
      delay(dtm);
      while(digitalRead(Button1) == LOW);
      digitalWrite( Button4,LOW);
      Keyboard.releaseAll();
    }
    
    if(digitalRead(Button2) == LOW)
    {
      Keyboard.press(KEY_DOWN_ARROW);
      delay(dtm);
      while(digitalRead(Button2) == LOW);
      digitalWrite( Button4,LOW);
      Keyboard.releaseAll();
    }
}

 

2.Serial.read()
 シリアルはUSBのシリアルでありその先はPCへのキーボード入力なのだ。なのだと言ったがここがピンときていない。Aruino IDEのシリアルモニタも送信だけ有効でここにキー入力すると、それが返信されているように見えるので混乱する。
外部から押されたを確認できるのでその反応としてキーコードを入力されるもの(エディターの編集画面とかワープロの編集画面へのキー入力として扱われる・・・・。分かんねえ(^^;

 

No tags for this post.
タイトルとURLをコピーしました