Skip to content

Instantly share code, notes, and snippets.

@MatlabMaster
Created December 15, 2018 12:08
Show Gist options
  • Save MatlabMaster/66a00dbd35a3e61ee4328108fffe842c to your computer and use it in GitHub Desktop.
Save MatlabMaster/66a00dbd35a3e61ee4328108fffe842c to your computer and use it in GitHub Desktop.
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