ロータリーエンコーダに関して
Posted: 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;
}
}
ロータリーエンコーダを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;
}
}