코코아팹은 누구나 창의적 아이디어를 현실로 만들어 낼 수 있도록
만들고, 공유하고, 배울 수 있는 터전이
되고자 합니다.
아이디와 비밀번호를 잊으셨나요?아이디 / 비밀번호 찾기
코코아팹 회원이 아니신가요? 회원가입
밑에 DC랑 서보모터 블루투스로 조정하려고 글올렸었는데요
신재철 | 2015-11-18
|
|
---|---|
#include <SoftwareSerial.h> #include <Servo.h>
SoftwareSerial BTSerial(6, 5); // SoftwareSerial(RX, TX) byte buffer[1024]; int bufferPosition;
Servo servo;
int motorAngle = 0; int servoVal = 0; int servoAngle = 90; #define motor_enabler 9
#define motor_1 2
#define motor_2 4
#define bluetoothTx 5 //블루투스의 RX와 연결
#define bluetoothRx 6 //블루투스의 TX와 연결
SoftwareSerial bluetooth(bluetoothRx,bluetoothTx);
int current_speed;
int mode;
const int runPulse = 50;
int speedDelay = 100;
void motor_controll(char cmd);
void motor_run();
void setup () { servo.attach(9);
BTSerial.begin(9600); Serial.begin(9600); bufferPosition = 0;
analogWrite(motor_enabler,0);
pinMode(motor_1,OUTPUT);
pinMode(motor_2,OUTPUT);
Serial.begin(9600);
delay(100);
bluetooth.begin(9600);
Serial.println("start");
current_speed = 0;
mode = 1; // 1 = 전진 2 = 후진
}
void loop () { if (BTSerial.available()) { byte data = BTSerial.read(); buffer[bufferPosition++] = data;
Serial.println(data);
switch(data){
case '0': angleWrite(0); break;
case '1': angleWrite(45); break;
case '2': angleWrite(90); break;
case '3': angleWrite(180); break;
case '\n': bufferPosition = 0; break;
} if(mode ==1)
{
digitalWrite(motor_1,HIGH);
digitalWrite(motor_2,LOW);
}
else if(mode == 2)
{
digitalWrite(motor_1,LOW);
digitalWrite(motor_2,HIGH);
}
analogWrite(motor_enabler,current_speed);
char cmd;
if(Serial.available())
{
cmd = (char)Serial.read();
Serial.print("command=");
motor_controll(cmd);
}
if(bluetooth.available())
{
cmd = (char)bluetooth.read();
bluetooth.print("command=");
bluetooth.println(cmd);
motor_controll(cmd);
}
motor_run();
}
/*
cmd w는 가속 및 전진 s는감속 및 후진
*/
void motor_controll(char cmd)
{
if(cmd == 'w')
{
if(mode == 1)
speedDelay-=10;
else
speedDelay+=10;
if(speedDelay < 0)
{
speedDelay = 0;
}
if(speedDelay > 100)
{
speedDelay = 100;
mode = 1;
}
}
else if(cmd == 's')
{
if(mode == 2)
speedDelay-=10;
else
speedDelay+=10;
if(speedDelay < 0)
{
speedDelay = 0;
}
if(speedDelay > 100)
{
speedDelay = 100;
mode = 2;
}
}
else if(cmd == 'x')
{
//멈춤
mode = 1;
analogWrite(motor_enabler,50);
analogWrite(motor_enabler,0);
speedDelay = 100;
}
Serial.print("command=");
Serial.println(cmd);
Serial.println("");
Serial.print("currnetSpeed = ");
Serial.println(100 - speedDelay,DEC);
bluetooth.print("command=");
bluetooth.println(cmd);
bluetooth.println("");
bluetooth.print("currnetSpeed = ");
bluetooth.println(100 - speedDelay,DEC);
}
//pwm을 이용한 모터 속도 제어
void motor_run()
{
if(mode == 1)
{
digitalWrite(motor_1,HIGH);
digitalWrite(motor_2,LOW);
}
else if(mode == 2)
{
digitalWrite(motor_1,LOW);
digitalWrite(motor_2,HIGH);
}
if(speedDelay != 100)
{
analogWrite(motor_enabler,1023);
delay(runPulse);
analogWrite(motor_enabler,0);
delay(speedDelay);
}
else
{
analogWrite(motor_enabler,0);
} } }
void angleWrite(int angle){ servo.write(angle); }
제가 원래 이쪽공부를 전문적으로 하지않아서 대충 짜집기해서 만든건데 void loop쪽에서 오류가 나는데 무슨오륜지좀 알수있을까요? |
|
이전글 | BLE 오렌지 보드 문의입니다. | 2015-11-17 |
다음글 | 서보모터 제어 질문이요!!! | 2015-11-18 |