技術

Arduinoでモールスキーボード ソースコード公開

イノシシと冒険

Arduinoでモールスキーボード ソースコード

Arduinoでモールス信号「・」「-」をキーボード入力にできるソースコードを公開します。以下を参考にすると、作れると思います。

// モールス信号発信機
// 作成:2019/07/24
// 参考:https://mgt.blog.so-net.ne.jp/2016-01-14
#include  "Keyboard_jp.h"
const int BUTTON_L = 10;//「-」
const int BUTTON_R = 8;//「・」
const int LEDPIN_L = 12;
const int LEDPIN_R = 2;
const int LEDPIN_M = 4;
const int GNDPIN = 13;
int btnVal = 0;//ボタンの状態
int oldPush = 0;//最後に押した
int writeMode = 0;// 入力モード(1:モールス 2:文字)
void setup(){
  Keyboard.begin();
  Serial.begin(9600);
  pinMode(BUTTON_L,INPUT);
  pinMode(BUTTON_R,INPUT);
  pinMode(LEDPIN_L,OUTPUT);
  pinMode(LEDPIN_R,OUTPUT);
  pinMode(LEDPIN_M,OUTPUT);
  pinMode(GNDPIN,OUTPUT);
  digitalWrite(GNDPIN,LOW);//HIGHにすると壊れる
  // モード選択
  while(writeMode==0){
    digitalWrite(LEDPIN_M,HIGH);
    btnVal = digitalRead(BUTTON_L);//左ボタン 01←2進数
    btnVal += digitalRead(BUTTON_R)*10;//右ボタン 10←2進数
    switch(btnVal){
      case 1:digitalWrite(LEDPIN_L,HIGH);writeMode=1;break;
      case 10:digitalWrite(LEDPIN_R,HIGH);writeMode=2;break;
    }
    digitalWrite(LEDPIN_M,LOW);
  }
}
void loop(){
  btnVal = digitalRead(BUTTON_L);//左ボタン 01←2進数
  btnVal += digitalRead(BUTTON_R)*10;//右ボタン 10←2進数
  // チャタリング防止 0.1秒の待機
  if(btnVal!=0 && oldPush==0){
    // ここに処理を書く
    switch(btnVal){
      case 1:digitalWrite(LEDPIN_L,HIGH);if(writeMode==1){Keyboard.write(KEY_KANA);Keyboard.write('-');Keyboard.write(KEY_RETURN);}else{Keyboard.write('l');}break;
      case 10:digitalWrite(LEDPIN_R,HIGH);if(writeMode==1){Keyboard.write(KEY_KANA);Keyboard.write('/');Keyboard.write(KEY_RETURN);}else{Keyboard.write('r');}break;
      case 11:digitalWrite(LEDPIN_M,HIGH);if(writeMode==1){Keyboard.write(KEY_RETURN);}else{Keyboard.write('m');}break;
    }
    Keyboard.releaseAll();
    // テスト用↓
    Serial.print("BUTTON_L:");Serial.println(btnVal%10);
    Serial.print("BUTTON_R:");Serial.println(btnVal/10);
    Serial.print("BUTTON_M:");Serial.println(btnVal/11);
    oldPush = 1;
    delay(100);//LED点灯待ち
  }
  else if(btnVal==0 && oldPush==1){
    oldPush = 0;
    digitalWrite(LEDPIN_L,LOW);digitalWrite(LEDPIN_R,LOW);digitalWrite(LEDPIN_M,LOW);
  }
  delay(50);
}
ABOUT ME
usatodo
仕事を充実させ、生活を楽しむ「仕事術」について模索中。人を助ける技術を伝承できるようなエンジニアを目指しています。うさみみが生えた白い生物が、日々、電子・情報処理技術に傾倒しています。趣味で気分転換に思い切った活動をしてしまうことも。サイトでは、生活に役立つ小ネタやスマホの豆知識など、いつもの暮らしがちょっとだけ便利になる情報をお届けします。

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA