상세 컨텐츠

본문 제목

드론도전기 #8_20.02.06

드론도전기/software

by 퍼블리셔환 2020. 2. 20. 16:28

본문

/**  <드론도전기> 에 있는 글은 드론 직접 제작에 도전하고, 시행착오를 겪은 글들의 모음입니다.

만약 드론을 직접 만들고 성공한 글을 확인하고 싶으시면 <how to, 아두이노드론> 카테고리를 방문해 주세요:)  **/

 

아두이노 MEGA 블루투스 모듈 해결!

공부를 하다가 알아보니 당연하게도 아무 PIN이나 사용하면 안 된다. TX는 아무거나 사용해도 되는데 RX10, 11, 12, 13, 14, 15, 50, 51, 52, 53, A8 (62), A9 (63), A10 (64), A11 (65), A12 (66), A13 (67), A14 (68), A15 (69)를 사용해야 한다. 그래서 아래와 같이 입력했다.

#include <SoftwareSerial.h>

 

#define BT_RXD 15

#define BT_TXD 14

SoftwareSerial BTSerial(BT_RXD, BT_TXD);

이유는 진짜 모르겠지만 실패. 시리얼 화면에서 입력하는 것이 핸드폰으로 입력은 되는데 역으로 핸드폰으로 입력하는 것은 시리얼 모니터에 입력이 안됨.

 

 

진짜 해결

그래서 더 공부를 하다보니 우리가 사용하는 MEGA는 생각보다 엄청 많은 기능이 있다는 것을 알게 되었다.

 

아두이노 UNO와 같은 경우 UART(Universal Asynchronous Receiver/Transmitter) 1개가 있고 MEGA 3개가 있다.

UART- 범용 비동기화 송수신기 라는 뜻이다. 동시에 여러 기기와 통신하는 것이 아닌 1대1로 통신을 하는 송수신기를 말하는 것이다.

MEGAUART3개가 있으므로 1개가 있는 UNO와는 다른 방식으로 코딩을 해줘야 했다.

UNO와 같은 경우 SoftwareSerial.h라는 헤더 파일을 include 해주고 나서 코딩을 해주는 방식이다.

MEGA와 같은 경우 UART3개나 있기 때문에 굳이 SoftwareSerial.h를 쓸 필요가 없다. 즉 굳이 헤더파일을 이용해서 BTSerial이라는 함수를 만들 필요없이 그냥 있는 대로 사용하면 된다.

MEGACommunication PIN 14-19를 보면 TX1,RX1,TX2,RX2,TX3 그리고 RX3가 있다. 여기서 HC-06RXDTXD를 TX1,RX1에 꽂으면 Serial1으로 2,3이면 Serial2,3으로 선언해주면 친절한 아두이노가 알아서 인식한다.

이걸 몰라서 엄청 고생함 ㅠㅜ

 

아래 코드는 TX2/RX2에 연결하고 Serial2 함수를 이용해서 모터를 돌려보았다.

 

#include <AFMotor.h>          // 서보모터 라이브러리

AF_DCMotor motor_1(1);     // 모터 1 객체         
AF_DCMotor motor_2(2);     // 모터 2 객체 
AF_DCMotor motor_3(3);     // 모터 3 객체
AF_DCMotor motor_4(4); 


int num;

void setup() {
  Serial.begin(9600);
  Serial2.begin(9600);
  Serial.println("ATcommand");  //ATcommand Start크게 의미 없이 print함.

  motor_1.setSpeed(700);    // 모터 1 속도 설정          
  motor_1.run(RELEASE);     // 모터 1 돌리지 않는 상태
  motor_2.setSpeed(700);    // 모터 2 속도 설정          
  motor_2.run(RELEASE);     // 모터 2 돌리지 않는 상태
  motor_3.setSpeed(700);    // 모터 3 속도 설정           xc
  motor_3.run(RELEASE);     // 모터 3 돌리지 않는 상태
  motor_4.setSpeed(700);    // 모터 4 속도 설정          
  motor_4.run(RELEASE);     // 모터 4 돌리지 않는 상태
}

void loop() {
  if (Serial2.available()>0){
   num=Serial2.parseInt();// parseInt를 사용하는 이유는 Serial2.read를 하면 아즈키 코드로 읽음
   //그러면 아래 판단기준을 아즈키 코드에 맞춰서 해야함. 그냥 편의를 위해 parseInt를 사용
   //parseInt하면 1을 그대로 1로 인식
   
   
   
   if(num==1)
   {
    Serial.print("a");
    motor_1.run(FORWARD);
    motor_2.run(FORWARD);
    motor_3.run(FORWARD);
    motor_4.run(FORWARD);
   
    
   }
   if(num==2)
   {
    Serial.print("b");
    motor_1.run(RELEASE);
    motor_2.run(RELEASE);
    motor_3.run(RELEASE);
    motor_4.run(RELEASE);
    
  }
}
}​

 결과

위에 보면 1이라고 핸드폰으로 입력하면 a가 시리얼 모니터에 나타나고 작동이 됨

2라고 입력하면 b라고 뜨고 작동 정지.--> 성공….

 

 

https://youtu.be/yCZnv-uhHqM

V/R

 

'드론도전기 > software' 카테고리의 다른 글

드론도전기 #10_20.02.15  (1) 2020.02.28
드론도전기 #9_20.02.11  (0) 2020.02.28
드론도전기 #7_20.02.04  (0) 2020.02.20
드론도전기 #4_20.01.30  (0) 2020.02.20

관련글 더보기

댓글 영역