実現したいこと
正常にマイコンに対する書き込みを成功させたい
発生している問題・分からないこと
https://pokecontroller.info/SetLeonardo
上記HPを参考にしていて、6-6まで完了しています。6-7での「書き込み」の際にコンパイルエラーが発生しました。
使用しているソフト等は上記ページのままです。
エラーメッセージ
error
1文字数制限を大幅オーバーしてしまったので補足欄にスクショで貼っておきます。
該当のソースコード
Arduino
1//日本語キーボード 2//https://qiita.com/nak435/items/bbe04300c67c37febb7e 3#define HID_CUSTOM_LAYOUT 4#define LAYOUT_JAPANESE 5#include "HID-Project.h" 6 7#include "Poke-ControllerForLeonardo_Func.h" 8#include "UseKeyboardForNintendoSwitch_Func.h" 9#include <SoftwareSerial.h> 10#include "switch_controller_plus.h" 11#include "auto_command_util_plus.h" 12 13typedef enum 14{ 15 STATE0,//シリアル通信受信→受信成功 16 STATE1,//シリアル通信成功時 17 STATE2,//判定 18} LOOPSTATE; 19 20LOOPSTATE LOOP_STATE; 21 22static String str = ""; 23static String str_buff = ""; 24static char chrread[MAX_BUFFER]; 25static int ProgState = 0; 26 27void setup() { 28 Serial1_Init();//RX←0でのシリアル通信 29 Controller_Init();//コントローラーの準備 30 Keyboard_Init();//キーボードの初期化 31} 32 33void loop() { 34 //状態に応じて切り替える 35 switch (ProgState) 36 { 37 case STATE1: 38 SwitchFunction(); 39 break; 40 default: 41 /* バグ回避を兼ねて状態の初期化を行う */ 42 ProgState = STATE0; 43 break; 44 } 45} 46 47//データが利用可能な時に呼び出される関数(Serial1) 48void serialEvent1() 49{ 50 // one character comes at a time 51 char c = Serial1.read(); 52 53 if (c == '\n') 54 { 55 pc_report_str[idx++] = c; 56 pc_report_str[idx++] = '\0'; 57 ParseLine(pc_report_str); 58 idx = 0; 59 memset(pc_report_str, 0, sizeof(pc_report_str)); 60 ProgState = STATE1; 61 } 62 else if (idx < MAX_BUFFER) 63 { 64 pc_report_str[idx++] = c; 65 } 66}
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
Googleで検索しましたが同じようなエラーが出たパターンが発見できずでした。
補足
> 上記HPを参考にしていて、6-6まで完了しています
参考にしただけで、その通りにやっていないという疑いが濃厚とおもいます。
私の環境下でトレースしてみて動作はともかくコンパイルは完了するので。参照先もライブラリのバージョンにも注意を促すなど気遣いは細やかなほうと思います。
ちなみに、「ほら全部出したからお前直せ」というのであればそれは「丸投げ」と称しまして推奨される行為ではありません。ここは「ITエンジニア特化型」のQ&Aサイトらしいので、今はエンジニアでないにしてもエンジニアであろうとする姿勢ぐらいは見せていただきたいものと思います。
「スクショを撮った」で満足してしまっているようですが、そのスクリーンショットがそもそも情報を全部は表示していないというのに気付かないあたり、内容には全く注意を払っていないことがわかってしまいます。
ありがとうございます。今回初めてプログラミングに触れることになったのでどこかで間違っている可能性があることは失念していました。
あと、丸投げをしたつもりはありませんがそう捉えられてしまい、不快にさせてしまったのなら申し訳ないと思います。
丸投げとは?の話に深入りしても解決にはなんの寄与もしないので棚上げするとして。
ところどころに出現する"Poke-ControllerForLeonardo.zip.510"の文字列から推測するなら...
参照先サイトの[6-2. ダウンロードしたZipファイルを右クリックし、「すべて展開」をします] の作業の意味がわからず、以降の[6-3. Readmeに基本的な使用方法が書いてますので、目を通しておきましょう]以降の作業をzipアーカイブ中のファイルに対して行っているようなことはありませんか? (あるいは、この文の意味がわからなかったりしますか?)
(私の環境ではArduino IDEはVer.2に移行してしまっているので、zip中の.inoファイルを開いた場合IDEの1.8.xでどういう挙動になるか確認できません)
ありがとうございます。僕の理解としては、当該zipファイルの「すべて展開」ボタンをクリックして、中のファイルを展開する。だと思っていました。
今確認のため同じファイルの「すべて展開」をしてみたところ、「宛先には同じ名前のファイルが99個存在します」といメッセージが表示されている状態です。
(「すべて展開」の操作をしたことには疑義はありません)
では、そのあとの6-3/6-4の項目ではどこにあるファイルを操作していますか?
6-3、6-4ともにダウンロードした「poke-controller for leonaldo」から操作してます。
「展開した」ではなく「ダウンロードした」ですか?
聞き方を変えましょう。
readme(.txt)あるいはPoke-ControllerForLeonardo(.ino)をエクスプローラ上で右クリックして出てくるメニューで[プロパティ]を選んだとき、出てくるダイアログで[場所]の項目はなんと表示されていますか。
Poke-ControllerForLeonaldo(.ino)は「Poke-ControllerForLeonardo/Arduino/Poke-ControllerForLeonardo/」
redmr(.txt)は「Poke-ControllerForLeonardo/」
です。
今回はzipファイルをダウンロードしましたが、zipというのはいわば「ファイル群を箱詰め梱包したパッケージ」で、(一般には)ファイルのやりとりのために使い、そこに入っているファイルを直接操作することはしません。Windowsの「お節介」でzipのまま中身が見えたり多少いじれたりはしますが...
なので、普通は(というか原則として)中身のファイルに用があるときは[展開]して使用します([展開]は、かつては[解凍]という呼び方が主流だったこともあります。英語だとunzipとかunarchiveと言ったりもします)。
今回であれば、6.2で[すべて展開...]すると、Poke-ControllerForLeonardo.zipと同じディレクトリ(フォルダ)階層にPoke-ControllerForLeonardoというディレクトリ(フォルダ)が生成されて、その中に中身のファイルがあるはずです(Windowsのデフォルト設定では展開完了時にこのフォルダがエクスプローラで開かれます)。
混乱があるのなら、Poke-ControllerForLeonaldo(.zip)ファイルはこの段階で消してしまっても構いません。6.3以降で使用するのは、ここで[展開]された方のファイルです。これらの[プロパティ]の[場所]を見ると、[C:\(以下環境により異なる)]となっているはずです。
[6.4]ではこのPoke-ControllerForLeonaldo(.ino)をArduino IDEで開いて6.7の作業を行ってみてください。
もしそれで解決したならば、今回のトラブルはzipの中身から直接ビルドを行おうとしたため、という結論になるかと思います。
この辺の話は決して「プログラミング」ではなくて、PCの使い方の(ちょっと踏み込んでいるかも知れませんが)一般論だとも思うのですが...(なので参照先ページでも特別な注意はされていなかった)
なるほどです。展開すると別のフォルダができることを知らず、そのフォルダがそのまま展開されたフォルダになると勘違いしていました。
教えていただきありがとうございます。
ありがとうございました。一旦現在出ていたエラーは解消しました。
一旦...というのは?
質問した事項が解決したのなら、(私が回答書くのも面倒なので)やったことをまとめて回答書いて[自己解決]にでもしておいてください。
プログラムの動作がおかしいなど、この質問とは別の問題が出てきたのならそれは別の質問として建てるべきと思います。

あなたの回答
tips
プレビュー