CIS441 Proj MS 2b

Dependencies:   TextLCD MQTT

Committer:
mwgold
Date:
Thu Dec 12 22:28:02 2019 +0000
Revision:
9:f5981ced0b47
Parent:
8:c40e805eecba
Child:
10:8df624795295
sync with flags

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();
mwgold 9:f5981ced0b47 16 wait(5);
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 9:f5981ced0b47 34 do {
mwgold 4:ef8866873df5 35 int new_cars = road1.try_enter_car(time);
kchen7 1:54512aca944d 36
mwgold 4:ef8866873df5 37 road1.let_cars_update();
kchen7 7:15c2ed6e5162 38 printf("main.cpp: update flags raised\n");
mwgold 4:ef8866873df5 39 road1.wait_for_car_update();
kchen7 7:15c2ed6e5162 40 printf("main.cpp: finished updating\n");
mwgold 0:ca7cb51e9fd1 41
mwgold 0:ca7cb51e9fd1 42 printf("\r\nRoad 1 Update %d\r\n", time);
mwgold 4:ef8866873df5 43 road1.print_status();
mwgold 4:ef8866873df5 44
mwgold 4:ef8866873df5 45 if(new_cars == -1 && road1.intersection_car == -1){
mwgold 4:ef8866873df5 46 lcd.printf("x, x");
mwgold 0:ca7cb51e9fd1 47 }
mwgold 4:ef8866873df5 48 else if(new_cars != -1 && road1.intersection_car == -1){
mwgold 4:ef8866873df5 49 lcd.printf("%d, x", new_cars);
mwgold 0:ca7cb51e9fd1 50 }
mwgold 4:ef8866873df5 51 else if(new_cars == -1 && road1.intersection_car != -1){
mwgold 4:ef8866873df5 52 lcd.printf("x, %d", road1.intersection_car);
mwgold 0:ca7cb51e9fd1 53 }
mwgold 0:ca7cb51e9fd1 54 else{
mwgold 4:ef8866873df5 55 lcd.printf("%d, %d", new_cars, road1.intersection_car);
mwgold 0:ca7cb51e9fd1 56 }
mwgold 0:ca7cb51e9fd1 57
mwgold 4:ef8866873df5 58
mwgold 4:ef8866873df5 59 printf("\r\n");
mwgold 4:ef8866873df5 60 road1.check_exit_cars(return_cars);
mwgold 8:c40e805eecba 61
mwgold 4:ef8866873df5 62 time++;
mwgold 0:ca7cb51e9fd1 63
mwgold 0:ca7cb51e9fd1 64 // ------------------------------------------------------------------
mwgold 0:ca7cb51e9fd1 65 // Timing statistics logic, do not modify
mwgold 0:ca7cb51e9fd1 66 totalUpdateTime += stopwatch.read_ms();
mwgold 0:ca7cb51e9fd1 67 numberCycles++;
mwgold 0:ca7cb51e9fd1 68 stopwatch.reset();
mwgold 0:ca7cb51e9fd1 69 // ------------------------------------------------------------------
mwgold 4:ef8866873df5 70
mwgold 4:ef8866873df5 71 lcd.cls();
mwgold 8:c40e805eecba 72
mwgold 8:c40e805eecba 73 road1.publish_car_info();
mwgold 4:ef8866873df5 74 Communication::publish_road_ready();
mwgold 8:c40e805eecba 75 printf("published car info\r\n");
mwgold 9:f5981ced0b47 76 road1.wait_for_sync();
mwgold 4:ef8866873df5 77 } while( road1.active_cars > 0x00);
mwgold 0:ca7cb51e9fd1 78
mwgold 0:ca7cb51e9fd1 79 // ----------------------------------------------------------------------
mwgold 0:ca7cb51e9fd1 80 // Timing statistics printout, do not modify
mwgold 0:ca7cb51e9fd1 81 printf("Average update cycle took: %fms \r\n", (totalUpdateTime*1.0)/(numberCycles*1.0));
mwgold 0:ca7cb51e9fd1 82 totalUpdateTime = 0;
mwgold 0:ca7cb51e9fd1 83 numberCycles = 0;
mwgold 0:ca7cb51e9fd1 84 // ----------------------------------------------------------------------
mwgold 0:ca7cb51e9fd1 85 }