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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Arduino

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

Q&A

0回答

810閲覧

Arduino Leonardoで書き込みができない

NFHK

総合スコア2

Arduino

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

0グッド

1クリップ

投稿2022/12/11 16:10

編集2022/12/16 10:29

前提

Arduino Leonardoでキーボード、マウス、ゲームパッドが複合したデバイスを作成しています

実現したいこと

ロータリーエンコーダーを用いてキー入力、マウス入力、パッド入力(特にアナログパッド)を行えるようにしたいです。

発生している問題・エラーメッセージ

エラーメッセージは表示されていない。 コンパイルも正常に通るようである。 しかし、書き込みが書き込み中...で止まってしまう。

利用しているもの

HID-Project
NKROKeyboard
Gamepad
Mouse

Rotary
Polling
LiquidCrystal-I2C-library
LiquidCrystal_SoftI2C

該当のソースコード

cpp

1#include <HID-Project.h> 2#include <HID-Settings.h> 3#include <Rotary.h> 4#include <LiquidCrystal_SoftI2C.h> 5// Set SDA to pin A0 and SCL to pin A1 6SoftwareWire *wire = new SoftwareWire(A0, A1); 7// Set the LCD address to 0x27 for a 16 chars and 2 line display 8LiquidCrystal_I2C lcd(0x27, 16, 2, wire); 9 10Rotary r = Rotary(8, 9); 11 12void setup() { 13 14 Serial.begin(9600); 15 r.begin(true); 16 NKROKeyboard.begin(); 17 Mouse.begin(); 18 Gamepad.begin(); 19 20 lcd.begin(); 21 lcd.backlight(); 22 lcd.setCursor(0, 0); 23 for (int i = 0; i <= 13; i++) { // 13pinすべてアップ 24 pinMode(i, INPUT_PULLUP); 25 } 26} 27 28void loop() { 29 30 unsigned char result = r.process(); 31 if (result) { 32 33 if (result == DIR_CW) { 34 Serial.println("CW_Right"); 35 lcd.print("CW_Right"); 36 NKROKeyboard.press('a'); 37 NKROKeyboard.releaseAll(); 38 Mouse.move(5, 5); 39 40 41 42 43 } else if (result != DIR_CW) { 44 Serial.println("CCW_Left"); 45 lcd.print("CCW_Left"); 46 NKROKeyboard.press(KEY_BACKSPACE); 47 NKROKeyboard.releaseAll(); 48 Mouse.move(-5, -5); 49 50 } 51 Gamepad.xAxis(random(0xFFFF)); 52 Gamepad.yAxis(random(0xFFFF)); 53 Gamepad.write(); 54 } 55}

試したこと

Gamepad.xAxis(random(0xFFFF));
Gamepad.yAxis(random(0xFFFF));
Gamepad.write();
これら3つをコメントアウトすると正常に書き込みができます
現状なぜ、Gamepadが使用できないのかがわからず、検索にも困っています。

GamePadのサンプルを単体で動かしてみる→書込み、動作確認済み
NKROのサンプル→書込み、動作確認済み
Mouseのサンプル→書込み、動作確認済み
SoftWireLCDのサンプル→書込み、動作確認済み
Arduino IDEを最新のもので再インストールを行った
ボードの標準ライブラリ再インストールを行った

cpp

1#include <HID-Project.h> 2#include <HID-Settings.h> 3#include <Rotary.h> 4#include <LiquidCrystal_SoftI2C.h> 5// Set SDA to pin A0 and SCL to pin A1 6SoftwareWire *wire = new SoftwareWire(A0, A1); 7// Set the LCD address to 0x27 for a 16 chars and 2 line display 8LiquidCrystal_I2C lcd(0x27, 16, 2, wire); 9 10Rotary r = Rotary(8, 9); 11 12void setup() { 13 14 Serial.begin(9600); 15 r.begin(true); 16 // NKROKeyboard.begin(); 17 Mouse.begin(); 18 Gamepad.begin(); 19 20 lcd.begin(); 21 lcd.backlight(); 22 lcd.setCursor(0, 0); 23 for (int i = 0; i <= 13; i++) { // 13pinすべてアップ 24 pinMode(i, INPUT_PULLUP); 25 } 26} 27 28void loop() { 29 30 unsigned char result = r.process(); 31 if (result) { 32 33 if (result == DIR_CW) { 34 Serial.println("CW_Right"); 35 lcd.print("CW_Right"); 36 // NKROKeyboard.press('a'); 37 // NKROKeyboard.releaseAll(); 38 Mouse.move(5, 5); 39 40 41 42 43 } else if (result != DIR_CW) { 44 Serial.println("CCW_Left"); 45 lcd.print("CCW_Left"); 46 // NKROKeyboard.press(KEY_BACKSPACE); 47 // NKROKeyboard.releaseAll(); 48 Mouse.move(-5, -5); 49 50 } 51 Gamepad.xAxis(random(0xFFFF)); 52 Gamepad.yAxis(random(0xFFFF)); 53 Gamepad.write(); 54 } 55}

