버튼 3개와 LED 2개로 전가산기 구현
#define A 2
#define B 3
#define CI 4
#define S 8
#define CO 9
void setup() {
pinMode(A, INPUT_PULLUP);
pinMode(B, INPUT_PULLUP);
pinMode(CI,INPUT_PULLUP);
pinMode(CO, OUTPUT);
pinMode(S, OUTPUT);
}
void loop() {
int a = !digitalRead(A);
int b = !digitalRead(B);
int ci = !digitalRead(CI);
int s = (a^b)^ci;
int co = (ci&&(a^b))||(a&&b);
if (s == HIGH) {
digitalWrite(S, HIGH);
delay(1);
digitalWrite(S, LOW);
}
if (co == HIGH) {
digitalWrite(CO, HIGH);
delay(1);
digitalWrite(CO, LOW);
}
}
#define 구문으로 핀 번호를 명확히 지정:
A, B, CI → 세 개의 입력 버튼 (2, 3, 4번 핀)
S, CO → 출력용 LED (합과 자리올림 표시용)
INPUT_PULLUP 설정으로 내부 풀업 저항 사용:
버튼이 눌리지 않으면 HIGH, 눌리면 LOW
!digitalRead(...)를 사용해 버튼이 눌렸을 때 HIGH로 처리
s = (a ^ b) ^ ci;
1비트 전가산기(Full Adder)의 합(Sum) 계산
세 입력 값 중 홀수 개가 HIGH일 경우 s가 HIGH
co = (ci && (a ^ b)) || (a && b);
전가산기(Full Adder)의 자리올림수(Carry Out) 계산
두 개 이상의 입력이 HIGH일 경우 자리올림 발생
digitalWrite(..., HIGH); delay(1); digitalWrite(..., LOW);
LED를 짧게 점등시켜 상태를 표시
전체적으로 이 코드는 세 개의 입력(A, B, Carry In)을 받아 Full Adder 연산을 수행하고,
**합(S)**은 빨간 LED,
**자리올림(Carry Out)**은 초록 LED로 나타내는 회로와 프로그램이다.
Copyright ⓒ Tech79 All right reserved