Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Diff: main.cpp
- Revision:
- 0:7676da98b5c1
- Child:
- 1:2ceb12f88b5e
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp Tue Mar 26 03:27:14 2019 +0000
@@ -0,0 +1,81 @@
+/* mbed Microcontroller Library
+ * Copyright (c) 2018 ARM Limited
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+#include "mbed.h" // mbed OS 5.11
+#include "Car.h" // DC motor driver
+#include "IR_sensors.h" // ir sensors to track the line
+
+//#define ADJ (1.0/6) //this is a time adjustment for bug in mbed OS 5.11
+#define ADJ (1.0) //this is a time adjustment for bug in mbed OS 5.11
+
+
+#define SPEED 0.001 // car speed
+#define SLOWTURNCW 0.10 // speed to turn when the line still touching center
+#define FASTTURNCW 0.50 // speed to turn when the line only touches side
+
+// the motors have the highest priority;
+// this will be use to "track" its position
+Thread threadMotors = Thread(osPriorityRealtime4, OS_STACK_SIZE, NULL, NULL);
+Thread threadState = Thread(osPriorityRealtime1, OS_STACK_SIZE, NULL, NULL);
+
+Queue<float,4> motor_queue; // queue for motor turn commands;
+Car car(p21, p22, p23,p26, p25, p24); // controls two motors
+IR_sensors ir(p18, p19, p20, LED1, LED2, LED3); // controls three IR sensors
+
+float location = 0;
+
+void motors() {
+ while (true) {
+ printf("Checking Motors.. \n\r");
+ location += car.speed();
+ car.speed(SPEED);
+ if (not motor_queue.empty()){
+ osEvent evt = motor_queue.get();
+ if (evt.status == osEventMessage){
+ float *cmd = (float*)evt.value.p;
+ printf("Motor turning: %.2f \n\r", *cmd);
+ car.turnCW(*cmd);
+ }
+ }
+ wait(0.20 * ADJ);
+ }
+}
+
+void car_state() {
+ State prevState = ir.state();
+ while (true) {
+ float turn;
+ switch (ir.state()) {
+ case left : turn = -FASTTURNCW;// turns left fast
+ printf("\t\t\tstate: Left\n\r");
+ break;
+ case centerleft : turn = -SLOWTURNCW; // turns left slow
+ printf("\t\t\tstate: Center Left\n\r");
+ break;
+ case center : turn = 0.0; // doesn't turn
+ printf("\t\t\tstate: Center\n\r");
+ break;
+ case centerright: turn = SLOWTURNCW; // turns right slow
+ printf("\t\t\tstate: Center Right\n\r");
+ break;
+ case right : turn = FASTTURNCW; // turns right fast
+ printf("\t\t\tstate: Right\n\r");
+ break;
+ default : turn = 0.0; // MAX turn right
+ printf("\t\t\tstate: Default\n\r");
+ break;
+ }
+ motor_queue.put(&turn);
+ printf("Motor command: %.2f \n\r", turn);
+ prevState = ir.state();
+ wait(1.0 * ADJ);
+ }
+}
+
+int main() {
+printf("PROGRAM STARTED");
+ threadMotors.start(motors);
+ threadState.start(car_state);
+}