CIS441 Proj MS 2b

Dependencies:   TextLCD MQTT

Committer:
kchen7
Date:
Mon Nov 11 00:50:05 2019 +0000
Revision:
1:54512aca944d
Parent:
0:ca7cb51e9fd1
Child:
2:150dd9f9c0f1
attempt 1

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 0:ca7cb51e9fd1 21 // ------------------------------------------------------------------------------
mwgold 0:ca7cb51e9fd1 22
mwgold 0:ca7cb51e9fd1 23 int time = 0;
mwgold 0:ca7cb51e9fd1 24
kchen7 1:54512aca944d 25 Intersection intersection;
kchen7 1:54512aca944d 26 Road* road1 = new Road(&intersection, 1);
kchen7 1:54512aca944d 27 Road* road2 = new Road(&intersection, 2);
mwgold 0:ca7cb51e9fd1 28
mwgold 0:ca7cb51e9fd1 29 stopwatch.start();
mwgold 0:ca7cb51e9fd1 30 stopwatch.reset();
mwgold 0:ca7cb51e9fd1 31
mwgold 0:ca7cb51e9fd1 32
mwgold 0:ca7cb51e9fd1 33 do {
kchen7 1:54512aca944d 34 intersection.preChecks();
mwgold 0:ca7cb51e9fd1 35
kchen7 1:54512aca944d 36 int new_cars1 = road1->try_enter_car(time);
kchen7 1:54512aca944d 37 int new_cars2 = road2->try_enter_car(time);
kchen7 1:54512aca944d 38
kchen7 1:54512aca944d 39 road1->let_cars_update();
kchen7 1:54512aca944d 40 road1->wait_for_car_update();
mwgold 0:ca7cb51e9fd1 41
mwgold 0:ca7cb51e9fd1 42
mwgold 0:ca7cb51e9fd1 43 printf("\r\nRoad 1 Update %d\r\n", time);
kchen7 1:54512aca944d 44 road1->print_status();
kchen7 1:54512aca944d 45 printf("\r\nRoad 2 Update %d\r\n", time);
kchen7 1:54512aca944d 46 road2->print_status();
mwgold 0:ca7cb51e9fd1 47
kchen7 1:54512aca944d 48 if(new_cars1 == -1 && (intersection.intersection_car == -1 || intersection.intersection_car > 4)){
mwgold 0:ca7cb51e9fd1 49 lcd.printf("x, x");
mwgold 0:ca7cb51e9fd1 50 }
kchen7 1:54512aca944d 51 else if(new_cars1 != -1 && (intersection.intersection_car == -1 || intersection.intersection_car > 4)){
kchen7 1:54512aca944d 52 lcd.printf("%d, x", new_cars1);
mwgold 0:ca7cb51e9fd1 53 }
kchen7 1:54512aca944d 54 else if(new_cars1 == -1 && !(intersection.intersection_car == -1 || intersection.intersection_car > 4)){
kchen7 1:54512aca944d 55 lcd.printf("x, %d", intersection.intersection_car);
mwgold 0:ca7cb51e9fd1 56 }
mwgold 0:ca7cb51e9fd1 57 else{
kchen7 1:54512aca944d 58 lcd.printf("%d, %d", new_cars1, intersection.intersection_car);
kchen7 1:54512aca944d 59 }
kchen7 1:54512aca944d 60
kchen7 1:54512aca944d 61 if(new_cars2 == -1 && intersection.intersection_car < 5){
kchen7 1:54512aca944d 62 lcd.printf("x, x");
kchen7 1:54512aca944d 63 }
kchen7 1:54512aca944d 64 else if(new_cars2 != -1 && intersection.intersection_car < 5){
kchen7 1:54512aca944d 65 lcd.printf("%d, x", new_cars2);
kchen7 1:54512aca944d 66 }
kchen7 1:54512aca944d 67 else if(new_cars2 == -1 && intersection.intersection_car >= 5){
kchen7 1:54512aca944d 68 lcd.printf("x, %d", intersection.intersection_car);
kchen7 1:54512aca944d 69 }
kchen7 1:54512aca944d 70 else{
kchen7 1:54512aca944d 71 lcd.printf("%d, %d", new_cars2, intersection.intersection_car);
mwgold 0:ca7cb51e9fd1 72 }
mwgold 0:ca7cb51e9fd1 73
kchen7 1:54512aca944d 74 printf("\r\n");
kchen7 1:54512aca944d 75 road1->check_exit_cars();
kchen7 1:54512aca944d 76 road2->check_exit_cars();
kchen7 1:54512aca944d 77 time++;
mwgold 0:ca7cb51e9fd1 78
mwgold 0:ca7cb51e9fd1 79 // ------------------------------------------------------------------
mwgold 0:ca7cb51e9fd1 80 // Timing statistics logic, do not modify
mwgold 0:ca7cb51e9fd1 81 totalUpdateTime += stopwatch.read_ms();
mwgold 0:ca7cb51e9fd1 82 numberCycles++;
mwgold 0:ca7cb51e9fd1 83 stopwatch.reset();
mwgold 0:ca7cb51e9fd1 84 // ------------------------------------------------------------------
mwgold 0:ca7cb51e9fd1 85
mwgold 0:ca7cb51e9fd1 86 lcd.cls();
mwgold 0:ca7cb51e9fd1 87 //lcd.printf("1 %d -> %d\n2 %d -> %d", 0,0,car2.position, car2.speed);
mwgold 0:ca7cb51e9fd1 88
kchen7 1:54512aca944d 89 } while( road1->active_cars > 0x00 || road2->active_cars > 0x00);
mwgold 0:ca7cb51e9fd1 90
mwgold 0:ca7cb51e9fd1 91 // ----------------------------------------------------------------------
mwgold 0:ca7cb51e9fd1 92 // Timing statistics printout, do not modify
mwgold 0:ca7cb51e9fd1 93 printf("Average update cycle took: %fms \r\n", (totalUpdateTime*1.0)/(numberCycles*1.0));
mwgold 0:ca7cb51e9fd1 94 totalUpdateTime = 0;
mwgold 0:ca7cb51e9fd1 95 numberCycles = 0;
mwgold 0:ca7cb51e9fd1 96 // ----------------------------------------------------------------------
mwgold 0:ca7cb51e9fd1 97 }