본문 바로가기

아두이노(arduino)

아두이노 digitalWrite (디지털 출력) 와 delay로 led 제어 심화

delay 함수를 이용한 led 제어

 

이전 포스팅에서는 아두이노보드에 내장되어 있는 led를 이용해 간단하게 켜고 끄는 걸 진행해 봤습니다.

 

2023.01.02 - [아두이노(arduino)] - 아두이노 digitalWrite(디지털라이트), pinMode(핀모드), delay(딜레이) 함수 사용법

 

아두이노 digitalWrite(디지털라이트), pinMode(핀모드), delay(딜레이) 함수 사용법

digitalWrite 함수 digitalWrite 함수는 전기를 켜고 (on), 끄는(off) 역할을 할 수 있는 함수이며 아두이노 스케치에서는 on은 HIGH로 off는 LOW로 표현합니다. 예 : digitalWrite(13,HIGH); // 13번 핀을 HIGH , 즉 전기

ronco.tistory.com

 

이번에는 delay() 함수를 이용해 좀 더 자세히 제어해보고 delay() 함수가 코드에 미치는 영향에 대해서도 알아보기로 합시다.

 

지난 시간에 이어 간단한 코드를 작성해 보겠습니다.

 


void setup(){

pinMode(13, OUTPUT)  // 13번 핀을 출력으로 사용합니다.

}

 

void loop(){

 

digitalWrite(13, HIGH);  // 13번 핀에 전기를 켠다 led가 연결되어있으니 led에 불이 들어온다.

delay(500);  //  0.5초 기다린다.

digitalWrite(13, LOW);  // 13번 핀에 전기를 끈다. 마찬가지로 led가 연결되어있으니 led불이 꺼진다.

delay(500);  // 0.5초 기다린다. 

 


여기서 착각하지 말아야 될 사항이 있습니다. 보통 코딩을 접해보지 않은 사람이라면, 위와 같은 코드를 봤을 때 이렇게 생각할 수도 있습니다.

 

예를 들어 13번에 모터가 연결되어 있어 3초를 돌아가게 했다고 가정해 봅시다.

그런 뒤 제가 질문을 합니다.

 

"3초 뒤 모터는 어떻게 되어있을까요?"

"음... 3초뒤 멈추지 않을까요?"

코딩을 많이 접해보지 않은 사람의 공통된 답변입니다.

 

정답은 멈추라는 이야기가 없으니 정답은 계속 움직인다입니다. 3초 동안 돌라고했고. 3초동안 다 돌았지만, 멈추라는 이야기가 없으니 계속 돌아가는 게 정상이란 겁니다. 멈추기 위해선 멈추라는 명령어가 꼭 들어가야지만 멈춥니다.

 

아주 아기 같죠??  하나하나 자세히 설명해줘야지 동작하는 친구입니다.

 

 

 

*아두이노에 내장된 led는 13번에 연결되어 있어 편의상 사용합니다.

 

 

 

위와 같은 코드를 작성했고 업로드한 뒤 어떻게 작동하는지 알아봅시다.

 

업로드하는 방법은 위 링크에 자세히 포스팅되어 있습니다.

 

아두이노 우노보드 13번 led

 

아두이노 우노보드 13핀led 켜고 끄기 반복

어떤가요?? 잘 깜박이는 걸 볼 수 있죠? 아두이노 상단에 L이라는 영어 옆에 작은 LED가 13번 핀과 연결된 LED입니다.

 

이번엔 delay() 시간을 좀 바꿔 다시 업로드해보도록 하겠습니다.

 


void setup(){

 

pinMode(13, OUTPUT);

}

 

void loop(){

 

digitalWrite(13, HIGH);

delay(100);

digitalWrite(13, LOW);

delay(500);

 

}

 

 


켜진 시간보다 꺼진 시간을 조정해서 다시 업로드해보도록 하겠습니다.

 

 

 

이번에 보니 켜진 시간이 짧고 꺼진 시간이 상대적으로 빨리 깜빡이는 걸로 보입니다.

 

어떻게 구동되는지 그래프를 그려서 확인해 볼까요??

 

 

해당 그림을 0.5초 간격으로 켜지고 꺼지는 걸 나타내는 그래프입니다. 이전에 업로드한 내용이죠

 

그럼 이번에 업로드한 그래프는 어떤지 살펴볼까요??

 

켜져 있는 라인은 짧고 꺼져있는 라인은 긴 시간인 걸 볼 수 있습니다.

 

0.1초 같은 시간은 그래도 육안으로 확인이 가능하지만 좀 더 극단적으로 테스트를 해볼까요??

 

 

 


void setup(){

 

pinMode(13, OUTPUT);

}

 

void loop(){

 

digitalWrite(13, HIGH);

delay(1);   // 0.001초 기다린다

digitalWrite(13, LOW);

delay(9);   // 0.009초 기다린다.

 

}


위 코드를 해석해보면 0.001초만큼 led가 켜지고 0.009초만큼 led가 꺼진다로 이해하면 됩니다.

 

그럼 아주 짧은 시간 동안 켜지고 상대적으로 좀 더 긴 시간 꺼지고 이런 식이 반복되겠죠??

 

 

 

결과를 확인해 볼까요?

좌우의 led 밝기만 조금 다를 뿐 큰 차이가 없습니다.

 

 

영상으로 확인해 볼까요??

 

led가 지속적으로 켜져 있는것 처럼 보입니다.  이것은 사람육안으로 확인하기 어려울정도의 속도로 깜박이기 때문에 켜져 있는것 처럼보이는 것이고, 켜져 있는 시간과 꺼져있는 시간이 확연히 차이나는데도 불구하고 너무 짧은시간이라 켜져있는것 처럼보이는 것입니다. 대신 두가지 조건중 켜져있는 시간이 조금 더 긴 것이 led가 밝은 것도 확인할 수 있습니다.