not running

Dependencies:   TextLCD MQTT

Committer:
hyan99
Date:
Wed Dec 11 20:20:12 2019 +0000
Revision:
2:16b3bd337db2
Parent:
0:3b4906b8a747
testing

Who changed what in which revision?

UserRevisionLine numberNew contents of line
hyan99 0:3b4906b8a747 1 #include "Car.h"
hyan99 0:3b4906b8a747 2 #include <stdlib.h>
hyan99 0:3b4906b8a747 3
hyan99 0:3b4906b8a747 4 #define TICK 1000
hyan99 0:3b4906b8a747 5
hyan99 0:3b4906b8a747 6 Car::Car(int id, Road* road, int flag) {
hyan99 0:3b4906b8a747 7 this->id = id;
hyan99 0:3b4906b8a747 8 this->road = road;
hyan99 0:3b4906b8a747 9 this->flag = flag;
hyan99 0:3b4906b8a747 10
hyan99 0:3b4906b8a747 11 cycle = 0;
hyan99 0:3b4906b8a747 12
hyan99 0:3b4906b8a747 13 this->thread = NULL;
hyan99 0:3b4906b8a747 14 }
hyan99 0:3b4906b8a747 15
hyan99 0:3b4906b8a747 16 void Car::update() {
hyan99 0:3b4906b8a747 17 bool crossed = false;
hyan99 0:3b4906b8a747 18 while (true) {
hyan99 0:3b4906b8a747 19 ThisThread::sleep_for(TICK);
hyan99 0:3b4906b8a747 20 road->go_flags.wait_all(flag);
hyan99 0:3b4906b8a747 21 cycle++;
hyan99 0:3b4906b8a747 22
hyan99 0:3b4906b8a747 23 position = position + speed;
hyan99 0:3b4906b8a747 24
hyan99 0:3b4906b8a747 25 if (cycle % 5 == 0) {
hyan99 0:3b4906b8a747 26 speed = rand() % 11 + 5;
hyan99 0:3b4906b8a747 27 }
hyan99 0:3b4906b8a747 28
hyan99 0:3b4906b8a747 29 if (position < 54) {
hyan99 0:3b4906b8a747 30 speed = std::min(speed, 54 - position);
hyan99 0:3b4906b8a747 31 } else if (!crossed && position == 54) {
hyan99 0:3b4906b8a747 32 speed = 0;
hyan99 0:3b4906b8a747 33 crossed = true;
hyan99 0:3b4906b8a747 34 } else if (position < 56) {
hyan99 0:3b4906b8a747 35 speed = 1;
hyan99 0:3b4906b8a747 36 }
hyan99 0:3b4906b8a747 37
hyan99 0:3b4906b8a747 38 road->done_flags.set(flag);
hyan99 0:3b4906b8a747 39 }
hyan99 0:3b4906b8a747 40 }
hyan99 0:3b4906b8a747 41
hyan99 0:3b4906b8a747 42 void Car::reset(int position, int speed) {
hyan99 0:3b4906b8a747 43 road->done_flags.clear(flag);
hyan99 0:3b4906b8a747 44
hyan99 0:3b4906b8a747 45 if (thread != NULL) {
hyan99 0:3b4906b8a747 46 thread->terminate();
hyan99 0:3b4906b8a747 47 }
hyan99 0:3b4906b8a747 48
hyan99 0:3b4906b8a747 49 thread = new Thread();
hyan99 0:3b4906b8a747 50 thread->start( callback(this, &Car::update) );
hyan99 0:3b4906b8a747 51
hyan99 0:3b4906b8a747 52 cycle = 0;
hyan99 0:3b4906b8a747 53 this->position = position;
hyan99 0:3b4906b8a747 54 this->speed = speed;
hyan99 0:3b4906b8a747 55 }
hyan99 0:3b4906b8a747 56
hyan99 0:3b4906b8a747 57 void Car::stop() {
hyan99 0:3b4906b8a747 58 if (thread != NULL) {
hyan99 0:3b4906b8a747 59 thread->terminate();
hyan99 0:3b4906b8a747 60 }
hyan99 0:3b4906b8a747 61 }