버튼 2개와 LED 2개를 이용한 반가산기 구현
#define A 2
#define B 3
#define S 8
#define C 9
void setup() {
pinMode(A, INPUT_PULLUP);
pinMode(B, INPUT_PULLUP);
pinMode(C, OUTPUT);
pinMode(S, OUTPUT);
}
void loop() {
int a = !digitalRead(A);
int b = !digitalRead(B);
int s = a^b;
int c = a&&b;
if (s == HIGH) {
digitalWrite(S, HIGH);
delay(1);
digitalWrite(S, LOW);
}
if (c == HIGH) {
digitalWrite(C, HIGH);
delay(1);
digitalWrite(C, LOW);
}
}
#define을 통해 A, B, S, C를 각각 핀 번호로 정의함:
A = 2, B = 3: 두 개의 입력 버튼
S = 8: 합(Sum)을 출력할 빨간 LED
C = 9: 자리올림수(Carry)를 출력할 초록 LED
pinMode(..., INPUT_PULLUP); → A와 B는 내부 풀업 저항이 활성화된 입력 모드.
버튼이 눌리면 LOW, 반전(!)을 통해 HIGH로 읽힘.
pinMode(..., OUTPUT); → S와 C는 LED 출력 핀.
int s = a ^ b; → XOR 연산으로 합(Sum) 계산 (둘 중 하나만 HIGH일 때 HIGH).
int c = a && b; → AND 연산으로 자리올림수(Carry) 계산 (둘 다 HIGH일 때 HIGH).
조건문:
if (s == HIGH) → S(8번 핀)를 잠깐 HIGH로 설정 → 빨간 LED 짧게 점등 (Sum).
if (c == HIGH) → C(9번 핀)를 잠깐 HIGH로 설정 → 초록 LED 짧게 점등 (Carry).
전체적으로 이 코드는 1비트 전가산기(Full Adder) 중의 반가산기(Half Adder)를 구현한 것으로,
버튼 두 개를 입력 A, B로 활용하고,
두 입력의 합과 자리올림 결과를 각각 LED로 표현함.
Copyright ⓒ Tech79 All right reserved