[WAT-S024] 중요한 아두이노 센서키트 24번째 [Rotary encoders]

[WAT-S024] 로터리 엔코더 모듈

본 제품은 [WAT-SK114]중요한 아두이노 센서키트(초급) 중 24번째 모듈로 Rotary encoders모듈입니다.

핀 번호

번호 핀명 I/O 기능
 1 GND GND GND
 2 + VCC VCC
3 SW SWITCH 스위치 눌림
4 DT A OUTA
5 CLK B  OUTB

WAT-Arduino128 예제

핀 연결
번호 I/O WAT-Arduino128
 1 GND GND
 2 + VCC
3 SW PA0
4 DT PA1
5 CLK PA2

소스코드

최신 소스코드는 [파일]=>[예제]=> [WhiteAT]=> [Sensor37] => [24_RotaryEncoders] 에 있으며
라이브러리는 아두이노 개발환경  을 참조하세요

/*
 중요한 아두이노 센서키트 37종 예제 중 24번째
 WAT-Arduino128 과 로터리 인코더 예제입니다.

 WAT-Arduino128 : https://kit128.com/goods/view?no=64
 37종 센서: https://kit128.com/goods/view?no=114
 
 출처: http://whiteat.com/Arduino
*/ 

int totalCount = 0;
int S = PA0; // Switch
int pinA = PA1;
int pinB = PA2;

// 프로그램 시작 - 초기화 작업
void setup()
{
 Serial.begin(115200); // 시리얼 통신 초기화
 Serial.println("Arduino Examples - Rotary Encoders");
 Serial.println(" https://docs.whiteat.com/?p=1265");
 pinMode(S, INPUT);
 pinMode(pinA, INPUT);
 pinMode(pinB, INPUT);
 digitalWrite(S, HIGH);
}

int nowCnt = 0;
void loop()
{
 if (LOW == digitalRead(S))
 {
 Serial.println("Clear"); // 감지
 delay(200);
 totalCount = 0;
 }
 else
 {
 //Serial.print("."); // 없음
 }

 nowCnt = getValue();

 if (nowCnt != 0)
 {
 totalCount += nowCnt;
 Serial.println(totalCount);
 }

}

int oldA = LOW;
int oldB = LOW;

int getValue()
{
 int rValue = 0;
 int A = digitalRead(pinA);
 int B = digitalRead(pinB);

 if (A != oldA || B != oldB)
 {
 if (oldA == LOW && A == HIGH)
 {
 if (oldB == HIGH) rValue = 1;
 else rValue = -1;
 }
 }
 oldA = A;
 oldB = B;
 return rValue;
}
결과 화면

스위치를 시계방향으로 돌리면 카운터 증가, 반시계방향으로 돌리면 카운터가 감소합니다.

Arduino UNO R3 예제

핀 연결
번호 I/O UNO R3
 1 GND GND
 2 + VCC
3 SW 2
4 DT 3
5 CLK 4

 

소스코드

최신 소스코드는 [파일]=>[예제]=> [WhiteAT UNO]=> [Sensor37] => [24_RotaryEncoders] 에 있으며
라이브러리는 아두이노 개발환경  을 참조하세요

/*
 중요한 아두이노 센서키트 37종 예제 중 24번째
 UNO 와 로터리 인코더 예제입니다.

 UNO R3 : https://kit128.com/goods/view?no=337
 37종 센서: https://kit128.com/goods/view?no=114
 
 출처: http://whiteat.com/Arduino

*/ 

int totalCount = 0;
int S = 2; // Switch
int pinA = 3;
int pinB = 4;

// 프로그램 시작 - 초기화 작업
void setup()
{
 Serial.begin(115200); // 시리얼 통신 초기화
 Serial.println("Arduino Examples - Rotary Encoders");
 Serial.println(" https://docs.whiteat.com/?p=1265");
 pinMode(S, INPUT);
 pinMode(pinA, INPUT);
 pinMode(pinB, INPUT);
 digitalWrite(S, HIGH);
}

int nowCnt = 0;
void loop()
{
 if (LOW == digitalRead(S))
 {
 Serial.println("Clear"); // 감지
 delay(200);
 totalCount = 0;
 }
 else
 {
 //Serial.print("."); // 없음
 }

 nowCnt = getValue();

 if (nowCnt != 0)
 {
 totalCount += nowCnt;
 Serial.println(totalCount);
 }

}

int oldA = LOW;
int oldB = LOW;

int getValue()
{
 int rValue = 0;
 int A = digitalRead(pinA);
 int B = digitalRead(pinB);

 if (A != oldA || B != oldB)
 {
 if (oldA == LOW && A == HIGH)
 {
 if (oldB == HIGH) rValue = 1;
 else rValue = -1;
 }
 }
 oldA = A;
 oldB = B;
 return rValue;
}
결과 화면

스위치를 시계방향으로 돌리면 카운터 증가, 반시계방향으로 돌리면 카운터가 감소합니다.

제품 구매

[WAT-SK114]중요한 아두이노 센서키트(초급)은 https://kit128.com/goods/view?no=114 에서
[WAT-S024] 엔코더 로터리모듈은 https://kit128.com/goods/view?no=424 에서  구매하실 수 있습니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다