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

아두이노 보드와 코딩, 그리고 8진 카운터를 사용하는 실습

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

안녕하세요?


이번 포스팅에서 올리는 수업내용 자체는 지난 수요일에 있었던 수업의 내용이기는 하지만, 그래도 정리를 하는데 시간이 이래저래 많이 걸려서 오늘에야 포스팅을 올릴 수 있게 되었습니다. 



먼저 if문을 실습해 보았습니다. 위 스크린샷에 나와 있는 것처럼, if의 조건문을 쓰고, else if를 하면, 아래의 스크린샷과 같은 결과가 나오게 됩니다.



모든 else if의 조건들은 같은 if의 문에 연결이 되어 있어서, 한개의 조건문만 만족을 하면 나머지 조건은 다 무시를 해 버립니다.



하지만 else if가 아니라 그냥 if문만 연속적으로 나열한 경우에는 상황이 많이 달라지게 됩니다.



조건에 맞는 모든 if문이 다 나열이 되게 되는 것입니다. 이렇게 나오는 것을 생각하면 앞으로 if문의 단순한 나열과 else if를 써야하는 것을 생각해야 겠습니다.



계속해서 실습에 들어갑니다.



처음에 입력한 변수가 if문의 조건에 맞으면, 조건에 맞는 실행문만을 실행한 다는 것을 알 수 있었습니다.




여기서는 슬슬 pull-down과 pull-up에 대해서 나오기 시작합니다. 우선 pull-down에 대해서는 기존에 많이 사용을 하며, 여기서는 스위치를 누르면 High인 1이 되고, 스위치를 떼면 Low인 0이 됩니다. 그렴 여기서 pull-up에 경우에는 반대로 스위치를 누르면 Low인 0이 되고, 스위치를 떼면 High인 1이 되는 차이가 있습니다.



다음은 이를 실습해 보기 위해서 스케치에서 코딩을 새로 짠 것입니다. void setup의 항목을 보시면 2번 pinMode에 INPUT이라는 것이 나와 있는 것ㄹ을 보실 수 있습니다. 이렇게 하면 새로이 들어오는 정보를 읽어서 들일 수 있는 것입니다.



실제 회로를 결선한 모습입니다. 아누이도 우노 보드와 브래드 보드를 이용해서 회로를 연결한 모습입니다. 여기서는 Pull-down인 회로를 연결 하였고, 스위치를 누르면 1이라고 출력이 되는지를 보면 됩니다.



결과를 확인 할 수 있었습니다.



이번에는 Pull-up 정항이라는 것으로 회로를 연결 하였습니다. 그리고 결과를 보면.....



결과가 pull-down과는 반대로 나오는 것을 볼 수 있었습니다.



이번에는 pinMode에다가 INPUT_PULLUP이라는 것을 설정합니다. 이렇게 하면 아두이노 보드의 핀 자체가 Pull up 저항이 되어서 자체적으로 5V 전압을 걸어주는 역할을 하게 됩니다.



실제로 회로를 결선할 때 저항없이 연결을 해도 아무런 문제가 없는 것을 볼 수 있었습니다. 이것으로 핀 자체가 일종의 저항 역할도 할 수 있는 것을 볼 수 있었습니다.



결과도 차이가 없었습니다.



이번에는 2번 핀에 입력이 되는 신호에 따라서 3번 핀의 출력 여부를 다르게 해주는 코드를 짰습니다.



여기서 사진 만으로는 보여 드릴 수 없지만, 그래도 여기서 2번 핀에 들어가는 스위치에 따라서 3번 핀으로 부터 출력을 받아서 LED의 불빛이 들어오고 나오는 것을 따로 볼 수가 있었습니다.




이번에는 카운터를 만들고자 합니다. count라는 변수는 처음에는 0이었지만, 브래드 보드에 연결된 스위치를 누를 때 마다 1씩 증가를 하게 만들어 두었습니다.



문제는 채터링이라는 현상이 발생해서, 여기서는 스위치를 살짝 누르기만 했지만, 마이크로 프로세스가 인식하는 속도가 빨라서 한번에 여러번이 올라가고, 스위치를 누르면 계속해서 입력이 되는 현상이 발생하는 것입니다.



그래서 위에서 나와 있는 것처럼, prev0라는 변수를 선언하고, 이 변수와 스위치를 누를 때마다 변하는 변수, 이렇게 2개를 선언합니다. 그리고 나서, if (switch0 != prev0) 라는 조건문을 달아서, 여기서는 한번 스위치를 누르면 switch0와 prev0가 같은 변수가 되어서 더 이상은 스위치를 누를 때 count가 증가하지 못하도록 합니다.



실제로 제대로 돌아가는 결과를 확인 할 수 있었습니다.




일단 완성된 코드인데 if문을 여러개 사용하였습니다. 그런데 이런 문장을 switch case문으로 간단하게 정리를 할 수 있다고 합니다.



switch 변수


case 1 :


이런 식으로 여러개의 case를 만드는 식으로 if문을 대체할 수가 있는데, 여기서 나올 수 있는 것이 count%2 를 사용해서 2진수 카운터를 만드는 데 성공하기는 했습니다. 그런데, 이를 응용하면 8진 카운터를 만들 수 있다고 합니다.



일련의 코딩을 거치도록 합니다. 가장 핵심이 되는 것이라고 하면, 역시 count%8 이라는 연산식으로, 나머지를 구하는 연산자를 이용해서 10진수를 여러가지 진수로 바꿀 수 있다고 합니다.



마지막으로 회로를 연결 하였고, 제대로 8진 카운터가 되어서 나오는 것을 볼 수 있었습니다. 이것으로 수요일에 있었던 수업의 내용을 다 정리하는 데 성공하였습니다. 일단 지금까지는 마이크로 프로세서로 아두이노 보드만 쓰고 있지만, 어느 순간에 이게 더 윗 단계에 있는 기기를 가지고서 실습에 들어갈지는 모르겠다는 생각이 듭니다.



반응형