ページ 11

ロータリーエンコーダに関して

投稿記事Posted: 2014年7月28日(月) 17:20
by uywbsfue
初めまして、

ロータリーエンコーダをArduinoにて制御しているのですが、Setup関数内でAnalogWriteにてPWM出力を行うとと機構の都合によりロータリーエンコーダが動いてしまいます。この時にパルス数のカウントを0にしようと思ったのですが、どう換えても出来ませんでした。
どなたかsetup関数内でロータリーエンコーダのパルス数をカウントさせない方法をご教授頂けないでしょうか? 以下にブログラムを添付させていたただきます。(エンコーダのプログラムは他サイト様より拝借しました)

#define LED_PIN1 3
#define LED_PIN2 10

int dRotAPin = 2;
int dRotBPin = 4;

volatile char m_nOldRot = 0;

// 今回はLCDに回転回数を表示させる
volatile short int m_nValue = 0;

void setup()
{
pinMode(LED_PIN1, OUTPUT);
pinMode(LED_PIN2, OUTPUT);

pinMode(dRotAPin,INPUT);

pinMode(dRotAPin, INPUT);

pinMode(dRotBPin, INPUT);

digitalWrite(dRotAPin, HIGH);
digitalWrite(dRotBPin, HIGH);

Serial.begin(9600);

analogWrite(LED_PIN1, 120);

analogWrite(LED_PIN2, 120);

attachInterrupt(0, rotRotEnc, CHANGE);

}

void loop()
{
analogWrite(3,140);
analogWrite(10,100);


time = micros();
Serial.print(time);
Serial.print(" ");
Serial.println(m_nValue,DEC);

}

void rotRotEnc(void)
{
if(!digitalRead(dRotAPin)){ // ロータリーエンコーダー回転開始
if(digitalRead(dRotBPin)){
//右回転かな?
m_nOldRot = 'R';
} else {
//左回転かな?
m_nOldRot = 'L';
}
} else { // ロータリーエンコーダー回転停止
if(digitalRead(dRotBPin)){
if(m_nOldRot == 'L'){
// 左回転の時の処理
m_nValue--;
}
} else {
if(m_nOldRot == 'R'){
//右回転の時の処理
m_nValue++;
}
}
// ここでロータリーエンコーダーの状態をクリア
m_nOldRot = 0;
}
}

Re: ロータリーエンコーダに関して

投稿記事Posted: 2014年7月29日(火) 13:22
by yamaguch
uywbsfue さん、こんにちは、

どこからか持ってきたスケッチということですが、そのまま変更しなければ、期待通りの動いて
analogWrite() を追加すると、期待通りには動かなくなるということでしょうか。

単にパルスのカウンタ(m_nValue のことですか?)を 0 にするのであれば setup() の最後に
コード: 全て選択
m_nValue = 0;
を追加すればいいような気もしますが...

山口