정보나눔

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

밑에 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