엔코더 예제

예를 들어, 이진 인코더에 옥탈을 고려해 봅시다. 다음 그림과 같이 옥탈-바이너리 인코더는 8개의 입력 라인을 취하고 3개의 출력 라인을 생성합니다. 예를 들어 Arduino가 와이어 라이브러리를 통해 I2C 장치와 대화하는 경우 어떻게 해야 합니까? I2C 라이브러리에 바쁜 대기 부분이 있다는 것을 깨닫지 못할 수 있습니다. 이러한 통신은 실제로 하드웨어에서 수행되므로 프로세서가 기다려야 할 이유는 없지만 라이브러리가 디자인된 방식입니다. 따라서 polling in()를 사용하여 로터리 인코더를 확인하는 경우 코드가 통신이 끝나기를 기다리는 경우 빠른 전환을 놓칠 수 있습니다. 우선 순위 인코더 – 우선 순위 인코더는 입력에 우선 순위가 부여되는 인코더 회로입니다. 둘 이상의 입력이 동시에 활성화되면 우선 순위가 높은 입력이 우선적으로 발생하고 그에 해당하는 출력이 생성됩니다. 이전 코드 예제와 중요한 차이점은 음수인 A 또는 B에 인터럽트가 있는 경우 A_set 또는 B_set을 각각 false로 설정하면 추가 작업이 필요하지 않고 인터럽트 서비스 에 소요되는 시간이 줄어든다는 것입니다. 그다지 최적화되지 않은 코드에 문제가 있을 수 있습니다. 단순한 예제 코드일 뿐이며 더 나은 결과를 얻으려면 최적화가 필요할 수 있습니다. AdaEncoder 라이브러리는 다음과 같은 기본 2 핀 사분면 인코더와 함께 작동하기 위해 만들어졌습니다. 핀 A와 B, 다음 공통 핀 C).

모든 상태 변경을 나타내는 것은 아니라 디코더가 한 구금 위치에서 다음 위치로 전환될 때만 보고합니다. 인터럽트 구동이며 빠르고 사용하기 쉽도록 설계되었습니다. 인터럽트 루틴은 가볍고 프로그래머는 인코더가 여가 시간에 돌린 방향을 읽을 수 있습니다(이유 내에서 중요한 것은 라이브러리가 합리적으로 용서한다는 것입니다). 라이브러리는 사용하기 쉽도록 설계되었으며(반복 🙂 바운스 전환에 대해 합리적으로 면역이 됩니다. 다음은 인터럽트를 사용하는 일부 코드입니다. Arduino가 A 채널에서 변경된 것을 볼 때 즉시 “doEncoder” 함수로 건너뛰고, 이 함수는 낮은 가장자리와 높은 가장자리에서 낮은 가장자리를 모두 구문 분석하여 결과적으로 두 배의 전환을 계산합니다.