아두이노 메가를 통해서 RC카 제작을 하고 있습니다.
#include <SoftwareSerial.h> //가상 시리얼 통신을 위한 라이브러리 선언
#define BT_RXD 15 // 아두이노의 4번핀을 RX(받는 핀)로 설정
#define BT_TXD 14 // 아두이노 3번핀을 TX(보내는 핀)로 설정
SoftwareSerial bluetooth(BT_RXD,BT_TXD); //블루투스 통신을 위한 설정
int RightMotor_E_pin = 30; // 오른쪽 모터의 Enable & PWM
int LeftMotor_E_pin = 31; // 왼쪽 모터의 Enable & PWM
int RightMotor_1_pin = 34; // 오른쪽 모터 제어선 IN1
int RightMotor_2_pin = 35; // 오른쪽 모터 제어선 IN2
int LeftMotor_3_pin = 36; // 왼쪽 모터 제어선 IN3
int LeftMotor_4_pin = 37; // 왼쪽 모터 제어선 IN4
//좌우 모터 속도 조절, 설정 가능 최대 속도 : 255
int L_MotorSpeed = 185; // 왼쪽 모터 속도
int R_MotorSpeed = 160; // 오른쪽 모터 속도
int R_Motor = 0;
int L_Motor = 0;
int mode = 0;
void setup() {
pinMode(RightMotor_E_pin, OUTPUT); // 출력모드로 설정
pinMode(RightMotor_1_pin, OUTPUT);
pinMode(RightMotor_2_pin, OUTPUT);
pinMode(LeftMotor_3_pin, OUTPUT);
pinMode(LeftMotor_4_pin, OUTPUT);
pinMode(LeftMotor_E_pin, OUTPUT);
Serial.begin(9600); //PC와 아두이노간 시리얼 통신 속도를 9600bps로 설정
bluetooth.begin(9600); //블루투스와 아두이노간 시리얼 통신 속도를 9600bps로 설정
Serial.println("Welcome Eduino!");
}
void loop() {
if(bluetooth.available()){
char Blue_Val = bluetooth.read();
Serial.print("Input Signal : ");
Serial.print("Bluetooth[ "); Serial.print(Blue_Val); Serial.print(" ], ");
control_SmartCar(Blue_Val);
if(mode == 0){
motor_role(R_Motor, L_Motor);
}
else if(mode == 1){
Right_role(R_Motor, L_Motor);
}
else if(mode == 2){
Left_role(R_Motor, L_Motor);
}
else if(mode == 4){
left_rotation(R_Motor, L_Motor);
}
else if(mode == 5){
right_rotation(R_Motor, L_Motor);
}
else{
analogWrite(RightMotor_E_pin, 0);
analogWrite(LeftMotor_E_pin, 0);
}
}
}
void control_SmartCar(char Blue_val){
if( Blue_val == 'g' ){ // "g" 버튼, 명령 : 전진
R_Motor = HIGH; L_Motor = HIGH; mode = 0;
//Serial.print("Forward : ");
}
else if( Blue_val == 'r' ){ // "r" 버튼, 명령 : 우회전
mode = 1;
//Serial.print("Turn Right : ");
}
else if( Blue_val == 'l' ){ // "l" 버튼, 명령 : 좌회전
mode = 2;
//Serial.print("Turn Left : ");
}
else if( Blue_val == 'b' ){ // "b" 버튼, 명령 : 후진
R_Motor = LOW; L_Motor = LOW; mode = 0;
//Serial.print("Backward : ");
}
else if( Blue_val == 's' ){ // "s" 버튼, 명령 : 정지
R_Motor = HIGH; L_Motor = HIGH; mode = 3;
//Serial.print("Stop : ");
}
else if( Blue_val == 'q' ){ // "q" 버튼, 명령 : 제자리 좌회전
mode = 4;
//Serial.print("Left Rotation : ");
}
else if( Blue_val == 'w' ){ // "w" 버튼, 명령 : 제자리 우회전
mode = 5;
//Serial.print("Right Rotation : ");
}
else{
//Serial.print("Not Defined : "); // 지정하지 않은 주소입력.
}
/*
Serial.print("R_Motor[ ");Serial.print(R_Motor);Serial.print(" ], ");
Serial.print("L_Motor[ ");Serial.print(L_Motor);Serial.print(" ], ");
Serial.print("MotorSpeed(L, R)[ ");Serial.print(L_MotorSpeed, R_MotorSpeed);Serial.print(" ], ");
Serial.print("Mode[ ");Serial.print(mode);Serial.println(" ]");
*/
}
void motor_role(int R_motor, int L_motor){
digitalWrite(RightMotor_1_pin, R_motor);
digitalWrite(RightMotor_2_pin, !R_motor);
digitalWrite(LeftMotor_3_pin, L_motor);
digitalWrite(LeftMotor_4_pin, !L_motor);
analogWrite(RightMotor_E_pin, R_MotorSpeed); // 우측 모터 속도값
analogWrite(LeftMotor_E_pin, L_MotorSpeed); // 좌측 모터 속도값
}
void Right_role(int R_motor, int L_motor){
digitalWrite(RightMotor_1_pin, R_motor);
digitalWrite(RightMotor_2_pin, !R_motor);
digitalWrite(LeftMotor_3_pin, L_motor);
digitalWrite(LeftMotor_4_pin, !L_motor);
analogWrite(RightMotor_E_pin, max(R_MotorSpeed*0.4,90)); // 우측 모터 속도값
analogWrite(LeftMotor_E_pin, 255); // 좌측 모터 속도값
}
void Left_role(int R_motor, int L_motor){
digitalWrite(RightMotor_1_pin, R_motor);
digitalWrite(RightMotor_2_pin, !R_motor);
digitalWrite(LeftMotor_3_pin, L_motor);
digitalWrite(LeftMotor_4_pin, !L_motor);
analogWrite(RightMotor_E_pin, 255); // 우측 모터 속도값
analogWrite(LeftMotor_E_pin, max(L_MotorSpeed*0.4,90)); // 좌측 모터 속도값
}
void left_rotation(int R_motor, int L_motor){
digitalWrite(RightMotor_1_pin, HIGH);
digitalWrite(RightMotor_2_pin, LOW);
digitalWrite(LeftMotor_3_pin, LOW);
digitalWrite(LeftMotor_4_pin, HIGH);
analogWrite(RightMotor_E_pin, R_MotorSpeed); // 우측 모터 속도값
analogWrite(LeftMotor_E_pin, L_MotorSpeed); // 좌측 모터 속도값
}
void right_rotation(int R_motor, int L_motor){
digitalWrite(RightMotor_1_pin, LOW);
digitalWrite(RightMotor_2_pin, HIGH);
digitalWrite(LeftMotor_3_pin, HIGH);
digitalWrite(LeftMotor_4_pin, LOW);
analogWrite(RightMotor_E_pin, R_MotorSpeed); // 우측 모터 속도값
analogWrite(LeftMotor_E_pin, L_MotorSpeed); // 좌측 모터 속도값
}
연결은 됐는데 작동이 안됩니다. 부탁드립니다ㅜㅜ
|