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

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

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

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

Q&A

解決済

1回答

1307閲覧

Arduino Leonardoでロータリーエンコーダーの状態を取得したい

NFHK

総合スコア2

Arduino

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

0グッド

0クリップ

投稿2022/03/02 13:22

編集2022/03/02 13:28

やりたいこと

現在Arduino Leonardoを使ってロータリーエンコーダーが
停止しているのか、左に回転しているのか、右に回転しているのかを取得したい。

現在Arduino Leonardoを使って
ロータリーエンコーダーの状態を取得しようとしています。

こちらのライブラリを使用して書き込みをしてみたのですが
エラーが発生してしまって困っています。

やっていること

スケッチ例→Rotary-Master→Interrupt
をArduino leonaldoに書き込んだ

/* Rotary Encoder - Interrupt Example The circuit: * encoder pin A to Arduino pin 2 * encoder pin B to Arduino pin 3 * encoder ground pin to ground (GND) */ #include <Rotary.h> Rotary r = Rotary(2, 3); void setup() { Serial.begin(9600); r.begin(); PCICR |= (1 << PCIE2); PCMSK2 |= (1 << PCINT18) | (1 << PCINT19); sei(); } void loop() { } ISR(PCINT2_vect) { unsigned char result = r.process(); if (result == DIR_NONE) { // do nothing } else if (result == DIR_CW) { Serial.println("ClockWise"); } else if (result == DIR_CCW) { Serial.println("CounterClockWise"); } }

エラーの内容

書き込みをする際に

'PCIE2' was not declared in this scope 'PCINT19' was not declared in this scope

これらのエラーが発生します。

エラー解決のためにやったこと

PCIE2,PCINTが定義されていないという内容なので
こちらのサイトを参考に

PCICR |= (1 << PCIE2); PCMSK2 |= (1 << PCINT18) | (1 << PCINT19);

の部分を

PCICR |= B00000100; PCMSK2 |= B00001000|B00000100;

と書き換えてみましたが

'PCMSK2' was not declared in this scope

と表示され、いまいち解決できそうにありません。

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

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

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

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

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

guest

回答1

0

ベストアンサー

単純に、対象マイコンが異なる、という事だと思います。

Leonardoならスケッチ例の「InterruptProMicro」の方なら動くのでは?
(チップが同じAtmega32U4なので)

<<追記>>

参考にしたサイトもボードはUNOです。マイコンはATMEGA328Pのレジスタの事が書いてあります。

LeonardoはATMEGA32U4なので、その情報は役に立ちません。(使い方は同じですけど)
つまり、D2、D3ピンに割り当てられているピン変化割り込みはPCINT18やPCINT19ではありません。
(それどころか、D2、D3にはピン変化割り込みPCINT自体が無いです。外部割り込みINTはありますけど)
ATMEGA32U4のPCINTは別のピンに割り当てられていて、しかもPCINT「7」までしかありません。

その辺りはデータシートを読むか、Leonardo等のATMEGA32U4マイコンのボードを使っているサイトを参考にして下さい。

※エラー内容は、「定義されていない」ですけど、そもそも、そのレジスタ自体が存在しないのです。書き洩らしではありません。

投稿2022/03/02 16:11

編集2022/03/02 18:38
nac_tnk

総合スコア463

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

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

NFHK

2022/07/22 01:35

レジスタ等あまり知らない単語が出てきましたが回答ありがとうございました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問