Professional Documents
Culture Documents
2022년도-2학기-임베디드시스템 08 4주차 (2) 디지털입출력
2022년도-2학기-임베디드시스템 08 4주차 (2) 디지털입출력
Kim)
디지털입출력(2)
김동욱
디지털 값
1 1 HIGH 5V ON
5V 5V
0V 0V
디지털 핀
0~13 : 디지털 입출력 핀
A0~A5 : 디지털 입출력 핀
기호상수 :
A0 14
A1 15
A2 16
0~13 A3 17
A4 18
A5 19
A0~A5 겸용 핀
0, 1 : 시리얼 UART 통신 RX/TX 핀 겸용
2, 3 : 외부 인터럽트 0/1핀 겸용
3, 5, 6, 9, 10, 11 : PWM 핀 겸용
A0, A1, A2, A3, A4, A5 : 아날로그 입력 겸용
void setup() {
︙
pinMode(핀 번호, INPUT); // 입력 모드 설정
︙
}
void loop() {
︙
변수 = digitalRead(핀 번호); // 디지털 신호 입력
︙
}
누름(Push) 스위치
• 누르면 : 단자 연결
• 떼면 : 단자 분리
스위치 구성
• 4 단자 중 좁은 간격의 두 단자 사이
• 아래 그림의 A (또는 D)와 B (또는 C)
스위치 동작
• PRESS → 5V 입력
• RELEASE → Floating 신호 입력 (:단락)
R1 R2
R1
R2
R R
s s
MCU MCU
( (
R R
s s
MCU MCU
( (
스위치 동작
PRESS → 5V 입력
RELEASE → 0V 입력
스위치 동작
• PRESS → 0V 입력
• RELEASE → 5V 입력
목표: 1. 디지털 입력 이해
2. Pulldown Switch 이해
3. pinMode() 이해
4. digitalRead() 이해
준비물:
1. Arduino Uno R3 board
2. Tact Switch, Resistor 10kΩ
3. LED, Resistor 220 Ω
3. Breadboard
+ 저항 220Ω 13
LED
- GND
아두이노
1 5V
Tact UNO
2 저항 10kΩ GND
Switch
2
void setup() {
pinMode(pinBtn, INPUT); 2번 핀 디지털 입력 지정
pinMode(pinLED, OUTPUT); 13번 핀 디지털 출력 지정
Serial.begin(9600);
}
void loop() {
stateBtn = (bool) digitalRead(pinBtn); 2번핀 스위치 상태를 읽어, 변수 stateBtn에 저장
Serial.println(stateBtn); stateBtn 값 시리얼 출력
delay(100); 0.1초간 시간 지연
}
준비물:
1. Arduino Uno R3 board
2. Tact Switch, Resistor 10kΩ
3. LED, Resistor 220 Ω
3. Breadboard
+ 저항 220Ω 13
LED
- GND
아두이노
1 GND
Tact UNO
2 저항 10kΩ 5V
Switch
2
void setup() {
pinMode(pinBtn, INPUT); 2번 핀 디지털 입력 지정
pinMode(pinLED, OUTPUT); 13번 핀 디지털 출력 지정
Serial.begin(9600);
}
void loop() {
stateBtn = (bool) digitalRead(pinBtn); 2번핀 스위치 상태를 읽어, 변수 stateBtn에 저장
Serial.println(stateBtn); stateBtn 값 시리얼 출력
delay(100); 0.1초간 시간 지연
}
준비물:
1. Arduino Uno R3 board
2. Tact Switch
3. LED, Resistor 220 Ω
3. Breadboard
+ 저항 220Ω 13
LED
- GND 아두이노
Tact 1 GND UNO
Switch 2 2
void setup() {
pinMode(pinBtn, INPUT_PULLUP); 2번 핀 디지털 입력 지정 & 내장 PULLUP 사용
pinMode(pinLED, OUTPUT); 13번 핀 디지털 출력 지정
Serial.begin(9600);
}
void loop() {
stateBtn = (bool) digitalRead(pinBtn); 2번핀 스위치 상태를 읽어, 변수 stateBtn에 저장
Serial.println(stateBtn); stateBtn 값 시리얼 출력
delay(100); 0.1초간 시간 지연
}
void setup() {
pinMode(pinBtn, INPUT_PULLUP); 2번 핀 디지털 입력 지정 & 내장 PULLUP 사용
pinMode(pinLED, OUTPUT); 13번 핀 디지털 출력 지정
Serial.begin(9600);
}
void loop() {
stateBtn = ! (bool) digitalRead(pinBtn); 2번핀 스위치 상태를 읽어, 반전시켜, 변수 stateBtn에 저장
Serial.println(stateBtn); stateBtn 값 시리얼 출력
delay(100); 0.1초간 시간 지연
}
void setup() {
pinMode(pinBtn, INPUT);
pinMode(pinLED, OUTPUT);
Serial.begin(9600);
}
void loop() {
stateBtn = (bool) digitalRead(pinBtn);
if (stateBtn) {
if (stateBtn != prevState) {
toggleBtn = !toggleBtn;
Serial.println(toggleBtn);
}
}
digitalWrite(pinLED, toggleBtn);
prevState = stateBtn;
delay(100);
}
스위치 위치 스위치 위치
release release
UP UP
press press
DOWN DOWN
디지털 신호 디지털 신호
BOUNCE HIGH HIGH BOUNCE
HIGH HIGH
LOW LOW
LOW LOW
카운트 프로그램 :
Button Count : 누를 때마다 카운트 1씩 증가
Button Reset : 카운트 0으로 리셋
Bounce2 라이브러리 :
void setup() {
︙
바운스객체.attach(핀 번호); // Debounce 핀 지정 (PULLUP등 핀 설정 후)
바운스객체.interval(시간간격_ms); // Debounce time을 ms 단위로 설정
︙
}
void loop() {
︙
바운스객체.update(); // 바운스객체 업데이트 (버튼 상태가 변하면 true 반환)
변수 = 바운스객체.read(); // 업데이트된 핀 값을 읽음
바운스객체.fell(); // 핀이 HIGH에서 LOW로 변하면 true 반환
바운스객체.rose(); // 핀이 LOW에서 HIGH로 변하면 true 반환
︙
}
Debouncing 회로 :
디지털 입력
Tact 스위치 C
(10μF, 1μF, 0.1μF)
Thank you!
dwkim@yu.ac.kr