OS/Arduino

rc_car (Keyes L298P - 모터드라이버 쉴드)

파란크리스마스 2017. 10. 4. 03:49
728x90

출처 : 모터드라이버 쉴드 L298P를 이용하는 방법[아두이노 강좌] : 네이버 블로그

#include <SoftwareSerial.h> //시리얼 통신 라이브러리 호출

// Bluetooth 관련  
int blueRx=2;   //Rx (받는핀 설정)
int blueTx=3;   //Tx (보내는핀 설정)
SoftwareSerial btSerial(blueTx, blueRx);  //시리얼 통신을 위한 객체선언
String myString=""; //받는 문자열

int E1 = 10;      // 1번(A) 모터 Enable
int E2 = 11;      // 2번(B) 모터 Enable
int M1 = 12;      // 1번(A) 모터 PWM  
int M2 = 13;      // 2번(B) 모터 PWM

#define MOTER_SPEED 255
int value;
 
void setup() {
  pinMode(M1, OUTPUT);      // 출력핀 설정
  pinMode(M2, OUTPUT);
  Serial.begin(9600);
  btSerial.begin(9600); //블루투스 시리얼 개방
}
 
void loop() 
{
  // put your main code here, to run repeatedly:
  myString="";
  while(btSerial.available())  //mySerial에 전송된 값이 있으면
  {
    char myChar = (char)btSerial.read();  //mySerial int 값을 char 형식으로 변환
    myString+=myChar;   //수신되는 문자를 myString에 모두 붙임 (1바이트씩 전송되는 것을 연결)
    delay(5);           //수신 문자열 끊김 방지
  }

  if (myString.length() > 0) {
    Serial.println(myString);
    if (myString == "F") {
      motor_forward();
    } else if (myString == "S") {
      motor_stop();
    } else if (myString == "R") {
      motor_right();
    } else if (myString == "L") {
      motor_left();
    } else if (myString == "B") {
      motor_backwards();
    }
  }
}

void motor_stop() {
  digitalWrite(M1, HIGH);
  digitalWrite(M2, HIGH);
  analogWrite(E1, 0);
  analogWrite(E2, 0);
}

void motor_backwards() {
  motor_backwards(MOTER_SPEED);
}

void motor_backwards(int speed) {
  digitalWrite(M1, HIGH);
  digitalWrite(M2, HIGH);
  analogWrite(E1, speed);
  analogWrite(E2, speed);
}

void motor_forward() {
  motor_forward(MOTER_SPEED);
}

void motor_forward(int speed) {
  digitalWrite(M1, LOW);
  digitalWrite(M2, LOW);
  analogWrite(E1, speed);
  analogWrite(E2, speed);
}

void motor_right() {
  motor_right(MOTER_SPEED);
}

void motor_right(int speed) {
  digitalWrite(M1, HIGH);
  digitalWrite(M2, LOW);
  analogWrite(E1, speed);
  analogWrite(E2, speed);
}

void motor_left() {
  motor_left(MOTER_SPEED);
}

void motor_left(int speed) {
  digitalWrite(M1, LOW);
  digitalWrite(M2, HIGH);
  analogWrite(E1, speed);
  analogWrite(E2, speed);
}