본문 바로가기

엄마의 성장일기🌱

🌱 엄마의 코딩성장기록 Day 68 - 아두이노 책에는 안 나오는 인터럽트 주의사항 (Serial.print가 안 될 때!)

 

오늘은 원래 프로젝트 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