버튼 4개와 LED 4개를 이용한 코드변환기 구현(2진->그레이코드)
#define B0 2
#define B1 3
#define B2 4
#define B3 5
#define G0 10
#define G1 11
#define G2 12
#define G3 13
void setup() {
pinMode(B0, INPUT_PULLUP);
pinMode(B1, INPUT_PULLUP);
pinMode(B2, INPUT_PULLUP);
pinMode(B3, INPUT_PULLUP);
pinMode(G0, OUTPUT);
pinMode(G1, OUTPUT);
pinMode(G2, OUTPUT);
pinMode(G3, OUTPUT);
}
void loop() {
int b0 = !digitalRead(B0);
int b1 = !digitalRead(B1);
int b2 = !digitalRead(B2);
int b3 = !digitalRead(B3);
int g0 = b1^b0;
int g1 = b2^b1;
int g2 = b3^b2;
int g3 = b3;
if (g0 == HIGH) {
digitalWrite(G0, HIGH);
delay(1);
digitalWrite(G0, LOW);
}
if (g1 == HIGH) {
digitalWrite(G1, HIGH);
delay(1);
digitalWrite(G1, LOW);
}
if (g2 == HIGH) {
digitalWrite(G2, HIGH);
delay(1);
digitalWrite(G2, LOW);
}
if (g3 == HIGH) {
digitalWrite(G3, HIGH);
delay(1);
digitalWrite(G3, LOW);
}
}
#define 구문으로 핀 번호를 명확히 지정:
B0 ~ B3 → 4개의 입력 버튼 핀 (2~5번 핀)
G0 ~ G3 → 4개의 출력용 LED 핀 (10~13번 핀)
입력 핀은 INPUT_PULLUP 모드로 설정:
버튼이 눌리지 않으면 HIGH, 눌리면 LOW
!digitalRead(...)로 반전시켜, 버튼이 눌렸을 때 HIGH가 되도록 처리
입력값 b0 ~ b3는 4비트 이진수(Binary) 입력을 구성
출력값 g0 ~ g3는 이진수 값을 **그레이 코드(Gray Code)**로 변환하여 계산함:
g0 = b1 ^ b0 → 첫 번째 그레이 비트
g1 = b2 ^ b1 → 두 번째 그레이 비트
g2 = b3 ^ b2 → 세 번째 그레이 비트
g3 = b3 → 최상위 비트는 그대로 유지
각 g0 ~ g3 값이 HIGH일 경우 해당 LED(G0~G3)를 짧게 점등시킴:
digitalWrite(Gx, HIGH) → delay(1) → digitalWrite(Gx, LOW)
반복 루프에서 이 동작을 계속 수행하여 LED가 켜진 것처럼 지속적으로 보이게 함
이 코드는 4비트 이진수 입력을 받아 4비트 그레이 코드로 변환 후 LED로 출력하는 코드 변환기이며,
디지털 시스템에서의 이진→그레이 코드 변환 논리를 실습할 수 있는 예제임
Copyright ⓒ Tech79 All right reserved