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;
}
}
}
|