Lu-Hsuan Chen
/
autocar_3sensor_mbed
An auto car with 3 IR sensors.
Diff: main.cpp
- Revision:
- 11:3e9d4c345ebd
- Parent:
- 10:a14380381d86
- Child:
- 12:e95ed962be7a
diff -r a14380381d86 -r 3e9d4c345ebd main.cpp --- a/main.cpp Sat Jun 30 11:36:15 2018 +0000 +++ b/main.cpp Sat Jun 30 12:41:24 2018 +0000 @@ -27,20 +27,20 @@ AnalogIn leftIR(A1); AnalogIn middleIR(A3); AnalogIn rightIR(A5); - -// used for controlling the direction of auto car -void forward(); -void turnLeft(); -void turnRight(); +void readIR(bool* left, bool* middle, bool* right, int threshold); long map(long x, long in_min, long in_max, long out_min, long out_max) { return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; } +// used for controlling the direction of auto car void DriveSingleMotor(int m, int speed, int dir); void driveMotor(bool left, bool middle, bool right); void init(); +void forward(); +void turnLeft(); +void turnRight(); // main() runs in its own thread in the OS int main() @@ -77,15 +77,25 @@ if(ledState) { // not on track: > 500 // on track (black): < 500 - left = leftIR.read_u16() < threshold ? true : false; + /*left = leftIR.read_u16() < threshold ? true : false; middle = middleIR.read_u16() < threshold ? true : false; - right = rightIR.read_u16() < threshold ? true : false; + right = rightIR.read_u16() < threshold ? true : false;*/ + readIR(&left, &middle, &right, threshold); driveMotor(left, middle, right); } } } +void readIR(bool* left, bool* middle, bool* right, int threshold) +{ + // not on track: > 500 + // on track (black): < 500 + *left = leftIR.read_u16() < threshold ? true : false; + *middle = middleIR.read_u16() < threshold ? true : false; + *right = rightIR.read_u16() < threshold ? true : false; +} + // m: 0 => M1 1 => M2 // power 0~10 dir: 0=>正向 1=>反向 void DriveSingleMotor(int m, int speed, int dir)