마스터 슬레이브를 지정해서 통신하는데 처음엔 서보모터가 0도지정 때는 돌아가다가 안돌아갑니다. 코드 조언 부탁드립니다.
-마스터-
#include <SoftwareSerial.h>
int T = 2;
int R = 3;
int sensor1 = 7;
int sensor2 = 6;
int sensor3 = 5;
int val1 = 0;
int val2 = 0;
int val3 = 0;
SoftwareSerial my_blue(T, R);
void setup() {
my_blue.begin(9600);
Serial.begin(9600);
pinMode(sensor1, INPUT);
pinMode(sensor2, INPUT);
pinMode(sensor3, INPUT);
}
void loop() {
val1 = digitalRead(sensor1);
if(val1 == LOW){
my_blue.println('1');}
val2 = digitalRead(sensor2);
if(val2 == LOW) {
my_blue.println('2');}
val3 = digitalRead(sensor3);
if(val3 == HIGH){
my_blue.println('3');}
delay(5000);
-슬레이브-
#include <SoftwareSerial.h> //시리얼 통신 라이브러리 호출
SoftwareSerial my_blue(2, 3); //시리얼 통신을 위한
#include "Servo.h" //서보 라이브러리
Servo myservo; //서보객체
String myString=""; //받는 문자열
void setup() {
myservo.attach(12); //서보 시그널 핀설정
myservo.write(0); //서보 초기각도 0도 설정
Serial.begin(9600);
my_blue.begin(9600); //블루투스 시리얼 개방
}
void loop() {
if(my_blue.available()) //my_blue 값이 있으면
{
byte data = my_blue.read();
Serial.write(data);
if(data == '1')
{
myservo.write(0);
delay(3000);
myservo.write(0);
}
else if(data == '2')
{
myservo.write(45);
delay(3000);
myservo.write(0);
}
else if(data == '3')
{
myservo.write(90);
delay(3000);
myservo.write(0);
}
}
}
한번 올렸었는데 마스터 코드 부분을 고쳤습니다. 혹시 이렇게 하면 구조가 맞는건가요? 만약 아니라면 Serial.print()로 출력한 문자를 Serial.read()로 읽어 my_blue.write()로 보내는 코드를 어떻게 구상해야하는지 조언 부탁드립니다.
|