CIS441 Proj MS 2b

Dependencies:   TextLCD MQTT

Committer:
kchen7
Date:
Fri Dec 13 03:23:31 2019 +0000
Revision:
11:2ab3397b6e30
Parent:
10:8df624795295
Child:
12:ade22f4681af
added yield() in order to receive sync messages

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 TextLCD lcd(p15, p16, p17, p18, p19, p20);
mwgold 0:ca7cb51e9fd1 12
mwgold 0:ca7cb51e9fd1 13 // main() runs in its own thread in the OS
mwgold 0:ca7cb51e9fd1 14 int main() {
mwgold 6:e59641c4562c 15 Communication::init();
kchen7 11:2ab3397b6e30 16 wait(2);
mwgold 9:f5981ced0b47 17 printf("starting simulation/r/n");
mwgold 0:ca7cb51e9fd1 18 // ------------------------------------------------------------------------------
mwgold 0:ca7cb51e9fd1 19 // The following three variables are used for timing statistics, do not modify them
mwgold 0:ca7cb51e9fd1 20 Timer stopwatch; // A timer to keep track of how long the updates take, for statistics purposes
mwgold 0:ca7cb51e9fd1 21 int numberCycles = 0;
mwgold 0:ca7cb51e9fd1 22 int totalUpdateTime = 0;
mwgold 0:ca7cb51e9fd1 23 // ------------------------------------------------------------------------------
mwgold 0:ca7cb51e9fd1 24
mwgold 0:ca7cb51e9fd1 25 int time = 0;
mwgold 0:ca7cb51e9fd1 26
mwgold 4:ef8866873df5 27 Road road1;
mwgold 0:ca7cb51e9fd1 28
mwgold 0:ca7cb51e9fd1 29 stopwatch.start();
mwgold 0:ca7cb51e9fd1 30 stopwatch.reset();
mwgold 0:ca7cb51e9fd1 31
mwgold 4:ef8866873df5 32 int return_cars[MAX_CARS];
mwgold 0:ca7cb51e9fd1 33
mwgold 10:8df624795295 34 do {
mwgold 10:8df624795295 35 Road::ready(0);
mwgold 10:8df624795295 36
mwgold 4:ef8866873df5 37 int new_cars = road1.try_enter_car(time);
kchen7 1:54512aca944d 38
mwgold 4:ef8866873df5 39 road1.let_cars_update();
kchen7 7:15c2ed6e5162 40 printf("main.cpp: update flags raised\n");
mwgold 4:ef8866873df5 41 road1.wait_for_car_update();
kchen7 7:15c2ed6e5162 42 printf("main.cpp: finished updating\n");
mwgold 0:ca7cb51e9fd1 43
mwgold 0:ca7cb51e9fd1 44 printf("\r\nRoad 1 Update %d\r\n", time);
mwgold 4:ef8866873df5 45 road1.print_status();
mwgold 4:ef8866873df5 46
kchen7 11:2ab3397b6e30 47 if(new_cars == -1 && road1.intersection_car == -1){
kchen7 11:2ab3397b6e30 48 lcd.printf("x, x");
kchen7 11:2ab3397b6e30 49 }
kchen7 11:2ab3397b6e30 50 else if(new_cars != -1 && road1.intersection_car == -1){
kchen7 11:2ab3397b6e30 51 lcd.printf("%d, x", new_cars);
kchen7 11:2ab3397b6e30 52 }
kchen7 11:2ab3397b6e30 53 else if(new_cars == -1 && road1.intersection_car != -1){
kchen7 11:2ab3397b6e30 54 lcd.printf("x, %d", road1.intersection_car);
kchen7 11:2ab3397b6e30 55 }
kchen7 11:2ab3397b6e30 56 else{
kchen7 11:2ab3397b6e30 57 lcd.printf("%d, %d", new_cars, road1.intersection_car);
kchen7 11:2ab3397b6e30 58 }
mwgold 0:ca7cb51e9fd1 59
mwgold 4:ef8866873df5 60
mwgold 4:ef8866873df5 61 printf("\r\n");
kchen7 11:2ab3397b6e30 62 road1.check_exit_cars(return_cars);
mwgold 8:c40e805eecba 63
mwgold 4:ef8866873df5 64 time++;
mwgold 0:ca7cb51e9fd1 65
mwgold 0:ca7cb51e9fd1 66 // ------------------------------------------------------------------
mwgold 0:ca7cb51e9fd1 67 // Timing statistics logic, do not modify
mwgold 0:ca7cb51e9fd1 68 totalUpdateTime += stopwatch.read_ms();
mwgold 0:ca7cb51e9fd1 69 numberCycles++;
mwgold 0:ca7cb51e9fd1 70 stopwatch.reset();
mwgold 0:ca7cb51e9fd1 71 // ------------------------------------------------------------------
mwgold 4:ef8866873df5 72
mwgold 4:ef8866873df5 73 lcd.cls();
mwgold 8:c40e805eecba 74
mwgold 8:c40e805eecba 75 road1.publish_car_info();
mwgold 4:ef8866873df5 76 Communication::publish_road_ready();
mwgold 8:c40e805eecba 77 printf("published car info\r\n");
kchen7 11:2ab3397b6e30 78 Communication::yield();
mwgold 10:8df624795295 79 while(Road::ready(-1) == 0) {
kchen7 11:2ab3397b6e30 80 Communication::yield();
mwgold 10:8df624795295 81 }
mwgold 4:ef8866873df5 82 } while( road1.active_cars > 0x00);
mwgold 0:ca7cb51e9fd1 83
mwgold 0:ca7cb51e9fd1 84 // ----------------------------------------------------------------------
mwgold 0:ca7cb51e9fd1 85 // Timing statistics printout, do not modify
mwgold 0:ca7cb51e9fd1 86 printf("Average update cycle took: %fms \r\n", (totalUpdateTime*1.0)/(numberCycles*1.0));
mwgold 0:ca7cb51e9fd1 87 totalUpdateTime = 0;
mwgold 0:ca7cb51e9fd1 88 numberCycles = 0;
mwgold 0:ca7cb51e9fd1 89 // ----------------------------------------------------------------------
mwgold 0:ca7cb51e9fd1 90 }