質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
シリアルポート

シリアルポートは一度に一ビットごと移行される物理的なインターフェイスです。一般的には、9ピンのd-subコネクタであるRS-232を指します。

Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

マイコン

マイクロコンピュータの略で、CPUにマイクロプロセッサを用いたコンピュータのこと。家電製品、電磁機器などの制御に用いられています。単体でコンピュータとしての機能を一通り備えています。 現代のパーソナルコンピュータに近く、同時期のメインフレームやミニコンピュータと比べ、小さいことが特徴です。

Q&A

1回答

332閲覧

Poke-controllerでArduino LeonardoをPCが認識しないエラーを解決したい

LaKS_917

総合スコア0

シリアルポート

シリアルポートは一度に一ビットごと移行される物理的なインターフェイスです。一般的には、9ピンのd-subコネクタであるRS-232を指します。

Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

マイコン

マイクロコンピュータの略で、CPUにマイクロプロセッサを用いたコンピュータのこと。家電製品、電磁機器などの制御に用いられています。単体でコンピュータとしての機能を一通り備えています。 現代のパーソナルコンピュータに近く、同時期のメインフレームやミニコンピュータと比べ、小さいことが特徴です。

0グッド

0クリップ

投稿2024/09/14 16:32

編集2024/09/15 01:14

実現したいこと

Arduino IDEでArduino LeonardoにPoke-controllerのスケッチを書き込みたい。

発生している問題・分からないこと

Poke-controllerForLeonardoをマイコンボードに書き込む際に「スケッチの書き込み中にエラーが発生しました」というメッセージが出てしました。
参考にしているサイトを基にPCのデバイスマネージャーを確認したところ、Arduino Leonardoを認識できていないことが分かりました。
正常であれば、「Arduino Leonardo(COM3)」と表示されるはずなのですが、自分のPCでは「USB cereal port(COM3)」と表示されている状態です。
Googleで一通り解決方法を調べて実行したのですが、認識されませんでした。

エラーメッセージ

error

1スケッチの書き込み中にエラーが発生しました 2 3avrdude: butterfly_recv(): programmer is not responding 4avrdude: butterfly_recv(): programmer is not responding 5avrdude: butterfly_recv(): programmer is not responding 6avrdude: butterfly_recv(): programmer is not responding 7avrdude: butterfly_recv(): programmer is not responding 8Found programmer: Id = "�"; type = � 9 Software Version = i.

該当のソースコード

//日本語キーボード //https://qiita.com/nak435/items/bbe04300c67c37febb7e #define HID_CUSTOM_LAYOUT #define LAYOUT_JAPANESE #include "HID-Project.h" #include "Poke-ControllerForLeonardo_Func.h" #include "UseKeyboardForNintendoSwitch_Func.h" #include <SoftwareSerial.h> #include "switch_controller_plus.h" #include "auto_command_util_plus.h" typedef enum { STATE0,//シリアル通信受信→受信成功 STATE1,//シリアル通信成功時 STATE2,//判定 } LOOPSTATE; LOOPSTATE LOOP_STATE; static String str = ""; static String str_buff = ""; static char chrread[MAX_BUFFER]; static int ProgState = 0; void setup() { Serial1_Init();//RX←0でのシリアル通信 Controller_Init();//コントローラーの準備 Keyboard_Init();//キーボードの初期化 } void loop() { //状態に応じて切り替える switch (ProgState) { case STATE1: SwitchFunction(); break; default: /* バグ回避を兼ねて状態の初期化を行う */ ProgState = STATE0; break; } } //データが利用可能な時に呼び出される関数(Serial1) void serialEvent1() { // one character comes at a time char c = Serial1.read(); if (c == '\n') { pc_report_str[idx++] = c; pc_report_str[idx++] = '\0'; ParseLine(pc_report_str); idx = 0; memset(pc_report_str, 0, sizeof(pc_report_str)); ProgState = STATE1; } else if (idx < MAX_BUFFER) { pc_report_str[idx++] = c; } }

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

シリアル変換器が認識されているようだったので、シリアル変換器⇔Arduino Leonardoの配線を中心に動いてみました。
・配線の繋ぎ直し、及び導線の全交換
・USBポートを変更
・他のUSBポートに入っているUSBを全て抜く
・Arduino IDEの再起動
・PCの再起動
・全作業工程の再実行

