Dependencies:   TextLCD MQTT

Committer:
kchen7
Date:
Fri Dec 13 22:14:27 2019 +0000
Revision:
16:cb7cbf2cc23b
Parent:
14:8b65b1f342ee
final version;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mwgold 0:ca7cb51e9fd1 1 /* mbed Microcontroller Library
mwgold 0:ca7cb51e9fd1 2 * Copyright (c) 2018 ARM Limited
mwgold 0:ca7cb51e9fd1 3 * SPDX-License-Identifier: Apache-2.0
mwgold 0:ca7cb51e9fd1 4 */
mwgold 0:ca7cb51e9fd1 5
mwgold 0:ca7cb51e9fd1 6 #include "mbed.h"
mwgold 0:ca7cb51e9fd1 7 #include "Road.h"
mwgold 0:ca7cb51e9fd1 8 #include "AccCar.h"
mwgold 0:ca7cb51e9fd1 9 #include "TextLCD.h"
mwgold 0:ca7cb51e9fd1 10
mwgold 0:ca7cb51e9fd1 11 // main() runs in its own thread in the OS
mwgold 0:ca7cb51e9fd1 12 int main() {
mwgold 6:e59641c4562c 13 Communication::init();
kchen7 12:ade22f4681af 14 wait(1);
mwgold 9:f5981ced0b47 15 printf("starting simulation/r/n");
mwgold 0:ca7cb51e9fd1 16 // ------------------------------------------------------------------------------
mwgold 0:ca7cb51e9fd1 17 // The following three variables are used for timing statistics, do not modify them
mwgold 0:ca7cb51e9fd1 18 Timer stopwatch; // A timer to keep track of how long the updates take, for statistics purposes
mwgold 0:ca7cb51e9fd1 19 int numberCycles = 0;
mwgold 0:ca7cb51e9fd1 20 int totalUpdateTime = 0;
mwgold 0:ca7cb51e9fd1 21 // ------------------------------------------------------------------------------
mwgold 0:ca7cb51e9fd1 22
mwgold 0:ca7cb51e9fd1 23 int time = 0;
mwgold 0:ca7cb51e9fd1 24
mwgold 4:ef8866873df5 25 Road road1;
mwgold 0:ca7cb51e9fd1 26
mwgold 0:ca7cb51e9fd1 27 stopwatch.start();
mwgold 0:ca7cb51e9fd1 28 stopwatch.reset();
mwgold 0:ca7cb51e9fd1 29
mwgold 4:ef8866873df5 30 int return_cars[MAX_CARS];
mwgold 0:ca7cb51e9fd1 31
mwgold 10:8df624795295 32 do {
mwgold 10:8df624795295 33 Road::ready(0);
kchen7 13:2c12f60bd10a 34 Communication::yield(50);
kchen7 12:ade22f4681af 35
mwgold 4:ef8866873df5 36 int new_cars = road1.try_enter_car(time);
kchen7 13:2c12f60bd10a 37 Communication::yield(50);
kchen7 13:2c12f60bd10a 38
mwgold 4:ef8866873df5 39 road1.let_cars_update();
kchen7 13:2c12f60bd10a 40 Communication::yield(50);
kchen7 12:ade22f4681af 41 printf("main.cpp: update flags raised\n");
kchen7 12:ade22f4681af 42
mwgold 4:ef8866873df5 43 road1.wait_for_car_update();
kchen7 7:15c2ed6e5162 44 printf("main.cpp: finished updating\n");
kchen7 12:ade22f4681af 45
mwgold 0:ca7cb51e9fd1 46 printf("\r\nRoad 1 Update %d\r\n", time);
mwgold 4:ef8866873df5 47 road1.print_status();
mwgold 4:ef8866873df5 48
mwgold 4:ef8866873df5 49 printf("\r\n");
kchen7 11:2ab3397b6e30 50 road1.check_exit_cars(return_cars);
mwgold 8:c40e805eecba 51
mwgold 4:ef8866873df5 52 time++;
mwgold 0:ca7cb51e9fd1 53
mwgold 0:ca7cb51e9fd1 54 // ------------------------------------------------------------------
mwgold 0:ca7cb51e9fd1 55 // Timing statistics logic, do not modify
mwgold 0:ca7cb51e9fd1 56 totalUpdateTime += stopwatch.read_ms();
mwgold 0:ca7cb51e9fd1 57 numberCycles++;
mwgold 0:ca7cb51e9fd1 58 stopwatch.reset();
mwgold 0:ca7cb51e9fd1 59 // ------------------------------------------------------------------
mwgold 8:c40e805eecba 60
mwgold 8:c40e805eecba 61 road1.publish_car_info();
kchen7 12:ade22f4681af 62 printf("successful publish: car info\r\n");
mwgold 4:ef8866873df5 63 Communication::publish_road_ready();
kchen7 12:ade22f4681af 64
kchen7 16:cb7cbf2cc23b 65 Communication::yield(50);
mwgold 10:8df624795295 66 while(Road::ready(-1) == 0) {
kchen7 13:2c12f60bd10a 67 Communication::yield(50);
mwgold 10:8df624795295 68 }
kchen7 16:cb7cbf2cc23b 69 road1.update_wait_counter();
kchen7 12:ade22f4681af 70 printf("----------------------\r\n");
mwgold 4:ef8866873df5 71 } while( road1.active_cars > 0x00);
mwgold 0:ca7cb51e9fd1 72
kchen7 12:ade22f4681af 73 // ----------------------------------------------------------------------
mwgold 0:ca7cb51e9fd1 74 // Timing statistics printout, do not modify
kchen7 16:cb7cbf2cc23b 75 printf("Average Wait Time: %fs \r\n", road1.wait_counter / 5.0);
mwgold 0:ca7cb51e9fd1 76 printf("Average update cycle took: %fms \r\n", (totalUpdateTime*1.0)/(numberCycles*1.0));
mwgold 0:ca7cb51e9fd1 77 totalUpdateTime = 0;
mwgold 0:ca7cb51e9fd1 78 numberCycles = 0;
mwgold 0:ca7cb51e9fd1 79 // ----------------------------------------------------------------------
kchen7 16:cb7cbf2cc23b 80 while (true) {
kchen7 16:cb7cbf2cc23b 81 Communication::publish_road_ready();
kchen7 16:cb7cbf2cc23b 82 wait(0.1);
kchen7 16:cb7cbf2cc23b 83 }
mwgold 0:ca7cb51e9fd1 84 }