지금으로서는 Brokking 의 코드를 다운받아 그대로 이용할 계획이므로 Brokking 이 사용했던 블루투스 부분에 해당하는 코드에 한정하여 HC-06 버전으로 바꾸는 과정을 첨부된 테스트 코드를 사용하여 확인하는 과정을 설명하도록 하자.
아두이노 우노 보드의 0번(RX) 1번(TX)핀 과 HC-06 블루투스 보드의 RXD 핀과 TXD 핀을 그림의 배선도(RXD⤍TX, TXD⤍RX)처럼 연결하기로 한다. 아직은 미 연결 상태를 유지하고 컴파일 업로딩하여 테스트를 진행한다.
아직 Brokking 의 밸런싱 로봇 코드를 수정해서 입력하기 전에 아두이노 블루투스 수신 테스트 코드를 만들어 시험해 보도록 하자. 아두이노우노 블루투스 수신 테스트 코드는 Brokking 의 코드에서 다 빼버리고 블루투스를 통해 입력버퍼에서 수신한 내용을 시리얼 모니터에 출력하는 부분만 남기도록 한다.
헤더 영역을 살펴보자. 입력 버퍼 변수 received_byte를 8비트 byte 데이타로 정의하자. micros() 명령은 아두이노보드에서 코드가 실행되는 순간부터 마이크로 단위로 시간을 계수해서 알려준다. 현재 시간 micros(0 보다 4000 만큼 큰 값의 loop_timer 는 loop()에서 4000 마이크로 세컨드가 경과되면 다시 4000을 추가해서 갱신되는 구조다. 4000 마이크로 세컨드는 Brokking 의 코드에서 4 msec 마다 한번씩 밸런싱 로봇의 제어를 위해 루틴이 실행되는 단위임을 참고하자.
loop()에서 Aerial.begin(57600)은 //코멘트 처리하기로 한다. HC-06 블루투스 보드의 default 통신속도가 9600이며 이미 setup()에서 9600으로 설정되어 있기 때문이다. HC-06의 통신속도를 57600으로 재설정했다면 이 명령을 그대로 살려두면 된다.
실제로 Brokking의 코드를 수정해서 실행하기 전에 첨부된 테스트 코드를 사용하여 시리얼 모니터의 문자 입력 박스에서 “L”과 “R”을 입력하여 Serial.read() 명령이 실행되면 이 입력 버퍼 값을 읽어서 received_byte에 저장 후 이 값을 시리얼 모니터에서 BIN 즉 Binary 8비트 형식으로 출력해 보도록 한다.
received_byte의 8비트 데이타가 1001100 이라면 이는 스마트폰 앱인벤터에서 Right 버튼을 누른 결과에 해당한다.. 그런데 반대로 “Turn Left” 문자 출력을 한 이유는 Brokking 의 코드에서 겉보기에는 Turn Right 같은데 실제 해보니까 좌회전을 하였다. 그래서 바꿔 놓은 것이다. Brokking은 HC-06 이 아닌 다른 블루투스 보드를 사용하기 때문에 HC-06과는 조금 다른 점이 있는 듯하다. 전진과 후진은 별 이상이 없다.
이런 방식으로 전진 후진 좌회전 우회전 시 입력 버퍼 변수 즉 received_byte의 값을 확인해 보고 최종적으로 Brokking 의 코드 수정 단계에 들어가도록 한다.
//Bluetooth_FBRL
byte received_byte = 0; //입력버퍼
int receive_counter;
unsigned long loop_timer;
void setup() {
Serial.begin(9600);
loop_timer = micros() + 4000;
}
void loop() {
// Serial.begin(57600);
if(Serial.available() > 0){
received_byte = Serial.read();
receive_counter = 0;
}
if(receive_counter <= 25)
receive_counter ++;
else
received_byte = 0x00;
Serial.println(received_byte, BIN);
if(received_byte == B1010010)
Serial.println("Trun Left");
if(received_byte == B1001100)
Serial.println("Trun Right");
if(received_byte == B1000110)
Serial.println("Move Forward");
if(received_byte == B1000010)
Serial.println("Move Backword");
if(received_byte == B1010011)
Serial.println("STOP");
while(loop_timer > micros());
loop_timer += 4000;
}//끝
'아두이노프로세싱 프로그래밍' 카테고리의 다른 글
초음파 센서 RC카 충돌 테스트 (0) | 2018.09.14 |
---|---|
캡스톤 디자인 Junior Balancing Robit 택배 (0) | 2018.09.08 |
아두이노 코딩-137: 밸런싱 로봇 PCB 디자인 콘테스트 (0) | 2018.09.07 |
밸런싱 로봇 DRV8825 모터 드라이버 보드 전류 설정 (0) | 2018.09.07 |
4200mA 리튬배터리를 추가로 짊어진 아두이노 밸런싱 로빗의 택배 능력 시험 (0) | 2018.09.07 |