로터리 엔코더를 ESP32에서 사용

3335 단어 ArduinoESP32
로터리 엔코더를 사용하려고 했을 때 라이브러리가 몇 가지있었습니다.

이번에는 최근 업데이트된 '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 커패시터를 넣는 것이 효과적

좋은 웹페이지 즐겨찾기