정보나눔

오픈소스하드웨어 프로젝트에 대한 다양한 정보를 나누는 공간입니다.

블루투스로 아두이노간 데이터 전송에 대해서 궁금한점이 있습니다.
고덕윤 | 2015-11-26

hc06 블루투스로 아두이노 간 데이터 전송을 시도해볼려고 합니다.

마스터 모듈이 달린 아두이노에 포텐셔미터와 스위치 2개를 달고 슬레이브 모듈가 달린 아두이노에는 led 및 서보모터를 달 생각입니다.

현재 다음과 같이 코드를 작성했는데 포텐셔미터의 데이터 값을 전송해 서보모터를 제어하는것이 마음대로 되지가 않내요..

한번 봐주실수 있으신가요?

<송신부>

#include <SoftwareSerial.h>

SoftwareSerial BTSerial(2,3); 

int shift1 = 8;
int shift2 = 9;
int change = 10;

void setup() {
  BTSerial.begin(9600);
  Serial.begin(9600);
  pinMode(shift1, INPUT_PULLUP);
  pinMode(shift2, INPUT_PULLUP); 
}

void loop() {
  
  int m = 255; 

  BTSerial.print('C'); // 포텐셔미터로 서보모터 제어를 위한 부분
  BTSerial.println(analogRead(A0));
    delay(100);
  
  if(digitalRead(shift1) == LOW)
  {
    BTSerial.print('1');  
    BTSerial.write(m);
    delay(100);  // 스위치를 디바운스 하기 위해 지연 필요.
  }

  else if(digitalRead(shift2) == LOW)
  {
    BTSerial.print('2'); 
    BTSerial.write(m);
    delay(100);  // 스위치를 디바운스 하기 위해 지연 필요.
  }
  
    else
  {
    BTSerial.print('S');  // stop
    BTSerial.write(m);
    delay(100);  // 스위치를 디바운스 하기 위해 지연 필요.
  }
}

 

<수신부>

#include <SoftwareSerial.h>
#include <Servo.h>

#define led1 13
#define led2 12
#define led3 11

SoftwareSerial BTSerial(2,3); 
Servo myservo;

int changeDirection = 0; 

void setup() {
  BTSerial.begin(9600);

  pinMode(led1, OUTPUT);
   pinMode(led2, OUTPUT);
    pinMode(led3, OUTPUT);
  myservo.attach(10);
}

void loop() {
   
  if(BTSerial.available())  
  {
    char ch = BTSerial.read();

  switch(ch)
  {
    case '1':
    {
      digitalWrite(13, HIGH);
      delay(1000);
      digitalWrite(13,LOW);
    }
    break;

    case '2':
    {
      digitalWrite(12, HIGH);
      delay(1000);
      digitalWrite(12,LOW);
    }
    break;

    case 'S':
    {
      digitalWrite(11, HIGH);
    }
    break;
    
    case 'C':
    {
      unsigned char angle = BTSerial.read();
      int changeDirection = angle;
      int a=constrain(changeDirection, 0, 50);
      myservo.write(a);
      delay(50);
    }
    break;
  }
  }
}

 

프로필사진

Klant 2015-11-27 16:09:06

안녕하세요! 

서보 모터 제어 시 어떤 식으로 제어 되는지 여쭤봐도 될까요?

현재 송신부 소스를 보았을 때 마스터 모듈에서 C라는 캐릭터값과 포텐셔미터의 값을 보내주고 delay가 걸리는데요. 

delay 값이 100정도라면 통신에서는 조금 큰 값이 아닌가 생각이 듭니다.

수신부 쪽에서도 case문보다는 if 조건문을 활용해 소스를 짜시는 걸 추천합니다.

프로필사진

고덕윤 2015-11-27 19:19:42

포텐셔미터의 값을 0~1024로 조절해서 서보모터의 각도를 0~90도로 제어할수 있도록 설계할려고 합니다.

switch문을 작성한 이유는 나중에 마스터모듈이 있는 아두이노에 스위치 2개를 달아 슬레이브 모듈이 있는 아두이노에

부착될 모터를 제어하기 위함입니다.

delay부분은 일단은 그냥 임의로 설정해놓은 상태입니다.

어떤식으로 접근해야될까요?

이전글   |    질문드려요!! 온도센서 블루투스 2015-11-26
다음글   |    날씨 정보를 알려주는 무드 램프 만들기[완성]에서 코드 질문드립니다... 2015-11-26