| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
| 29 | 30 | 31 |
- 컴퓨터비전
- 백준
- 동적계획법
- dp
- C
- BFS
- 우선순위큐
- JavaScript
- 다이나믹프로그래밍
- cpp
- 구현
- 2018 KAKAO BLIND RECRUITMENT
- 프로그래머스
- level2
- dfs
- 다이나믹 프로그래밍
- java
- 그리디
- kotlin
- level3
- 이분탐색
- 자바
- lv2
- 코틀린
- 누적합
- Stack
- c++
- 컴퓨터 비전
- 통신 인터페이스
- 임베디드
- Today
- Total
코드를 느껴바라
[임베디드] 엣지 감지 (with LED 토글) 본문
엣지 감지가 필요한 상황
아두이노 우노 보드로 스위치를 눌렀을 때 불이 켜져있었다면 꺼지도록
만약 꺼져있었다면 켜지도록 해주려고 했다.
bool lightOn = false;
void setup() {
pinMode(13, OUTPUT);
pinMode(12, INPUT);
}
void loop() {
bool key1 = digitalRead(12);
if(key1 == LOW){
lightOn = !lightOn;
delay(100);
}
digitalWrite(13, lightOn);
}
회로는 제대로 연결되었고 이제 코드를 업로드하고 나서 LED를 봤는데?
누르지도 않았는데 혼자 계속 깜빡 깜빡 거린다.

왜 그랬던 것일까?
이유는 바로 크게 두 가지가 있는데
첫 번째는 INPUT 모드라서 값이 튈 가능성 있다는 것
두 번째는 누르고 있는 동안 계속 토글이 된다는 것
첫 번째 이유는 추후에 풀업, 풀다운에 대해서 다룰때 따로 설명토록 하고
오늘의 주제인 엣지 감지에 대해서 설명토록 하겠다.
기존의 코드를 보면 key1값이 LOW인 경우라면 상태를 반전시키는데
이렇게 한다면 1초에도 수천번 루프를 도는데 버튼이 눌린 동안 계속 상태가 반전되어
결국 최종 상태는 내가 원했던 동작이 아닌 랜덤값이 되어버린다.
HIGH HIGH HIGH HIGH LOW LOW LOW LOW HIGH HIGH
이렇게 버튼을 한번 누르더라도 누를때 그 짧은 찰나동안 LOW가 계속해서 들어온다.
그래서 논리회로때 들어봤을 엣지를 인식했을때 바꿔주는 방식으로 진행해주면 된다.
Rising Edge (상승 엣지)
LOW -> HIGH로 변하는 순간이다.
Falling Edge (하강 엣지)
HIGH -> LOW
그럼 이제 이전 입력을 저장하고 있다가 하강엣지일 때
즉, 이전 입력이 HIGH였는데 현재 입력이 LOW라면 하강엣지이므로
상태를 변환시켜주면서 정상작동에 근접한 작동을 하게 된다.
최종코드는 아래와 같다.
bool lightOn = false;
bool prevKey = HIGH;
void setup() {
pinMode(13, OUTPUT);
pinMode(12, INPUT_PULLUP);
}
void loop() {
bool key1 = digitalRead(12);
if(prevKey == HIGH && key1 == LOW){
lightOn = !lightOn;
delay(100);
}
prevKey = key1;
digitalWrite(13, lightOn);
}
이제는 정상 작동(90%)
나머지 10%에 가까운 확률은 풀다운, 풀업으로 채워보겠다. 다음 포스팅에서.

'개발 > 임베디드(Embedded)' 카테고리의 다른 글
| [임베디드] HAL의 정의, 필요성 (3) | 2026.02.04 |
|---|---|
| [임베디드] 임베디드 시스템 개요 (0) | 2026.02.03 |
| [소프트웨어 공학] Automotive-SPICE 개요 (A-SPICE) (2) | 2026.01.23 |
| [네트워크] CAN 통신 (2) | 2026.01.10 |
| [C/C++] 정의와 선언의 차이 in C언어 (0) | 2025.12.30 |
