속도조절도 가능한 블루투스RC카

속도조절도 가능한 블루투스RC카

Makerist 0 720

9d30373fb4c2055e8ef027a34c36ccea_1710173214_3942.png
속도조절도 가능한 rc카 컨트롤

#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;
    }
  }
}

0 Comments
Category
반응형 구글광고 등
State
  • 현재 접속자 144 명
  • 오늘 방문자 558 명
  • 어제 방문자 3,368 명
  • 최대 방문자 4,586 명
  • 전체 방문자 675,818 명
  • 전체 게시물 26,013 개
  • 전체 댓글수 36 개
  • 전체 회원수 22 명
Facebook Twitter GooglePlus KakaoStory KakaoTalk NaverBand