CIS441 Proj MS 2b

Dependencies:   TextLCD MQTT

Committer:
mwgold
Date:
Wed Dec 11 21:29:48 2019 +0000
Revision:
6:e59641c4562c
Parent:
4:ef8866873df5
Child:
7:15c2ed6e5162
init;

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