로터리 엔코더를 ESP32에서 사용
이번에는 최근 업데이트된 'RotaryEncoder' 라이브러리를 사용해 보았습니다.
환경
우분투18.04
Arduino 1.8.10
ESP32
GxEPD2
라이브러리 설치
도구 - 라이브러리 관리 ...에서 라이브러리 관리자를 호출하고 Rotaryencoder를 입력하여 설치
RotaryEncoder by Matthias Hartel을 선택합니다.
샘플 프로그램
파일 - 스케치 예제 - 사용자 정의 라이브러리 스케치 예제 - RotaryEncoder - SimplePallRotater
전화
다음 위치를 찾아
// Setup a RoraryEncoder for pins A2 and A3:
RotaryEncoder encoder(A2, A3);
void setup()
{
Serial.begin(57600);
Serial.println("SimplePollRotator example for the RotaryEncoder library.");
} // setup()
다음과 같이 변경
// Setup a RoraryEncoder for pins A2 and A3:
RotaryEncoder encoder(12, 13);
void setup()
{
Serial.begin(115200);
Serial.println("SimplePollRotator example for the RotaryEncoder library.");
} // setup()
이것으로 움직였다.
동작 해설
void loop()
{
static int pos = 0;
encoder.tick();
그래서 tick ()을 루프에서 호출합니다. 다음의 인터럽트 구동의 프로그램에서는, 핀 상태 변경 인터럽트로 tick()를 호출하고 있다.
인터럽트로 이동
파일 - 스케치 예제 - 사용자 정의 라이브러리 스케치 예제 - RotaryEncoder - InterruptRotater
전화
#include <RotaryEncoder.h>
// Setup a RoraryEncoder for pins A2 and A3:
RotaryEncoder encoder(A2, A3);
void setup()
{
Serial.begin(57600);
Serial.println("SimplePollRotator example for the RotaryEncoder library.");
// You may have to modify the next 2 lines if using other pins than A2 and A3
PCICR |= (1 << PCIE1); // This enables Pin Change Interrupt 1 that covers the Analog input pins or Port C.
PCMSK1 |= (1 << PCINT10) | (1 << PCINT11); // This enables the interrupt for pin 2 and 3 of Port C.
} // setup()
// The Interrupt Service Routine for Pin Change Interrupt 1
// This routine will only be called on any signal change on A2 and A3: exactly where we need to check.
ISR(PCINT1_vect) {
encoder.tick(); // just call tick() to check the state.
}
되고 있는 것을
#include <RotaryEncoder.h>
// Setup a RoraryEncoder for pins A2 and A3:
RotaryEncoder encoder(12, 13);
// The Interrupt Service Routine for Pin Change Interrupt 1
// This routine will only be called on any signal change on A2 and A3: exactly where we need to check.
void IRAM_ATTR ISR() {
encoder.tick(); // just call tick() to check the state.
}
void setup()
{
Serial.begin(115200);
Serial.println("SimplePollRotator example for the RotaryEncoder library.");
attachInterrupt(12, ISR, CHANGE);
attachInterrupt(13, ISR, CHANGE);
} // setup()
그러면 움직였다.
채터링 방지
0.1uF 커패시터를 넣는 것이 효과적
Reference
이 문제에 관하여(로터리 엔코더를 ESP32에서 사용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/nanbuwks/items/1a5f881b6a84a08eacc1
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
도구 - 라이브러리 관리 ...에서 라이브러리 관리자를 호출하고 Rotaryencoder를 입력하여 설치
RotaryEncoder by Matthias Hartel을 선택합니다.
샘플 프로그램
파일 - 스케치 예제 - 사용자 정의 라이브러리 스케치 예제 - RotaryEncoder - SimplePallRotater
전화
다음 위치를 찾아
// Setup a RoraryEncoder for pins A2 and A3:
RotaryEncoder encoder(A2, A3);
void setup()
{
Serial.begin(57600);
Serial.println("SimplePollRotator example for the RotaryEncoder library.");
} // setup()
다음과 같이 변경
// Setup a RoraryEncoder for pins A2 and A3:
RotaryEncoder encoder(12, 13);
void setup()
{
Serial.begin(115200);
Serial.println("SimplePollRotator example for the RotaryEncoder library.");
} // setup()
이것으로 움직였다.
동작 해설
void loop()
{
static int pos = 0;
encoder.tick();
그래서 tick ()을 루프에서 호출합니다. 다음의 인터럽트 구동의 프로그램에서는, 핀 상태 변경 인터럽트로 tick()를 호출하고 있다.
인터럽트로 이동
파일 - 스케치 예제 - 사용자 정의 라이브러리 스케치 예제 - RotaryEncoder - InterruptRotater
전화
#include <RotaryEncoder.h>
// Setup a RoraryEncoder for pins A2 and A3:
RotaryEncoder encoder(A2, A3);
void setup()
{
Serial.begin(57600);
Serial.println("SimplePollRotator example for the RotaryEncoder library.");
// You may have to modify the next 2 lines if using other pins than A2 and A3
PCICR |= (1 << PCIE1); // This enables Pin Change Interrupt 1 that covers the Analog input pins or Port C.
PCMSK1 |= (1 << PCINT10) | (1 << PCINT11); // This enables the interrupt for pin 2 and 3 of Port C.
} // setup()
// The Interrupt Service Routine for Pin Change Interrupt 1
// This routine will only be called on any signal change on A2 and A3: exactly where we need to check.
ISR(PCINT1_vect) {
encoder.tick(); // just call tick() to check the state.
}
되고 있는 것을
#include <RotaryEncoder.h>
// Setup a RoraryEncoder for pins A2 and A3:
RotaryEncoder encoder(12, 13);
// The Interrupt Service Routine for Pin Change Interrupt 1
// This routine will only be called on any signal change on A2 and A3: exactly where we need to check.
void IRAM_ATTR ISR() {
encoder.tick(); // just call tick() to check the state.
}
void setup()
{
Serial.begin(115200);
Serial.println("SimplePollRotator example for the RotaryEncoder library.");
attachInterrupt(12, ISR, CHANGE);
attachInterrupt(13, ISR, CHANGE);
} // setup()
그러면 움직였다.
채터링 방지
0.1uF 커패시터를 넣는 것이 효과적
Reference
이 문제에 관하여(로터리 엔코더를 ESP32에서 사용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/nanbuwks/items/1a5f881b6a84a08eacc1
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
// Setup a RoraryEncoder for pins A2 and A3:
RotaryEncoder encoder(A2, A3);
void setup()
{
Serial.begin(57600);
Serial.println("SimplePollRotator example for the RotaryEncoder library.");
} // setup()
// Setup a RoraryEncoder for pins A2 and A3:
RotaryEncoder encoder(12, 13);
void setup()
{
Serial.begin(115200);
Serial.println("SimplePollRotator example for the RotaryEncoder library.");
} // setup()
void loop()
{
static int pos = 0;
encoder.tick();
그래서 tick ()을 루프에서 호출합니다. 다음의 인터럽트 구동의 프로그램에서는, 핀 상태 변경 인터럽트로 tick()를 호출하고 있다.
인터럽트로 이동
파일 - 스케치 예제 - 사용자 정의 라이브러리 스케치 예제 - RotaryEncoder - InterruptRotater
전화
#include <RotaryEncoder.h>
// Setup a RoraryEncoder for pins A2 and A3:
RotaryEncoder encoder(A2, A3);
void setup()
{
Serial.begin(57600);
Serial.println("SimplePollRotator example for the RotaryEncoder library.");
// You may have to modify the next 2 lines if using other pins than A2 and A3
PCICR |= (1 << PCIE1); // This enables Pin Change Interrupt 1 that covers the Analog input pins or Port C.
PCMSK1 |= (1 << PCINT10) | (1 << PCINT11); // This enables the interrupt for pin 2 and 3 of Port C.
} // setup()
// The Interrupt Service Routine for Pin Change Interrupt 1
// This routine will only be called on any signal change on A2 and A3: exactly where we need to check.
ISR(PCINT1_vect) {
encoder.tick(); // just call tick() to check the state.
}
되고 있는 것을
#include <RotaryEncoder.h>
// Setup a RoraryEncoder for pins A2 and A3:
RotaryEncoder encoder(12, 13);
// The Interrupt Service Routine for Pin Change Interrupt 1
// This routine will only be called on any signal change on A2 and A3: exactly where we need to check.
void IRAM_ATTR ISR() {
encoder.tick(); // just call tick() to check the state.
}
void setup()
{
Serial.begin(115200);
Serial.println("SimplePollRotator example for the RotaryEncoder library.");
attachInterrupt(12, ISR, CHANGE);
attachInterrupt(13, ISR, CHANGE);
} // setup()
그러면 움직였다.
채터링 방지
0.1uF 커패시터를 넣는 것이 효과적
Reference
이 문제에 관하여(로터리 엔코더를 ESP32에서 사용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/nanbuwks/items/1a5f881b6a84a08eacc1
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
#include <RotaryEncoder.h>
// Setup a RoraryEncoder for pins A2 and A3:
RotaryEncoder encoder(A2, A3);
void setup()
{
Serial.begin(57600);
Serial.println("SimplePollRotator example for the RotaryEncoder library.");
// You may have to modify the next 2 lines if using other pins than A2 and A3
PCICR |= (1 << PCIE1); // This enables Pin Change Interrupt 1 that covers the Analog input pins or Port C.
PCMSK1 |= (1 << PCINT10) | (1 << PCINT11); // This enables the interrupt for pin 2 and 3 of Port C.
} // setup()
// The Interrupt Service Routine for Pin Change Interrupt 1
// This routine will only be called on any signal change on A2 and A3: exactly where we need to check.
ISR(PCINT1_vect) {
encoder.tick(); // just call tick() to check the state.
}
#include <RotaryEncoder.h>
// Setup a RoraryEncoder for pins A2 and A3:
RotaryEncoder encoder(12, 13);
// The Interrupt Service Routine for Pin Change Interrupt 1
// This routine will only be called on any signal change on A2 and A3: exactly where we need to check.
void IRAM_ATTR ISR() {
encoder.tick(); // just call tick() to check the state.
}
void setup()
{
Serial.begin(115200);
Serial.println("SimplePollRotator example for the RotaryEncoder library.");
attachInterrupt(12, ISR, CHANGE);
attachInterrupt(13, ISR, CHANGE);
} // setup()
0.1uF 커패시터를 넣는 것이 효과적
Reference
이 문제에 관하여(로터리 엔코더를 ESP32에서 사용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/nanbuwks/items/1a5f881b6a84a08eacc1텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)