https://kocoafab.cc/make/view/520 를 보고 한 보드내에 연결되어 있는 조이스틱과 서보모터를 분리해,
한 보드(마스터보드)에는 조이스틱이 연결되어 있고,
또 다른 보드(슬레이브보드)에는 서보모터 두개가 연결되어 있어
블루투스 모듈을 이용해 마스터보드의 조이스틱의 움직임에 따라 슬레이브보드의 서보모터가 움직이게 만드려 합니다.
현재 두 보드의 블루투스 페어링 및 마스터보드에서 슬레이브 보드에 명령을 보내 수행하는것도 성공하였습니다.
다만 한가지 문제가 있는데 맨 위 링크의 예제에서는 조이스틱이 움직일때만 서보모터가 움직이는데,
제 경우에는 조이스틱이 한번 움직이면, 조이스틱을 움직이지 않아도 도중에 멈추지 않습니다.
제 생각에는 슬레이브 보드를 조금만 손대면 해결이 가능할 것 같습니다.
일주일째 코드를 이리바꾸고 저리바꾸고 하다가 도저히 제 힘으론 더이상 힘들것 같아 올려봅니다.
메이커 분들의 많은 도움 부탁 드리겠습니다.
<마스터보드>
#include <SoftwareSerial.h>
SoftwareSerial btSerial(2,3);
void setup() {
Serial.begin(9600); // 시리얼 통신을 시작하며, 통신속도는 9600
btSerial.begin(9600);
pinMode(4,INPUT);
}
void loop() {
int push = digitalRead(4); // 변수 push에 디지털 3번핀에 입력되는 신호를 대입
int X = analogRead(1); // 변수 X에 아날로그 1번핀에 입력되는 신호를 대입
int Y = analogRead(0); // 변수 Y에 아날로그 0번핀에 입력되는 신호를 대입
int a,b,c,d;
if(Y<440){
Serial.print('a');
btSerial.print('a');
}
if(Y>550){
Serial.print('b');
btSerial.print('b');
}
if(X<460){
Serial.print('c');
btSerial.print('c');
}
if(X>590){
Serial.print('d');
btSerial.print('d');
}
delay(300); // 0.3초 대기
}
<슬레이브 보드>
#include <SoftwareSerial.h>
#include <Servo.h>
SoftwareSerial btSerial(2, 3);
Servo Motor_H;
Servo Motor_V;
int H = 0;
int V = 0;
int posx = 90;
int posy = 90;
void setup() {
Serial.begin(9600);
btSerial.begin(9600);// set the data rate for the BT port
Motor_H.attach(5);
Motor_V.attach(6);
Motor_H.write(90);
Motor_V.write(90);
}
void loop() {
byte data;
data = btSerial.read();
if(data=='a'){
for (posx;posx<=180;posx++){
Motor_H.write(posx);
Serial.print(posx);
delay(10);
}
}
if(data=='b'){
for (posx;posx>=0;posx--){
Motor_H.write(posx);
Serial.print(posx);
delay(10);
}
}
if(data=='c'){
for(posy;posy<=180;posy++){
Motor_V.write(posy);
Serial.print(posy);
delay(10);
}
}
if(data=='d'){
for(posy;posy>=0;posy-=1){
Motor_V.write(posy);
Serial.print(posy);
delay(10);
}
}
}
|