最近やる気がなくて、気が向いた時にちょこっと考える程度なのでなかなか進まないけど、長短点メモリー機能を実装した。
DotDash.csとSineWave.csは(1)と変わらないので省略。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 |
using NAudio.Wave; using System; using System.Threading.Tasks; using System.Windows.Forms; //serialPortのDtrEnableをtrue、PortNameをCOM3(デスクトップPC)に設定しておく namespace elekey2024_1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private bool execute; private int keystat = 0; private WaveOut waveOut; //dummy private Task dot, dash; private void btn_start_Click(object sender, EventArgs e) { if (!execute) { execute = true; btn_start.Text = "停止"; var sineWaveProvider = new SineWaveProvider32(); sineWaveProvider.Frequency = 800; sineWaveProvider.Amplitude = 0.5f; waveOut = new WaveOut(); waveOut.Init(sineWaveProvider); waveOut.Play(); waveOut.Volume = 0; timer1.Start(); } else if(execute) { execute = false; btn_start.Text = "開始"; waveOut.Stop(); waveOut.Dispose(); waveOut = null; timer1.Stop(); } btn_start.Refresh(); while(execute) { if(keystat != keydat) { keystat = keydat; switch (keystat) { case 1: dot = dotproc(); break; case 2: dash = dashproc(); break; case 0: break; } } Application.DoEvents(); } } private void Form1_Load(object sender, EventArgs e) { try { if (serialPort1.IsOpen == true) { return; } serialPort1.Open(); } catch (Exception ex) { MessageBox.Show(ex.Message); } execute = false; } //interval 5ms keydat 0:space 1:dot 2:dash private int keydat = 0; private void timer1_Tick(object sender, EventArgs e) { if (serialPort1.CtsHolding) { keydat = 2; } else if (serialPort1.DsrHolding) { keydat = 1; } else { keydat = 0; } } private void Form1_FormClosed(object sender, FormClosedEventArgs e) { serialPort1.Close(); } } } |
短点や長点の送出中もタイマーを使って5ms毎にキーの状態をkeydatに保管するようにした。
世間一般に言われているメモリー機能と;ちょっと違うかもしれないけど、一応なにもない時よりは打ちやすくなったような気がする。
次は、スクイズ機能を実装してみる。