속도조절도 가능한 블루투스RC카
Makerist
예제&실습
0
723
2024.03.12 01:02
#include <SoftwareSerial.h> // 모터 핀 정의 #define IN1 7 #define IN2 6 #define IN3 5 #define IN4 4 #define ENA 10 #define ENB 11 // 블루투스 핀 정의 #define BT_TXD 2 #define BT_RXD 3 // 블루투스 시리얼 객체 생성 SoftwareSerial BTSerial(BT_TXD, BT_RXD); // 모터 속도 상수값 정의 enum MotorSpeed { MOTOR_SPEED_OFF = 0, MOTOR_SPEED_1, MOTOR_SPEED_2, MOTOR_SPEED_3, MAX_MOTOR_SPEED }; // 모터 속도 배열 const unsigned char motorSpeed[MAX_MOTOR_SPEED] = {0, 180, 200, 250}; // 초기 모터 속도 설정 (기본값: 모터 속도 3) unsigned char motorSpeedMode = MOTOR_SPEED_3; // 모터 속도 설정 함수 void setMotorSpeed(unsigned char mode, unsigned char speed) { if (mode == CH1) { analogWrite(ENA, speed); } else if (mode == CH2) { analogWrite(ENB, speed); } else { analogWrite(ENA, speed); analogWrite(ENB, speed); } } // 앞으로 이동 void forward() { digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW); digitalWrite(IN3, HIGH); digitalWrite(IN4, LOW); } // 뒤로 이동 void backward() { digitalWrite(IN1, LOW); digitalWrite(IN2, HIGH); digitalWrite(IN3, LOW); digitalWrite(IN4, HIGH); } // 왼쪽으로 회전 void turnLeft() { digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW); digitalWrite(IN3, LOW); digitalWrite(IN4, HIGH); } // 오른쪽으로 회전 void turnRight() { digitalWrite(IN1, LOW); digitalWrite(IN2, HIGH); digitalWrite(IN3, HIGH); digitalWrite(IN4, LOW); } // 모터 정지 void stopMotor() { digitalWrite(IN1, HIGH); digitalWrite(IN2, HIGH); digitalWrite(IN3, HIGH); digitalWrite(IN4, HIGH); } void setup() { // 모터 핀 설정 pinMode(IN1, OUTPUT); pinMode(IN2, OUTPUT); pinMode(IN3, OUTPUT); pinMode(IN4, OUTPUT); pinMode(ENA, OUTPUT); pinMode(ENB, OUTPUT); // 블루투스 시리얼 설정 및 시작 BTSerial.begin(9600); } void loop() { // 블루투스로부터 데이터 수신 확인 if (BTSerial.available()) { // 블루투스로부터 데이터 읽기 char rx = BTSerial.read(); switch (rx) { case 'F': // 전진 forward(); break; case 'L': // 좌회전 turnLeft(); break; case 'R': // 우회전 turnRight(); break; case 'B': // 후진 backward(); break; case 'S': // 시작 setMotorSpeed(ALL_CH, motorSpeed[motorSpeedMode]); break; case 'E': // 종료 stopMotor(); break; case '0': // 모터 속도 0 (정지) motorSpeedMode = MOTOR_SPEED_OFF; setMotorSpeed(ALL_CH, motorSpeed[motorSpeedMode]); break; case '1': // 모터 속도 1 motorSpeedMode = MOTOR_SPEED_1; setMotorSpeed(ALL_CH, motorSpeed[motorSpeedMode]); break; case '2': // 모터 속도 2 motorSpeedMode = MOTOR_SPEED_2; setMotorSpeed(ALL_CH, motorSpeed[motorSpeedMode]); break; case '3': // 모터 속도 3 motorSpeedMode = MOTOR_SPEED_3; setMotorSpeed(ALL_CH, motorSpeed[motorSpeedMode]); break; } } }