프로젝트 내용은 다음과 같습니다.

프로젝트 요구기능

구현범위 : 기본미션, 추가미션1,2,3,4

제가 코딩을 작성한 순서는 기본미션-> 추가미션1-> 추가미션2 ->추가미션3->추가미션4의 순서이나, 듣는사람의 입장에서 구현방법을 설명하기 위해선 추가미션4-> 기본미션-> 추가미션1->추가미션2->추가미션 3의 순서대로 설명하는 것이 좋을 것 같습니다.

  1. 추가미션4

우선, 미션들을 살펴보았을 때 다음단계로 넘어가기 위해 사용하는 버튼은 *, P1.1, P2.1세가지입니다. 그리하여 저는 각각의 버튼이 눌린 수를 count하는 변수 psw_cnt, sw_cnt, swt_cnt 세가지를 선언하였습니다.

추가미션 4는 psw_cnt(*)와 sw_cnt (P1.1)를 이용하여 구현하였습니다. 구체적인 기능은 아래의 표를 보시면 이해하실 수 있을겁니다.

*버튼 P1.1 P2.1 내용
Psw_cnt Sw_cnt Swt_cnt
0 0 0 Re_pw에 encoderder의 회전수를 저장
0 1 0 Psw[0]에 값을 저장, *을 눌러 다음상태로 넘어감
1 1 0 Psw[1]에 값을 저장, *을 눌러 다음상태로 넘어감
2 1 0 Psw[2]에 값을 저장, *을 눌러 다음상태로 넘어감
3 1 0 Psw[3]에 값을 저장, *을 눌러 다음상태로 넘어감
4 1 0 Re_pw와 psw[]에 저장된 값을 비교.
값이 같다면 다음상태(psw_cnt=5, sw_cnt=0, swt_cnt =0)로 넘어가고, 값이 다르다면 (psw_cnt=0, sw_cnt=1, swt_cnt =0)의 상태로 되돌아간다.

2)이때, swt_cnt(P2.1)는 눌러도 아무 기능이 작동되면 안되기에 항상 0으로 바꿔주었습니다.

3)또한, 추가미션4가 진행중일 때 p1.1을 한번 이상 눌러도 아무 작동도 되지않아야 하기 때문에 다음과 같은 코딩을 추가했습니다.

  1. 기본미션

(psw_cnt=5, sw_cnt=1, swt_cnt =0)의 상태가 되면 기본미션과 추가미션1이 작동할 수 있습니다.

*버튼 P1.1 P2.1 내용
Psw_cnt Sw_cnt Swt_cnt
5 0 0 기본문제와 추가미션1의 작동준비가 완료되었다.
5 1 0 첫번째 segment의 칸에 인코더로 값을 입력한다.
5 2 0 두번째 segment의 칸에 인코더로 값을 입력한다
5 3 0 세번째 segment의 칸에 인코더로 값을 입력한다
5 4 0 입력받은 세기만큼 시계방향으로 모터가 회전한다.
5 5 0 입력받은 세기만큼 반시계방향으로 모터가 회전한다.
5 6 0 더 이상 모터가 회전하지 못하게 한다.
(psw_cnt=5, sw_cnt=1, swt_cnt =0)의 상태로 되돌아가게 하며,
인코더로 입력된 segment(코딩에선 num[])의 값을 초기화시킨다.

이때 p1.1(sw_cnt)의 값을 다시 0부터 카운트하기 시작합니다. num[ ]을 이용해 엔코더로 입력한 값을 받으며, segment에 그 값을 나타냅니다.

  1. 추가미션1
*버튼 P1.1 P2.1 내용
Psw_cnt Sw_cnt Swt_cnt
5 0 0 기본문제의 작동을 시작한다
5 0 1 네번째 segment의 칸에 가변저항으로 값을 입력한다
5 0 2 시계방향으로 모터를 네번째 segment에 나타난 숫자만큼만 회전시킨다..
회전한 후 (psw_cnt=5, sw_cnt=0, swt_cnt =3)으로 넘어간다.
5 0 3 모터를 완전히 정지시킨다.
(psw_cnt=5, sw_cnt=0, swt_cnt =1)의 상태로 되돌아가게 한다.