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

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

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

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Arduino

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

マイコン

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

Q&A

解決済

1回答

954閲覧

ArduinoPromicroでのロータリーエンコーダの挙動が治せない

Letemon

総合スコア4

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Arduino

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

マイコン

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

0グッド

0クリップ

投稿2021/12/11 04:25

Arduino Promicroを用いたPC操作デバイスを作っているのですが
ロータリーエンコーダの挙動についてわからないことが多くお力添えをいただきたいです。

やりたいことは、エンコーダーを回した際に特定のキー(今回は「R」「T])をPCに入力することです。回す方向に応じて片方のキー入力を得たいです。

起こっている問題は、エンコードをどちらの方向に1クリック回しても、入力としてRとTが連続で返ってくることです。ワンクリックどちらに回してもTR、TR、TRと入力されます。

使用しているエンコーダーはマルツ購入の『ロータリエンコーダ 設定用光学式エンコーダスイッチ付き 1軸 分解能25 出力相A&B 電圧出力【REC16K25-201】』です

ArduinoIDEでのコードは以下になります。

Java

1 2 3#include "Keyboard.h" 4#include <Encoder.h> 5#define ALL_BUTTONS 3 6 7const int button[] = {0, 4, 5}; 8Encoder myEnc(2, 3); 9 10int buttonState[ALL_BUTTONS] = {HIGH}; 11int previousButtonState[ALL_BUTTONS] = {HIGH}; 12 13 14long oldPosition = -999; 15 16void keyboard_shortcut(int buttonID); 17 18void setup() { 19 20 for (int i=0;i<ALL_BUTTONS;i++) { 21 pinMode(button[i], INPUT); 22 } 23 24 Keyboard.begin(); 25} 26 27void loop() { 28 29 for (int i=0;i<ALL_BUTTONS;i++) { 30 buttonState[i] = digitalRead(button[i]); 31 32 if ((buttonState[i] != previousButtonState[i]) && (buttonState[i] == HIGH)) { 33 keyboard_shortcut(i); 34 } 35 36 previousButtonState[i] = buttonState[i]; 37 } 38 39 long newPosition = myEnc.read(); 40 Serial.begin(9600); 41 Serial.println(newPosition); 42 43 if (newPosition != oldPosition) { 44 if (newPosition > oldPosition) { 45 keyboard_shortcut(15); 46 } 47 else { 48 keyboard_shortcut(16); 49 } 50 oldPosition = newPosition; 51 delay(200); 52 } 53} 54 55 56void keyboard_shortcut(int buttonID) { 57 switch (buttonID) { 58 case 0: 59 Keyboard.press('A'); 60 break; 61 case 1: 62 Keyboard.press('D'); 63 break; 64 case 2: 65 Keyboard.press('E'); 66 break; 67 case 15: 68 Keyboard.press('R'); 69 break; 70 case 16: 71 Keyboard.press('T'); 72 break; 73 default: 74 break; 75 } 76 delay(100); 77 Keyboard.releaseAll(); 78}

利用環境
Windows10
ArduinoIDE1.8
ArduinoPromicro

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

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

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

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

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

guest

回答1

0

自己解決

本当に申し訳ありません。半田付けしたA線が切れていたためマイナス入力しかされてなかったみたいです。

以後このようなことがないようにしっかり何度も確認するように気をつけます。
本当にすみませんでした。

投稿2021/12/11 05:32

Letemon

総合スコア4

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問