CIS441 Proj MS 2b

Dependencies:   TextLCD MQTT

Committer:
mwgold
Date:
Mon Nov 11 01:33:28 2019 +0000
Revision:
3:aa2778d92301
Parent:
2:150dd9f9c0f1
Child:
4:ef8866873df5
final attempt

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"
kchen7 1:54512aca944d 10 #include "Intersection.h"
mwgold 0:ca7cb51e9fd1 11
mwgold 0:ca7cb51e9fd1 12 TextLCD lcd(p15, p16, p17, p18, p19, p20);
mwgold 0:ca7cb51e9fd1 13
mwgold 0:ca7cb51e9fd1 14 // main() runs in its own thread in the OS
mwgold 0:ca7cb51e9fd1 15 int main() {
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 3:aa2778d92301 21 int road1wait = 0;
mwgold 3:aa2778d92301 22 int road2wait = 0;
mwgold 0:ca7cb51e9fd1 23 // ------------------------------------------------------------------------------
mwgold 0:ca7cb51e9fd1 24
mwgold 0:ca7cb51e9fd1 25 int time = 0;
mwgold 0:ca7cb51e9fd1 26
kchen7 1:54512aca944d 27 Intersection intersection;
kchen7 1:54512aca944d 28 Road* road1 = new Road(&intersection, 1);
kchen7 1:54512aca944d 29 Road* road2 = new Road(&intersection, 2);
mwgold 0:ca7cb51e9fd1 30
mwgold 0:ca7cb51e9fd1 31 stopwatch.start();
mwgold 0:ca7cb51e9fd1 32 stopwatch.reset();
mwgold 0:ca7cb51e9fd1 33
mwgold 0:ca7cb51e9fd1 34
mwgold 0:ca7cb51e9fd1 35 do {
kchen7 1:54512aca944d 36 intersection.preChecks();
mwgold 3:aa2778d92301 37 if (intersection.queue[0] > -1) {
mwgold 3:aa2778d92301 38 if (intersection.queue[0] < 5) {
mwgold 3:aa2778d92301 39 road1wait++;
mwgold 3:aa2778d92301 40 } else {
mwgold 3:aa2778d92301 41 road2wait++;
mwgold 3:aa2778d92301 42 }
mwgold 3:aa2778d92301 43 }
mwgold 3:aa2778d92301 44 if (intersection.queue[1] > -1) {
mwgold 3:aa2778d92301 45 if (intersection.queue[1] < 5) {
mwgold 3:aa2778d92301 46 road1wait++;
mwgold 3:aa2778d92301 47 } else {
mwgold 3:aa2778d92301 48 road2wait++;
mwgold 3:aa2778d92301 49 }
mwgold 3:aa2778d92301 50 }
mwgold 0:ca7cb51e9fd1 51
kchen7 1:54512aca944d 52 int new_cars1 = road1->try_enter_car(time);
kchen7 1:54512aca944d 53 int new_cars2 = road2->try_enter_car(time);
kchen7 1:54512aca944d 54
kchen7 1:54512aca944d 55 road1->let_cars_update();
kchen7 2:150dd9f9c0f1 56 road2->let_cars_update();
kchen7 1:54512aca944d 57 road1->wait_for_car_update();
kchen7 2:150dd9f9c0f1 58 road2->wait_for_car_update();
mwgold 0:ca7cb51e9fd1 59
mwgold 0:ca7cb51e9fd1 60
mwgold 0:ca7cb51e9fd1 61 printf("\r\nRoad 1 Update %d\r\n", time);
kchen7 1:54512aca944d 62 road1->print_status();
kchen7 1:54512aca944d 63 printf("\r\nRoad 2 Update %d\r\n", time);
kchen7 1:54512aca944d 64 road2->print_status();
kchen7 2:150dd9f9c0f1 65
kchen7 2:150dd9f9c0f1 66 lcd.cls();
kchen7 1:54512aca944d 67 if(new_cars1 == -1 && (intersection.intersection_car == -1 || intersection.intersection_car > 4)){
kchen7 2:150dd9f9c0f1 68 lcd.printf("x, x\n");
mwgold 0:ca7cb51e9fd1 69 }
kchen7 1:54512aca944d 70 else if(new_cars1 != -1 && (intersection.intersection_car == -1 || intersection.intersection_car > 4)){
kchen7 2:150dd9f9c0f1 71 lcd.printf("%d, x\n", new_cars1);
mwgold 0:ca7cb51e9fd1 72 }
kchen7 1:54512aca944d 73 else if(new_cars1 == -1 && !(intersection.intersection_car == -1 || intersection.intersection_car > 4)){
kchen7 2:150dd9f9c0f1 74 lcd.printf("x, %d\n", intersection.intersection_car);
mwgold 0:ca7cb51e9fd1 75 }
mwgold 0:ca7cb51e9fd1 76 else{
kchen7 2:150dd9f9c0f1 77 lcd.printf("%d, %d\n", new_cars1, intersection.intersection_car);
kchen7 1:54512aca944d 78 }
kchen7 1:54512aca944d 79
kchen7 1:54512aca944d 80 if(new_cars2 == -1 && intersection.intersection_car < 5){
kchen7 1:54512aca944d 81 lcd.printf("x, x");
kchen7 1:54512aca944d 82 }
kchen7 1:54512aca944d 83 else if(new_cars2 != -1 && intersection.intersection_car < 5){
kchen7 1:54512aca944d 84 lcd.printf("%d, x", new_cars2);
kchen7 1:54512aca944d 85 }
kchen7 1:54512aca944d 86 else if(new_cars2 == -1 && intersection.intersection_car >= 5){
kchen7 1:54512aca944d 87 lcd.printf("x, %d", intersection.intersection_car);
kchen7 1:54512aca944d 88 }
kchen7 1:54512aca944d 89 else{
kchen7 1:54512aca944d 90 lcd.printf("%d, %d", new_cars2, intersection.intersection_car);
mwgold 0:ca7cb51e9fd1 91 }
mwgold 0:ca7cb51e9fd1 92
kchen7 1:54512aca944d 93 printf("\r\n");
kchen7 1:54512aca944d 94 road1->check_exit_cars();
kchen7 1:54512aca944d 95 road2->check_exit_cars();
kchen7 1:54512aca944d 96 time++;
mwgold 0:ca7cb51e9fd1 97
mwgold 0:ca7cb51e9fd1 98 // ------------------------------------------------------------------
mwgold 0:ca7cb51e9fd1 99 // Timing statistics logic, do not modify
mwgold 0:ca7cb51e9fd1 100 totalUpdateTime += stopwatch.read_ms();
mwgold 0:ca7cb51e9fd1 101 numberCycles++;
mwgold 0:ca7cb51e9fd1 102 stopwatch.reset();
mwgold 0:ca7cb51e9fd1 103 // ------------------------------------------------------------------
kchen7 2:150dd9f9c0f1 104
kchen7 1:54512aca944d 105 } while( road1->active_cars > 0x00 || road2->active_cars > 0x00);
mwgold 0:ca7cb51e9fd1 106
mwgold 0:ca7cb51e9fd1 107 // ----------------------------------------------------------------------
mwgold 0:ca7cb51e9fd1 108 // Timing statistics printout, do not modify
mwgold 0:ca7cb51e9fd1 109 printf("Average update cycle took: %fms \r\n", (totalUpdateTime*1.0)/(numberCycles*1.0));
mwgold 3:aa2778d92301 110 printf("Average road1 intersection wait: %fs \r\n", (road1wait*1.0)/5.0);
mwgold 3:aa2778d92301 111 printf("Average road2 intersection wait: %fs \r\n", (road2wait*1.0)/5.0);
mwgold 0:ca7cb51e9fd1 112 totalUpdateTime = 0;
mwgold 0:ca7cb51e9fd1 113 numberCycles = 0;
mwgold 0:ca7cb51e9fd1 114 // ----------------------------------------------------------------------
mwgold 0:ca7cb51e9fd1 115 }