としてみた。
すると書き込みは通った。

そしてNKROKeyboard.begin();を非コメント化すると書き込みはできなくなった。
よってNKROKeyboardが邪魔していることがわかる。

cpp

1 2void setup() { 3 4 Serial.begin(9600); 5 r.begin(true); 6 NKROKeyboard.begin(); 7//この部分を非コメントアウト 8 Mouse.begin(); 9 Gamepad.begin(); 10 11 lcd.begin(); 12 lcd.backlight(); 13 lcd.setCursor(0, 0); 14 for (int i = 0; i <= 13; i++) { // 13pinすべてアップ 15 pinMode(i, INPUT_PULLUP); 16 } 17} 18 19

この問題を回避する方法がわからないため、困っている。

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

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

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

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

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

y_waiwai

2022/12/11 21:58

で、しつもんはなんでしょうか
NFHK

2022/12/14 16:51 編集

少々お待ち下さい... 加筆いたしましたので回答をよろしくお願いいたします あれ、これでも質問悪いですか? それならもう少し加筆しますが... この質問は私が悪いのでしょうか?
thkana

2022/12/16 00:08

とりあえず、現時点で[該当のソースコード]に書かれているコードで ・コンパイルOK ・Leonardoへの書き込みOk ・再度書き込みOK つまり、症状が私のてもとでは再現しません。 Arduino IDE 1.8.19 Arduino AVR board 1.8.6 Win11 Pro
NFHK

2022/12/16 10:26 編集

Arduino IDE 2.0.5 ↑うち間違えにより修正2.0.3 Arduino AVR board 1.8.5 Win10 Homeです。 書き込みができない原因がさっぱりわかりません。 同じように条件を揃えたいですがOSだけは揃えられそうにないです。 それ以外は条件を揃えてみましたが、書き込ません。止まってしまいます。 他に確認するべきことがあれば、教えていただけますか? 現状確認できたのは記載のIDEとボードのライブラリバージョンです。 純正のLeonardoを使っていますが、そちらのLeonardoは互換品ですか?純正ですか?
thkana

2022/12/16 08:37

Arduino IDEはまだ2.0.3までしか出てなかったと思いますがそれはともかく Leonardoは純正です。 書き込み成功するスケッチしないスケッチで名前を変えてArduino IDEのメニュー[スケッチ]-[コンパイル済バイナリをエクスポート]でバイナリファイルを吐き出させて(Leonarodoのリセットダブルクリックしてから)avrdudeを直接起動して書き込んでみたときはそれぞれどうなるでしょう。
NFHK

2022/12/16 11:25

IDEから普通の書き込みで書き込みができてしまいました。 昨日、再インストールなどを行ったときは書き込みができなかったのですが、本日書き込みをもう一度行ってみたところ、普通に書き込みができました。 理由に検討もつきません。 別の書き込み方法も紹介していただきありがとうございます。avrdudeという単語を初めて知りましたので、調べて学習を進めていきたいと思います。
thkana

2022/12/16 21:54

Arduino IDEは、ボードライブラリに含まれているコンパイラ類や書き込みツールを呼び出して動作しています。avrdudeはボードライブラリに含まれているAVRマイコン用の書き込みツールです。これを単独で起動してみることにより、状況の切り分けや細かい情報を得ることができないか、と思ったのですが... 解消してしまったとなると仕方がありませんね。再び症状が出ないことを祈るばかりです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問