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

Arduino に関するご質問などはこちらへ。

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

投稿記事by uywbsfue » 2014年7月28日(月) 17:20

初めまして、

ロータリーエンコーダを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;
}
}
uywbsfue
 
記事: 1
登録日時: 2014年7月28日(月) 15:43

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

投稿記事by yamaguch » 2014年7月29日(火) 13:22

uywbsfue さん、こんにちは、

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

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

山口
yamaguch
 
記事: 482
登録日時: 2010年7月06日(火) 17:37


Return to Arduino 質問箱

cron