본문 바로가기
PLC 자동제어 학습/아두이노 보드 수업

For문을 이용한 제어문과 배열을 이용한 자료구조 만들기를 응용한 아두이노 보드 수업

by 인터넷떠돌이 2017. 11. 30.
반응형

안녕하세요?


이번 포스팅에서는 수요일에 있었던 아두이노 보드를 이용해서 For문을 공부했는 수업과 이후에 이어지는 배열을 이용해서 이를 응용한 내용을 올리고자 합니다.



먼저 기초적인 코딩을 아두이노 통합 개발툴인 스케치에서 해보도록 합니다. 일단 코딩은 1에서 10까지 모든 숫자를 더하기를 하는 것입니다.



55라는 값이 계속해서 시리얼 모니터에서 나올 수 있습니다.



다음은 1+3+5+7+9를 계산하는 코딩입니다.



이번에도 무리없이 선공한 것을 볼 수 있었습니다. 이렇듯이 For문은 다음과 같은 구조를 지니고 있다고 합니다.




For (초기식 ; 조건식 ; 증감식 )


초기식은 간단하게 맨 위에서 선언한 변수, 주로 int로 정수형으로 선언된 변수가 처음에 어떤 값인지를 나타내고 있습니다. 그리고 나서 조건식에 있는 조건이 참인 한은 For문 아래에 있는 { } 안의 제어문을 계속해서 반복하게 됩니다. 그리고 중요한 것이 마지막으로 증감식에서는 초기식의 변수가 증가만이 아니라 감소도 만들 수 있다는 것입니다.



다음은 과제러서 하루 22cm씩 올라가는 달팽이가 몇일 만에 1미터 깊이의 우물을 탈출 할 수 있는지를 계산하는 과제인데, 여기서는 count라는 변수를 선언한 다음, 반복문이 반복될 때마다 1씩 증가 되도록 설정을 하였습니다. 그렇게 해서 For문이 종료된 다음에 count를 출력하도록 하였습니다.



5일이 걸린다는 것을 알 수 있었습니다.



다음은 과제로 구구단 2단이 출력되도록 For문을 사용한 예시입니다.



구구단 2단이 나오는 것을 볼 수 있었습니다. 여기까지는 무난하게 되기는 되었습니다.


여기서 바로 2중 For문이 나오게 됩니다. 한마디로 For문 안에 For문이 하나 더 있는 것입니다. 일단 코딩이 너무 길어서 한개의 스크린샷에 다 나오지는 않기에 여기 아래에 전체 코딩을 올리도록 하겠습니다.


int i;

int j;

int multiplex;


void setup(){

  Serial.begin(9600);

}

void loop(){

for(j=2; j<=9; j+=1){

  for ( i=1; i<=9; i+=1)

{

  multiplex=j*i;

  Serial.print(j); Serial.print("*"); Serial.print(i);

  Serial.print("="); Serial.println(multiplex);

  delay(1000);

}

delay(5000);

j=0;

}


위에 나와 있는 것처럼, For문의 제어문 안에 For문을 하나 더 두어서 구구단을 2단에서 9단까지 출력하는 코딩을 완성한 것이며, 이게 제대로 작동하는 것인지 살펴 보도록 하겠습니다.



제대로 된 결과가 나오는 것을 확인할 수 있었습니다.



이번에는 과제로 반대로 9단에서 부터 2단까지 구구단을 반대 순서로 출력할 수 있도록 코딩을 짰습니다. 여기서 For문의 증감식에서 j -= 1 이라는 식으로 1씩 빠지는 것을 만들 수 있었습니다.



제대로 9단부터 나오는 것을 볼 수 있었습니다.



여기서 이제 배열이라고 해서 선언하는 방법은 다음과 같습니다.


int 변수이름[숫자]={1,2,3,4,5,6};


배열은 동일한 타입을 가진 변수들의 유한집합이로서 가장 기본적인 자료구조라고 합니다. 이 배열안에 들어가는 숫자는 규칙성이 없을 수는 있지만, 배열안에 있는 자료를 부르기 위해서는 다음과 같은 규칙이 있습니다.


변수명[0]

변수명[1]

변수명[2]


이렇게 변수를 부르기 위해서는 [ ] 안에 숫자를 넣어야 하는데, 이 숫자는 규칙성이 있습니다. 그래서 여기다가 for문을 적용하는 것이 가능합니다.



실제로 for문을 사용해서 배열안의 내용을 차례차례 불러오는 데는 성공하였습니다.



그래서 이번에는 FND라고 해서, 이걸 이용해서 0에서 부터 9까지 숫자를 표시하는 회로를 만들고자 합니다. 우선 위 스크린샷에 다 나오지는 않았기 때문에 아래에 별도로 적어 놓도록 합니다.


int i; 

int j;

int table[10][7]={{1,1,1,1,1,1,0},{0,1,1,0,0,0,0},{1,1,0,1,1,0,1},{1,1,1,1,0,0,1}

,{0,1,1,0,0,1,1},{1,0,1,1,0,1,1},{0,0,1,1,1,1,1},{1,1,1,0,0,0,0},{1,1,1,1,1,1,1},

{1,1,1,1,0,1,1}};

void setup(){

  Serial.begin(9600);

}

void loop(){

for(j=0;j<10;j++){

for(i=0; i<7; i +=1)

{

  Serial.print(table[j][i]);

  Serial.print("\t");

}

Serial.print("\n");

Serial.println("next");

delay(1000);

}

delay(1000);

}




FND의 핀 하나하나에 맞도록 코드를 짠 다음에 여기서는 2중 For문을 이용해서 출력하고자 했습니다. 그리고 이번에는 시리얼 모니터를 이용해서 결과를 보고자 합니다.



제대로 코드가 나오는 것을 볼 수 있었습니다. 이제는 이걸 시리얼 모니터가 아니라 실제 브레드 보드에 있는 FND에 적용해 보고자 합니다.



코드에서는 Serial.begin으로 되어 있는 것을 pinMode로 바꾸고, 다음에는 Serial.print를 digitalWrite로 바꾸는 작업을 하고자 합니다.



마지막으로 성공한 모습입니다. 이렇게 배열을 사용하면 예전에는 일일히 복잡한 단순반복 작업을 해야만 했지만, 여기서는 배열만 만드는 것으로 간단하게 할 수 있었습니다.

반응형