An auto car with 3 IR sensors.

Dependencies:   Ping

Revision:
11:3e9d4c345ebd
Parent:
10:a14380381d86
Child:
12:e95ed962be7a
--- 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)