mInitSwitch2();ってありました。PORTAbits.RA3がsw2とsw3に定義されていています(なんで?)。あと、初期化と思われるmInitAllSwitches()がmInitSwitch2()に定義されていて、mInitSwitch2()は、、、何も定義されていないみたいです。duty”ってコメントがあったり、、、このあとに自分で追加したスイッチの定義を付け加えればいいんだよね。(なんか不安)次にメインプログラムですが、こちらはkeyboard.cに一通り書いてあるみたいです。Keyboard(void)関数で行われているようです。具体的にはこんな感じです。....詳しく調べていませんが、HIDTxHandleBusy(lastINTransmission)は”Busy”という文字が入っているので、おそらく前回のデータ送信が終了しているか判断するのかなって思います。それでデータが送れる状態だったら、次にSwitch3IsPressed()でスイッチが押されているか判断して、押されていればデータを詰めてHIDTxPacket()でキーデータを送信する、といった感じでしょうか。いうか、1回のキーデータって、8バイトも送るんですね。知りませんでした(っていうかちょっとは調べろよ)。今回はスイッチをひとつ追加してそのスイッチを押したら普通のキーデータ(aとか)を送信するようにするつもりですが、shiftとかcommandの組み合わせの場合どうするんですかね。これまた後で困りそうな雰囲気。なんとなくいけそうな気もするので(エッ?)、スイッチ回路を追加してみようと思います。回路にスイッチをひとつ付け足すスイッチを付け足す場所ですが、ワイヤ線をあまり引き回したくないので、スイッチを↓に追加したいので、PICのピンとしては、↓のあたりかな。ことで、あんまり根拠はないけど、9番ピンのRC7につなげることにしました。RC4につなげようかなと思ってます。ところでスイッチをつける場合、チャタリング防止とプルアップ(あるいはプルダウン)が必要です。チャタリング防止に関しては、ベースの回路に特にハード的なことはしていないので、まずはスイッチそのままつけることにしました。あと、プルアップですが、PICマイコンはピンによっては設定で内部プルアップを使うことができるのですが、残念ながPIC16F1459はデータシートを確認したところポートA、ポートBにはその設定があるものの、ポートCにはありませんでした。う〜ん、配線引き回してポートA/Bから引っ張ってくるか、ポートCにつなげてプルアップ抵抗をつけるか、ちょっと悩みどころですが、といあえずポートCを使うことにしました。ブレッドボードの上の方は何かの追加回路用に取っておこうと思います。いうことで、RC7(9番ピン)にスイッチ追加、10kオームの抵抗でプルアップ、ということで回路図はこうなりました。EAGLEの回路データもつけておきます。https://github.com/tool-lab/foot-keyboard-trial-switches/回路を組み立てる回路図に沿ってスイッチを追加します。追加部品はタクトスイッチ1つ、10kオーム抵抗1つ、接続用のワイヤ線です。こんな感じになりました。ソースコードに追加するまずはハードウエアプロファイルに新しいスイッチの定義を追加します。PORTCbits.RC7と追加してみました。次にkeyboard.cです。old_own_sw1;と追加しました。Labsを追加しました。あとは動作部分の追加です。0xF0;と書き換えます。own_sw1;と追加しました。0x08);}というように黄色文字部分を追加しました。動作確認!早速プログラムをビルドして、PICに書き込み、動作確認してみます。意外にもすんなり動きました。”abcdefg...”とアルファベットが順番のところが1個目のスイッチ、”aaaaa”とaが続いていることろが、新しく追加したスイッチを押したものです。なんか落とし穴があるのでは、と思っていましたが、うまく動きました。Readerが足だけで操作できる!(スイッチは合計5個必要ですね。5個は足で押せるんでしょうか。