From 1ca6cd6c6d2a53d9c054ce392d4faf813d7863a8 Mon Sep 17 00:00:00 2001 From: Angel Maldonado Date: Sun, 29 Sep 2019 19:17:01 +0200 Subject: [PATCH] Fix some bugs related to aux circuit --- lib/Openledrace-lib/olr-lib.c | 16 ++++------------ lib/Openledrace-lib/olr-lib.h | 5 +++-- src/open-led-race.ino | 35 ++++++++++++++++++++--------------- 3 files changed, 27 insertions(+), 29 deletions(-) diff --git a/lib/Openledrace-lib/olr-lib.c b/lib/Openledrace-lib/olr-lib.c index 3ac621e..4d4339e 100644 --- a/lib/Openledrace-lib/olr-lib.c +++ b/lib/Openledrace-lib/olr-lib.c @@ -3,11 +3,6 @@ - - -static int T_SPEED_COIN = 0; - - void process_main_track( track_t* tck, car_t* car ); void process_aux_track( track_t* tck, car_t* car ); @@ -30,7 +25,7 @@ void update_track( track_t* tck, car_t* car ) { if ( car->trackID == TRACK_MAIN && (int)car->dist % cfg->nled_main == cfg->init_aux - && get_controllerStatus( ct ) == 0 ) { + && get_controllerStatus( ct ) != 0 ) { car->trackID = TRACK_AUX; car->dist_aux = 0; @@ -51,16 +46,13 @@ void update_track( track_t* tck, car_t* car ) { } void process_aux_track( track_t* tck, car_t* car ){ - controller_t* ct = car->ct; struct cfgtrack const* cfg = &tck->cfg.track; - if ( (int)car->dist_aux == tck->led_speed - && car->speed <= get_accel ( ) - && ct->flag_sw == 0 ) { + if ( (int)car->dist_aux == tck->ledcoin + && car->speed <= get_accel() ) { car->speed = get_accel ()*10; - tck->led_speed = 0; - //T_SPEED_COIN = millis() + random(5000,30000); + tck->ledcoin = -1; }; car->speed -= car->speed * cfg->kf; diff --git a/lib/Openledrace-lib/olr-lib.h b/lib/Openledrace-lib/olr-lib.h index e1d43eb..f140489 100644 --- a/lib/Openledrace-lib/olr-lib.h +++ b/lib/Openledrace-lib/olr-lib.h @@ -51,8 +51,9 @@ typedef struct{ typedef struct { struct cfgparam cfg; - int led_speed; //LED_SPEED_COIN - byte* gmap; //pointer to gravity map + int ledcoin; //LED_SPEED_COIN + uint32_t ledtime; + byte* gmap; //pointer to gravity map }track_t; diff --git a/src/open-led-race.ino b/src/open-led-race.ino index 13182c5..cf80f75 100644 --- a/src/open-led-race.ino +++ b/src/open-led-race.ino @@ -38,8 +38,6 @@ #define COLOR4 track.Color(120,120,0) -//int LED_SPEED_COIN =-1; - enum{ MAX_CARS = 4, }; @@ -113,7 +111,6 @@ char txbuff[64]; const int dataLength = 32; byte data[dataLength]; -unsigned long int T_SPEED_COIN; static unsigned long lastmillis = 0; int win_music[] = { @@ -146,12 +143,13 @@ void init_track( track_t* tck ){ param_load( &tck->cfg ); tck->gmap = gravity_map; init_ramp( tck ); - tck->led_speed = -1; + tck->ledcoin = -1; } void setup() { Serial.begin(115200); + randomSeed( analogRead(A0) + analogRead(A1) ); setup_controller( ); init_track( &tck ); @@ -214,7 +212,7 @@ void loop() { if( race.cfg.startline ){ start_race( &tck ); - T_SPEED_COIN = millis() + random(5000,30000); + for( int i = 0; i < race.numcars; ++i ) { cars[i].st = CAR_ENTER; } @@ -226,11 +224,15 @@ void loop() { strip_clear( &tck ); - if( tck.led_speed > 0 ) - draw_coin( &tck ); - else if( millis() > T_SPEED_COIN ) - tck.led_speed = random( 20, tck.cfg.track.nled_aux - 20 ); + if( tck.ledcoin == -1 ) { + tck.ledcoin = 0; + tck.ledtime = millis() + random(2000,7000); + } + if( tck.ledcoin > 0 ) + draw_coin( &tck ); + else if( millis() > tck.ledtime ) + tck.ledcoin = random( 20, tck.cfg.track.nled_aux - 20 ); for( int i = 0; i < race.numcars; ++i ) { run_racecycle( &cars[i], i ); @@ -252,8 +254,11 @@ void loop() { /* ---------------- */ } else if( race.phase == COMPLETE ) { - if ( race.cfg.finishline ) + if ( race.cfg.finishline ){ winner_fx( ); + strip_clear( &tck ); + } + track.show(); race.phase = READY; } @@ -356,8 +361,8 @@ void start_race( track_t* tck ) { track.show(); delay(2000); - track.setPixelColor(12, track.Color(0,255,0)); - track.setPixelColor(11, track.Color(0,255,0)); + track.setPixelColor(12, track.Color(255,0,0)); + track.setPixelColor(11, track.Color(255,0,0)); track.show(); tone(PIN_AUDIO,400); @@ -376,8 +381,8 @@ void start_race( track_t* tck ) { track.setPixelColor(9, track.Color(0,0,0)); track.setPixelColor(10, track.Color(0,0,0)); - track.setPixelColor(8, track.Color(255,0,0)); - track.setPixelColor(7, track.Color(255,0,0)); + track.setPixelColor(8, track.Color(0,255,0)); + track.setPixelColor(7, track.Color(0,255,0)); track.show(); tone(PIN_AUDIO,1200); @@ -408,7 +413,7 @@ void strip_clear( track_t* tck ) { void draw_coin( track_t* tck ) { struct cfgtrack const* cfg = &tck->cfg.track; - track.setPixelColor( 1 + cfg->nled_main + tck->led_speed, track.Color(0,0,250) ); + track.setPixelColor( 1 + cfg->nled_main + tck->ledcoin, track.Color(0,0,250) ); } void draw_win( track_t* tck, car_t* car) {