配線方法に関しては下記参考記事では
シリアル変換器TXD ⇔RX←0Leonardo
シリアル変換器GND ⇔GNDLeonardo
という繋ぎ方になっているのですが、別の方の記事を見たところ上記の繋ぎ方に加えて
シリアル変換器TXD ⇔RX←0Leonardo
シリアル変換器GND ⇔GNDLeonardo
シリアル変換器RXD⇔RX←1Leonardo
という繋ぎ方をしている方もおられたため、両方を試しています。

Arduino Leonardoは1機しか持っていないため、マイコンボード本体の故障については検証できていません。

補足

https://pokecontroller.info/SetLeonardo

上記記事を基に作業しています。

今回使用しているArduino Leonardoは新品未使用品で、こちらではまだ一回も書き込みを行っていない状態のものになります。
マイコンボード本体はONランプが点灯、Lランプが点滅しています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

thkana

2024/09/15 00:35

https://teratail.com/questions/gbv7w3f1dmihfx の続きですね。関連質問とはそれぞれリンクを張っておくとよいかと思います。ところで、前の質問はよろしければ解決済みにしておいてください。 トラブったときは状況をシンプルにするのが定石です。なので、まずArduinoからUSB以外の全ての結線を外しましょう。 Lランプが点滅というのは、多分購入ままで一度も書き込みをしていないということかと思いますが、その理解でいいですか? (過去に何をしたか、どうだったか、というのは大抵に於いて意味のある情報です。他人に相談するときはできるだけ伝えてください) 一度も書き込みできず、認識しない場合に結構あるのがPC-Arduinoを繋いでいるケーブルが充電専用(通信できない)でしたというオチです。 なんらかの(他の)USB機器をそのケーブルで接続して、PC側で認識することを確認してください。 たまに、USBのコネクタとの嵌合(かみ合わせ)の関係で接触不良が起こることもあります。USBケーブルを交換してみる、というのもやってみることの一つでしょう。 LeonardoはUSBデバイスとしてのプログラムもできるので、書き込み内容によってはCDC(シリアルデバイス)として見えなくなることもあります。そのような時のために、基板上のリセットボタンをダブルクリックすると数秒間(10秒弱だったか?)「ブートローダーモード」になって、とにかく書き込みができるようにシリアルデバイスとして見えるようになる機能が入っています。今回の状況にはちょっとあたらないところもありますが、とりあえず試してみることはできるでしょう。このモードではLランプが「ふわふわと」点滅し、ポート番号は通常接続と違ったりします。Arduino IDEにはブートローダーモードでのポート番号を設定し、書き込み時タイミングを見計らってリセットをダブルクリックしてみてください。 なお、ご存じとは思いますが、 > 正常であれば、「Arduino Leonardo(COM3)」と表示されるはず COMポート番号は、過去にそのPCにUSBシリアル機器をつないだことがあるかどうかで変わります。繋いでみるまでは「期待値」が特定できません。(私の仕事用のPCは新しい機器を繋ぐと今はCOM30番台になります。同僚は番号が3桁になったのでさすがにレジストリをいじってリセットした、と言っていました) そもそもとして、Leonardoを認識していないのならAruduino IDEでのシリアルポート設定も適切には出来ないはずなのになにを設定したのだろう? と思ってしまったりもします。
LaKS_917

2024/09/15 01:12

ありがとうございます。いただいた質問は編集して追記させていただきますが、改めて編集後の追記分を探すのも面倒かと思いますので、こちらにも書かせていただきます。 まず、今回使用しているLeonardoは新品未使用品で何も書き込みをしていない状態になります。 次にPCとLeonardoを繋いでいるUSBケーブルはキャプチャーボードからPCにswitchの映像を持ってくるときに利用していたものを流用しているので充電専用ではないことは確認済みです。 再度switchからキャプチャーボード経由で繋いでも正常に作動したのでUSBの異常ではないと思います。 Leonardoのリセットボタンを押してブートローダーモードにするのはまだ試していなかったので、試してみたいと思います。
guest

回答1

0

シリアルポートの割り当ては、PCが変わるとその都度変わります
また、USBにつなぐのはあくまでシリアル変換器なので、Arduinoではありません。
なので、

正常であれば、「Arduino Leonardo(COM3)」と表示されるはずなのですが、

残念ながらそうはなりません。

デバイスマネージャを開いておいて、そのシリアル変換器のUSBを抜き差しすると、出たりなくなったりするCOMポートがあると思います。
そのポート番号を指定して、Arduinoの操作をすることになります

投稿2024/09/15 12:30

y_waiwai

総合スコア88040

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問