unsigned long의 시간
Coddy Arduino 여정의 delay 없이 타이밍 제어하기 섹션에 포함된 레슨. 18개 중 2번째.
변수는 자료형에 따라 정해진 크기까지만 숫자를 저장할 수 있습니다. Uno의 int는 -32768부터 32767까지 저장합니다. 32.8초가 지나면 millis() 값이 이 범위를 넘고, 이를 저장하려는 int는 음수로 오버플로됩니다.
unsigned 자료형에는 음수가 없으므로 두 배 높은 값까지 표현할 수 있습니다. unsigned int는 0부터 65535까지 저장하며, 밀리초로 약 65초에 해당합니다. 그래도 충분하지 않습니다.
unsigned long은 0부터 4,294,967,295까지 저장합니다. 밀리초로 환산하면 49일이 넘으며, millis() 자체가 반환하는 자료형입니다. 모든 시간을 이 자료형으로 저장하세요:
unsigned long now = millis();
unsigned long startTime = 0;자료형을 잘못 사용한 스케치는 30초 정도는 작동하다가 잘못되기 때문에 버그를 놓치기 쉽습니다.
챌린지
쉬움이 스케치는 초당 한 번 시간을 출력하지만, 32초가 지나면 음수를 출력합니다. 며칠 동안 시간이 올바르게 유지되도록 now의 유형을 변경하세요.
실행을 누르고 버그를 확인할 수 있도록 33초가 지날 때까지 기다린 다음, 수정하고 확인을 누르세요.
직접 해보기
void setup() {
Serial.begin(9600);
}
void loop() {
int now = millis(); // 이 자료형은 시간을 담기에 크기가 너무 작습니다. 변경하세요
Serial.println(now);
delay(1000);
}
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
delay 없이 타이밍 제어하기의 모든 레슨
직접 연습해 보세요: Arduino 플레이그라운드