Re: 엔코더모듈과 RGB모듈
Makerist
센서기초
0
644
2024.05.12 12:51
#define CLK 2 // CLK 핀을 2번으로 정의 #define DT 3 // DT 핀을 3번으로 정의 #define SW 4 // 버튼 핀을 4번으로 정의 // RGB LED 핀 설정 #define RED_PIN 9 #define GREEN_PIN 10 #define BLUE_PIN 11 // RGB LED 초기 색상 설정 (흰색) int redValue = 255; int greenValue = 255; int blueValue = 255; int lastCLKState = LOW; // 이전 CLK 상태 int buttonState = HIGH; // 버튼 상태 unsigned long lastDebounceTime = 0; // 마지막 디바운스 시간 unsigned long debounceDelay = 50; // 디바운스 지연 시간 void setup() { pinMode(CLK, INPUT); pinMode(DT, INPUT); pinMode(SW, INPUT_PULLUP); // 내부 풀업 저항 사용 pinMode(RED_PIN, OUTPUT); pinMode(GREEN_PIN, OUTPUT); pinMode(BLUE_PIN, OUTPUT); Serial.begin(9600); } void loop() { // 버튼 디바운싱 int reading = digitalRead(SW); if (reading != buttonState) { lastDebounceTime = millis(); } if ((millis() - lastDebounceTime) > debounceDelay) { if (reading != buttonState) { buttonState = reading; if (buttonState == LOW) { Serial.println("버튼 눌림!"); // 버튼이 눌렸을 때, RGB LED 초기화 (흰색) redValue = 255; greenValue = 255; blueValue = 255; } } } // CLK 신호 읽기 int CLKState = digitalRead(CLK); // CLK 신호가 변경되었는지 확인 if (CLKState != lastCLKState) { if (digitalRead(DT) != CLKState) { // DT 신호 확인하여 회전 방향 결정 Serial.println("시계방향 회전"); // 시계방향 회전 시 RGB 색상 변경 (R->G->B->R...) redValue = 0; greenValue = 255; blueValue = 0; } else { Serial.println("반시계방향 회전"); // 반시계방향 회전 시 RGB 색상 변경 (R->B->G->R...) redValue = 255; greenValue = 0; blueValue = 0; } analogWrite(RED_PIN, redValue); analogWrite(GREEN_PIN, greenValue); analogWrite(BLUE_PIN, blueValue); } // 현재 CLK 상태를 이전 상태로 업데이트 lastCLKState = CLKState; }