OS/Arduino
Arduino Uno - L298N & HC-06
파란크리스마스
2017. 8. 7. 00:59
728x90
출처 : [아두이노] 블루투스 모듈(HC-06) 사용하기 (설정, 문자열 전송, LED ON/OFF)
Arduino Uno - L298N & HC-06
#include <SoftwareSerial.h> //시리얼 통신 라이브러리 호출 int blueTx=3; //Tx (보내는핀 설정) int blueRx=2; //Rx (받는핀 설정) SoftwareSerial btSerial(blueTx, blueRx); //시리얼 통신을 위한 객체선언 String myString=""; //받는 문자열 //모터드라이버핀과 아두이노의 연결번호 #define EA A0 #define EB A1 #define M_IN1 7 #define M_IN2 6 #define M_IN3 5 #define M_IN4 4 int motorA_vector = 1;//모터의 회전방향이 반대일시 0을 1로 1을 0으로 바꿔주시면 모터의 회전방향이 바뀝니다. int motorB_vector = 1;//모터의 회전방향이 반대일시 0을 1로 1을 0으로 바꿔주시면 모터의 회전방향이 바뀝니다. int motor_speed = 255;//모터 스피드 const int DELAY = 1000; void setup() { Serial.begin(9600); //시리얼모니터 btSerial.begin(9600); //블루투스 시리얼 개방 //모터관련 핀들을 출력으로 설정한다. pinMode(EA, OUTPUT); pinMode(EB, OUTPUT); pinMode(M_IN1, OUTPUT); pinMode(M_IN2, OUTPUT); pinMode(M_IN3, OUTPUT); pinMode(M_IN4, OUTPUT); // delay(3000);//3초 지연 motorstop(); } void loop() { // selfTest(); while(btSerial.available()) //mySerial에 전송된 값이 있으면 { char myChar = (char)btSerial.read(); //mySerial int 값을 char 형식으로 변환 myString+=myChar; //수신되는 문자를 myString에 모두 붙임 (1바이트씩 전송되는 것을 연결) delay(5); //수신 문자열 끊김 방지 } if(!myString.equals("")) //myString 값이 있다면 { Serial.println("input value: "+myString); //시리얼모니터에 myString값 출력 if (myString.equals("S")) { motorstop(); } else if (myString.equals("F")) { forward(); } else if (myString.equals("B")) { backward(); } else if (myString.equals("L")) { left(); } else if (myString.equals("R")) { right(); } myString=""; //myString 변수값 초기화 } } void selfTest() { motor_con(motor_speed, motor_speed); //전진 //motor_con(-motor_speed, motor_speed); //좌회전 //motor_con(motor_speed, -motor_speed); //우회전 //motor_con(-motor_speed, -motor_speed); //후전 delay(DELAY); motor_con(0, 0); //정지 delay(DELAY); } void selfTest2() { forward(); delay(DELAY); motorstop(); delay(500); backward(); delay(DELAY); motorstop(); delay(500); right(); delay(DELAY); motorstop(); delay(500); left(); delay(DELAY); motorstop(); delay(500); } void motorstop() { motor_con(0, 0); //정지 } void backward() { motor_con(-motor_speed, -motor_speed); //후전 } void forward() { motor_con(motor_speed, motor_speed); //전진 } // Let right motor keep running, but stop left motor void right() { motor_con(motor_speed, -motor_speed); //우회전 } // Let left motor keep running, but stop right motor void left() { motor_con(-motor_speed, motor_speed); //좌회전 } void motor_con(int M1, int M2){ if(M1>0){ //모터A 정회전 digitalWrite(M_IN1,motorA_vector); digitalWrite(M_IN2,!motorA_vector); } else if(M1<0){ //모터A 역회전 digitalWrite(M_IN1,!motorA_vector); digitalWrite(M_IN2,motorA_vector); } else{ //모터 A 정지 digitalWrite(M_IN1,LOW); digitalWrite(M_IN2,LOW); } if(M2>0){ //모터B 정회전 digitalWrite(M_IN3,motorB_vector); digitalWrite(M_IN4,!motorB_vector); } else if(M2<0){ //모터B 역회전 digitalWrite(M_IN3,!motorB_vector); digitalWrite(M_IN4,motorB_vector); } else{ //모터 B 정지 digitalWrite(M_IN3,LOW); digitalWrite(M_IN4,LOW); } analogWrite(EA,abs(M1)); //A모터 속도값 analogWrite(EB,abs(M2)); //B모터 속도값 }