Created
December 15, 2018 12:08
-
-
Save MatlabMaster/66a00dbd35a3e61ee4328108fffe842c to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
int IR_output1 = 2; //connected to analog 0 | |
int IR_output2 = 1; //connected to analog 1 | |
int IR_output3 = 0; //connected to analog 2 | |
int threshold = 100; | |
int delaytime = 200; | |
int COUNT = 0; // DEBUG PURPOSE TIME-ELAPSE CACHE | |
int COUNT_THRESHOLD = 3; | |
void setup() | |
{ | |
Serial.begin(9600); | |
pinMode(IR_output1, INPUT); //IR sensor1 output | |
pinMode(IR_output2, INPUT); //IR sensor2 output | |
pinMode(IR_output3, INPUT); //IR sensor3 output | |
pinMode(7, OUTPUT); //모터 A 방향설정1 | |
pinMode(8, OUTPUT); //모터 A 방향설정2 | |
pinMode(4, OUTPUT); //모터 B 방향설정1 | |
pinMode(5, OUTPUT); //모터 B 방향설정2 | |
} | |
void stop_march () | |
{ | |
//모터 A설정 | |
digitalWrite(7, HIGH); //모터 A방향설정1 | |
digitalWrite(8, LOW); //모터 A방향설정2 | |
analogWrite(9,0); //모터 A속도조절(0~255) | |
//모터 B설정 | |
digitalWrite(4,HIGH); | |
digitalWrite(5,LOW); | |
analogWrite(3,0); | |
delay(delaytime); | |
} | |
void column_left_march (int speed) | |
{ | |
//모터 A설정 | |
digitalWrite(7, HIGH); //모터 A방향설정1 | |
digitalWrite(8, LOW); //모터 A방향설정2 | |
analogWrite(9,0); //모터 A속도조절(0~255) | |
//모터 B설정 | |
digitalWrite(4,HIGH); | |
digitalWrite(5,LOW); | |
analogWrite(3,speed); | |
delay(delaytime); | |
} | |
void column_right_march (int speed) | |
{ | |
//모터 A설정 | |
digitalWrite(7, HIGH); //모터 A방향설정1 | |
digitalWrite(8, LOW); //모터 A방향설정2 | |
analogWrite(9,speed); //모터 A속도조절(0~255) | |
//모터 B설정 | |
digitalWrite(4,HIGH); | |
digitalWrite(5,LOW); | |
analogWrite(3,0); | |
delay(delaytime); | |
} | |
void forward_march (int speed) | |
{ | |
//모터 A설정 | |
digitalWrite(7, HIGH); //모터 A방향설정1 | |
digitalWrite(8, LOW); //모터 A방향설정2 | |
analogWrite(9,speed); //모터 A속도조절(0~255) | |
//모터 B설정 | |
digitalWrite(4,HIGH); | |
digitalWrite(5,LOW); | |
analogWrite(3,speed); | |
// 가장 중요한 DELAY를 놓쳤어 이걸 안쓰니까 안돌아간듯? | |
delay(delaytime); | |
} | |
void loop() | |
{ | |
// lower IR_value means that the sensor meets white color. | |
// IR_output1 is left sensor value | |
// IR_output2 is middle sensor value | |
// IR_output3 is right sensor value. | |
int IR_value1 = analogRead(IR_output1); | |
int IR_value2 = analogRead(IR_output2); | |
int IR_value3 = analogRead(IR_output3); | |
unsigned int IR1_over = IR_value1 > threshold ? 0 : 1 << 0; | |
unsigned int IR2_over = IR_value2 > threshold ? 0 : 1 << 1; | |
unsigned int IR3_over = IR_value3 > threshold ? 0 : 1 << 2; | |
unsigned int sensor_status = (IR1_over ^ IR2_over) ^ IR3_over; | |
// swap lower 3 bits because black tape is too bright than white paper. | |
// if the line is darker than background, please comment below line. | |
//sensor_status = sensor_status ^ 7; | |
// DEBUG POINT | |
if(COUNT > COUNT_THRESHOLD) | |
{ | |
Serial.println(sensor_status); | |
Serial.println(IR_value1); | |
Serial.println(IR_value2); | |
Serial.println(IR_value3); | |
Serial.println(1111111111); | |
COUNT = 0; | |
} | |
else | |
{ | |
++COUNT; | |
} | |
switch (sensor_status) | |
{ | |
case 0: | |
// STOP | |
stop_march(); | |
break; | |
case 1: | |
// TURN RIGHT | |
column_right_march(100); | |
break; | |
case 2: | |
// FORWARD | |
forward_march(200); | |
break; | |
case 3: | |
// TURN RIGHT | |
column_right_march(120); | |
break; | |
case 4: | |
// TURN LEFT | |
column_left_march(100); | |
break; | |
case 5: | |
// STOP | |
stop_march(); | |
break; | |
case 6: | |
// TURN LEFT | |
column_left_march(120); | |
break; | |
case 7: | |
stop_march(); | |
break; | |
default: | |
stop_march(); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment