프로그래밍/아두이노

아두이노 우노 LED 쉬프트 제어하는 방법, 회로 구성, 코드분석까지 한번에 알아보자!

전자장인 2023. 8. 23.
반응형

안녕하십니까

전력전자 각종MCU 공부하고 최종적으로 작품을 만드는 전자 장인입니다 

 

오늘의 주제는

아두이노 우노를 이용한 LED 쉬프트 제어 방법!

 

1. 제어동작 분석

지난 시간까지 아두이노 우노에 LED를 연결하여 온/오프 동작을 진행해 보았습니다.

하나의 LED만 연결하고 진행함에 따라 

이번에는 5개의 LED를 연결하고 

온/오프 동작뿐 아니라

LED의 점들이 옮겨지는 동작을 수행해 보겠습니다.

 

오늘 저희가 진행할 제어는 다음과 같습니다.

 

1. LED 하나씩 쉬프트 제어

5개의 LED가 존재하며 처음 LED부터 끝 LED까지 하나씩 온/ 오프 되며

옮겨지는 동작입니다.

LED 하나씩 쉬프트 제어

2. LED 온 유지하며 쉬프트, 오프 유지하며 쉬프트

초반에는 하나씩 켜지고 쉬프트 될 때마다

이전 LED는 켜져 있는 상태를 유지합니다. 

또한 5개의 LED가 모두 켜진 뒤 하나씩 꺼지는 동작을 수행합니다.

LED 온 유지하며 쉬프트, 오프 유지하며 쉬프트

 

2. 회로구성

회로 구성은 다음과 같습니다.

아두이노 우노의 핀 2~6번을 사용함에 따라

핀 번호는 PD2~PD6에 연결하게 됩니다.

 

LED의 색은 편하신 색으로 선택하여 극성에 맞게 연결시켜 주시기 바랍니다.

지난 포스팅을 확인 후 이번 실습을 진행하시면 더욱 이해가 편하시니 

아래 포스팅을 참고 바랍니다.

 

LED 쉬프트 제어 회로 구성

 

2023.08.20 - [프로그래밍/아두이노] - 아두이누 우노 LED 제어 방법, 회로구성, 코드 분석

 

아두이누 우노 LED 제어 방법, 회로구성, 코드 분석

안녕하십니까 전력전자와 각종MCU를 공부하고 최종적으로 작품을 만드는 전자 장인 입니다 오늘의 주제는 아두이노 우노를 이용한 LED 연결 및 제어 1. 실습 준비물 아두이노 우노를 이용한 LED 제

electronic95.tistory.com

 

 

3. LED 하나씩 쉬프트 제어 코드 분석

다음은 LED 하나씩 쉬프트 하는 코드입니다.

직접 동작시켜 보기 위해 일부분 코드는 작성하지 않았습니다.

핀 선언은 이전 게시글을 참고하셔서 5개 모두 선언 후 진행 부탁드립니다.

 

int control[]={led2, led3, led4, led5, led6}; // LED 배열 0~4

void loop() {
  for (int i = 0; i < 5 ; i++) {
    digitalWrite(control[i], HIGH);
    delay(200);
    digitalWrite(control[i], LOW);
  }
 
  for (int i = 4; i >= 0; i--) {
    digitalWrite(control[i], HIGH);
    delay(200);
    digitalWrite(control[i], LOW);
  }
}

control[]=~~

LED를 변수에 지정 후 배열에 저장함을 확인할 수 있습니다.

배열을 선언할 때는 "변수명[]"으로 지정할 수 있습니다.

 

loop

무한 반복을 위하여 loop에서 동작을 수행합니다.

 

for문

첫 번째 for문은 i가 0에서 시작하며 i가 5 미만이 될 때까지 i를 하나씩 증가시키는 조건입니다.

control [i]는 배열을 사용하여 i 가 하나씩 증가할 때 i 숫자에 해당하는 LED가 온(HIGH) 동작을 수행합니다.

그 상태 이후 200ms 대기하며

i 숫자에 해당하는 LED가 오프(LOW) 동작을 수행하게 됩니다.

이 동작을 i가 5 미만이 될 때까지 수행하면서 LED는 한 칸씩 쉬프트 하는 모습을 확인할 수 있습니다.

 

두 번째 for문은 반대로 i가 4부터 시작하며 i가 0보다 작아질 때까지 i를 하나씩 감소시키는 조건입니다.

따라서 LED동작은 첫 번째 for문의 동작과 반대됨을 확인할 수 있습니다.

 

 

4. LED 온 유지하며 쉬프트, 오프 유지하며 쉬프트

다음은 LED 온을 유지하며 쉬프트 하는 코드입니다.

직접 동작시켜 보기 위해 일부분 코드는 작성하지 않았습니다.

LED 하나씩 쉬프트 동작보다 간단한 것을 확인할 수 있습니다.

void loop() {
  // put your main code here, to run repeatedly:

 
for(i=0; i<5; i++){  //n5이하일때 N 1씩 증가

    digitalWrite(control[i],HIGH);
    delay(200);
  }
  for(int i = 5 - 1; i >= 0; i--){
    digitalWrite(control[i],LOW);
    delay(200);
  }
}

 

코드를 살펴보면 LED 하나씩 쉬프트 제어와 별 다르지 않음을 볼 수 있습니다.

그 이유는 LED를 오프(LOW)하는 동작을 넣지 않았기 때문입니다.

HIGH 신호를 주고 LOW신호를 주지 않으면 해당 핀에서는 계속 HIGH 신호를 유지하고 있음을 이용하였습니다.

 

따라서 첫 번째 for문에서는 LED를 온 시키면서 i를 증가시켜 LED가 켜져 있는 상태를 유지할 수 있습니다.

두 번째 for문은 켜져 있는 LED를 맨 끝부터 오프 시킴에 따라 원하는 동작을 확인할 수 있습니다.

 

다음 시간에는 새로운 아두이노 우노의 센서를 사용해 보는 시간을 가지도록 하겠습니다.

지금까지 전력전자 각종MCU 공부하고 최종적으로 작품을 만드는 전자 장인이었습니다

감사합니다

반응형

댓글

💲 추천 글