본문 바로가기 본문 바로가기 주 메뉴 바로가기

알림마당

청소년을 존중하고 청소년과 함께 고민하며 최선을 다하겠습니다.

자료실

드림박스"스피드"키트 RC카 입력 소스
  • 작성자 꿈드림
  • 게시일 2020-10-19
  • 시설 꿈드림

 

#define MOTOR_A_a 3 //모터A+출력핀은 3번핀입니다

#define MOTOR_A_b 11 //모터A-출력핀은 11번핀입니다

#define MOTOR_B_a 5 //모터B+출력핀은 5번핀입니다

#define MOTOR_B_b 6 //모터B-출력핀은 6번핀입니다

#define MOTOR_SPEED 150 //모터의 기준속력입니다(0~255)

 

unsigned char m_a_spd = 0, m_b_spd = 0; //모터의 속력을 저장하는 전역변수

boolean m_a_dir = 0, m_b_dir = 0; //모터의 방향을 결정하는 전역변수

 

void setup()

{

//모터 제어 핀들을 출력으로 설정합니다.

pinMode(MOTOR_A_a, OUTPUT);

pinMode(MOTOR_A_b, OUTPUT);

pinMode(MOTOR_B_a, OUTPUT);

pinMode(MOTOR_B_b, OUTPUT);

 

Serial.begin(9600); //시리얼 통신 초기화

Serial.println("Hello!"); //터미널 작동 확인용 문자열

}

 

void loop()

{

unsigned char bt_cmd = 0; //명령어 저장용 문자형 변수

 

if (Serial.available()) //데이터가 입력되었을 때

{

bt_cmd = Serial.read(); //변수에 입력된 데이터 저장

rc_ctrl_val(bt_cmd); //입력된 데이터에 따라 모터에 입력될 변수를 조정하는 함수

}

motor_drive(); //모터를 구동하는 함수

}

 

void rc_ctrl_val(unsigned char cmd) //입력된 데이터에 따라 모터에 입력될 변수를 조정하는 함수

{

if(cmd == 'w') //'w'가 입력되었을 때, 전진

{

m_a_dir = 0; //모터A 정방향

m_b_dir = 0; //모터B 정방향

m_a_spd = MOTOR_SPEED; //모터A의 속력값 조정

m_b_spd = MOTOR_SPEED; //모터B의 속력값 조정

}

else if(cmd == 'a') //'a'가 입력되었을 때, 제자리 좌회전

{

m_a_dir = 1; //모터A 역방향

m_b_dir = 0; //모터B 정방향

m_a_spd = MOTOR_SPEED; //모터A의 속력값 조정

m_b_spd = MOTOR_SPEED; //모터B의 속력값 조정

}

else if(cmd == 'd') //'d'가 입력되었을 때, 제자리 우회전

{

m_a_dir = 0; //모터A 정방향

m_b_dir = 1; //모터B 역방향

m_a_spd = MOTOR_SPEED; //모터A의 속력값 조정

m_b_spd = MOTOR_SPEED; //모터B의 속력값 조정

}

else if(cmd == 's') //'s'가 입력되었을 때, 후진

{

m_a_dir = 1; //모터A 역방향

m_b_dir = 1; //모터B 역방향

m_a_spd = MOTOR_SPEED; //모터A의 속력값 조정

m_b_spd = MOTOR_SPEED; //모터B의 속력값 조정

}

else if(cmd == 'x')

{

m_a_dir = 0; //모터A 정방향

m_b_dir = 0; //모터B 정방향

m_a_spd = 0; //모터A의 정지

m_b_spd = 0; //모터B의 정지

}

}

 

void motor_drive() //모터를 구동하는 함수

{

if(m_a_dir == 0)

{

digitalWrite(MOTOR_A_a, LOW); //모터A+ LOW

analogWrite(MOTOR_A_b, m_a_spd); //모터A-의 속력을 PWM 출력

}

else

{

analogWrite(MOTOR_A_a, m_a_spd); //모터A+의 속력을 PWM 출력

digitalWrite(MOTOR_A_b, LOW); //모터A- LOW

}

if(m_b_dir == 1)

{

digitalWrite(MOTOR_B_a, LOW); //모터B+ LOW

analogWrite(MOTOR_B_b, m_b_spd); //모터B-의 속력을 PWM 출력

}

else

{

analogWrite(MOTOR_B_a, m_b_spd); //모터B+의 속력을 PWM 출력

digitalWrite(MOTOR_B_b, LOW); //모터B- LOW

}

}

 


이 페이지에서 제공하는 정보에 대해 만족하셨습니까?

경기도청 용인특례시 용인교육청 한국청소년활동진흥원 청소년활동정보서비스 청소년1388대국민포털 학교밖청소년지원센터 꿈드림 방과후청소년아카데미 경기도청소년활동진흥센터 한국청소년수련시설협회 한국청소년상담복지개발원 경기도 디지털성범죄피해자 원스톱지원센터 경기도청소년수련시설협회 한국청소년정책연구원 용인특례시 어린이조아용 용인동부경찰서 용인서부경찰서 용인특례시의회
맨 위로