정보나눔

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

아두이노 메가 관련 질문드립니다.
공학도원해요 | 2022-05-26

아두이노 메가를 통해서 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);                               // 좌측 모터 속도값
}

연결은 됐는데 작동이 안됩니다. 부탁드립니다ㅜㅜ

이전글   |    아두이노 관련 프로젝트 질문드립니다.. 2022-05-17
다음글   |    반갑습니다 2022-05-30