오늘은 원래 프로젝트 2를 시원하게 마무리하려고 했어요.
하지만 현실은... 첫째 아이의 어린이집 결석 😇
두 아이랑 하루를 꽉 채워 보내고
육퇴 후 노트북을 열었을 땐 이미 체력이 방전 상태였지만,
"조금만 더..." 하는 마음으로 코드를 붙잡았습니다.
📍 왜 GAME OVER가 안 뜰까? (인터럽트의 함정)
오늘 저를 가장 괴롭힌 건 인터럽트 함수(ISR)였어요.
버튼을 누르면 점수가 올라가고,
10점을 넘으면 "GAME OVER"를 출력하는 구조였죠.
분명 책대로 Serial.println("GAME OVER");를 인터럽트 함수 안에 썼는데...
👉 시리얼 모니터는 조용하고, 코드는 멈춘 것 같고...
오타인가 싶어 몇 번을 다시 쳤는지 몰라요.
"왜 안되지?"라며 자책할 뻔했죠. 😭
💡 결론: 내가 틀린 게 아니었다!
알고 보니 문제는 제가 아니라 인터럽트 함수(ISR)의 특성이었어요.
CPU가 긴급 상황에서 아주 짧게 실행하는 함수라 제약이 정말 많더라고요.
- ❌ delay() 사용 금지
- ❌ Serial.print() 거의 사용 불가 (출력 속도가 느려 CPU가 꼬여요)
- ❌ while(1) 같은 무한루프 절대 금물!
책은 개념을 알려주지만, 이런 현실적인 제약은 생략된 경우가 많더라고요.
제가 겪은 문제는 출력이 되기도 전에 무한 루프에 걸려버린 거였죠.
✅ 해결 방법: ISR은 '표시'만, 처리는 'loop'에서!
구조를 살짝 바꿨더니 드디어 시리얼 모니터에 GAME OVER가 떴습니다!
그 짧은 문장이 어찌나 반갑던지 😂
🌱 오늘의 깨달음
오늘 느낀 건 딱 이거예요.
"책은 길을 보여주지만, 직접 걸어봐야 돌멩이가 어디 있는지 안다."
이런 삽질을 했다는 건 제가 그만큼 깊이 들어왔다는 증거겠죠?
프로젝트 2는 오늘 완성 못 했지만,
이 값진 경험 덕분에 내일은 훨씬 빠르게 달려갈 수 있을 것 같아요.
🏁 오늘의 결론: 코딩은 배신하지 않는다.
다만, 책은 가끔 현실을 다 말해주지 않을 뿐! 내일의 나, 파이팅!
#아두이노 #아두이노독학 #엄마의코딩성장일기 #인터럽트 #ISR주의사항 #가정보육후코딩 #육퇴후자기계발#SerialPrint오류 #volatile