[Arduino] 아두이노 RC카 대회
학교에서 했던 초음파 센서와 적외선 센서를 이용한 RC카 자율주행 프로그램을 할 때 했던 코드.
// 35.5
#define front 4
#define back 2
#define fronttrig 5
#define frontecho 6
#define backtrig 8
#define backecho 7
#define IR_R_PIN 2
#define IR_L_PIN 4
// 방향
#define DIR_R 10
#define DIR_L 12
// 속도
#define PWM_R 3
#define PWM_L 11
int value_L, value_R;
int n = 0;
float length, b_distance, f_distance;
void setup() {
Serial.begin(9600);
// IR 센서
pinMode(IR_R_PIN, INPUT);
pinMode(IR_L_PIN, INPUT);
// 모터
pinMode(DIR_R, OUTPUT);
pinMode(DIR_L, OUTPUT);
pinMode(PWM_R, OUTPUT);
pinMode(PWM_L, OUTPUT);
pinMode(3, OUTPUT);
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);
pinMode(12, OUTPUT);
// 초음파 센서
pinMode (fronttrig, OUTPUT);
pinMode (frontecho, INPUT);
pinMode (backtrig, OUTPUT);
pinMode (backecho, INPUT);
}
void loop() {
value_L = digitalRead(IR_R_PIN);
value_R = digitalRead(IR_L_PIN);
if (value_R == 1 && value_L == 1) {
Forward(95);
// 왼쪽 반응
} else if (value_L == 1 && value_R == 0) {
delay(25);
Backward(160);
delay(215);
Turn_Left(253);
delay(360);
// 오른쪽 반응
} else if ( value_L == 0 && value_R == 1){
delay(25);
Backward(160);
delay(215);
Turn_Right(253);
delay(350);
// 오른쪽 반응
} else if ( value_L == 0 && value_R == 0){
delay(100);
Backward(80);
delay(500);
Turn_Right(100);
delay(100);
}
}
void Forward(int val) {
digitalWrite(DIR_R, HIGH);
digitalWrite(DIR_L, HIGH);
analogWrite(PWM_R, val);
analogWrite(PWM_L, val);
}
void Backward(int val) {
digitalWrite(DIR_R, LOW);
digitalWrite(DIR_L, LOW);
analogWrite(PWM_R, val);
analogWrite(PWM_L, val);
}
void Stop() {
analogWrite(PWM_R, 0);
analogWrite(PWM_L, 0);
}
void Turn_Right(int val) {
digitalWrite(DIR_R, LOW);
digitalWrite(DIR_L, HIGH);
analogWrite(PWM_R, 0);
analogWrite(PWM_L, val);
}
void Turn_Left(int val) {
digitalWrite(DIR_R, HIGH);
digitalWrite(DIR_L, LOW);
analogWrite(PWM_R, val);
analogWrite(PWM_L, 0);
}
//
//void f_ultrasound() {
// digitalWrite(backtrig, HIGH);
// delay(1);
// digitalWrite(fronttrig, HIGH);
// delay(10);
// digitalWrite(fronttrig, LOW);
// length = pulseIn(frontecho, HIGH);
// f_distance = ((float)(340 * length) / 10000) / 2;
// Serial.print("front");
// Serial.print(f_distance);
// Serial.println("cm");
//}
//
//void b_ultrasound() {
// digitalWrite(backtrig, LOW);
// delay(1);
// digitalWrite(backtrig, HIGH);
// delay(10);
// digitalWrite(backtrig, LOW);
// length = pulseIn(backecho, HIGH);
// b_distance = ((float)(340 * length) / 10000) / 2;
// Serial.print("back");
// Serial.print(b_distance);
// Serial.println("cm");
//
// if (b_distance < 20.0) {
// digitalWrite(LED_BUILTIN, HIGH);
// }
//}
모터의 변수 값을 조정하면서 최적의 수치만 찾으면 기록은 빨리 단축 시킬 수 있었다.
댓글남기기