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);
}