diff --git a/lib/Openledrace-lib/olr-controller.c b/lib/Openledrace-lib/olr-controller.c index 29becec..653b5e0 100644 --- a/lib/Openledrace-lib/olr-controller.c +++ b/lib/Openledrace-lib/olr-controller.c @@ -6,7 +6,7 @@ enum { static float const ACEL = 0.2; -void setup_controller( void ) { +void controller_setup( void ) { if( DIGITAL_MODE == false ){ pinMode(PIN_VCC_ADC1, OUTPUT); @@ -21,14 +21,14 @@ void setup_controller( void ) { pinMode( DIG_CONTROL_4, INPUT_PULLUP); } -void init_controller( controller_t* ct, enum ctr_type mode, int pin ) { +void controller_init( controller_t* ct, enum ctr_type mode, int pin ) { ct->mode = mode; ct->pin = pin; ct->delta_analog = DELTA_ANALOG; } -byte get_controllerStatus( controller_t* ct ) { +byte controller_getStatus( controller_t* ct ) { if( ct->mode == DIGITAL_MODE ){ return digitalRead( ct->pin ); @@ -53,24 +53,24 @@ byte get_controllerStatus( controller_t* ct ) { } -float get_controller( controller_t* ct) { +float controller_getSpeed( controller_t* ct) { float speed = 0.0; - if ( (ct->flag_sw == 1 ) && (get_controllerStatus( ct ) == 0) ) { + if ( (ct->flag_sw == 1 ) && (controller_getStatus( ct ) == 0) ) { ct->flag_sw = 0; speed = ACEL; } - if ( (ct->flag_sw == 0 ) && (get_controllerStatus( ct ) == 1 ) ) { + if ( (ct->flag_sw == 0 ) && (controller_getStatus( ct ) == 1 ) ) { ct->flag_sw = 1; } return speed; } -float get_accel ( void ) { +float controller_getAccel ( void ) { return ACEL; } -bool control_isActive( int pin ) { +bool controller_isActive( int pin ) { return !digitalRead( pin ); } diff --git a/lib/Openledrace-lib/olr-controller.h b/lib/Openledrace-lib/olr-controller.h index f8ed085..301f5d5 100644 --- a/lib/Openledrace-lib/olr-controller.h +++ b/lib/Openledrace-lib/olr-controller.h @@ -39,17 +39,17 @@ typedef struct{ byte flag_sw; }controller_t; -void setup_controller( void ); +void controller_setup( void ); -void init_controller( controller_t* ct, enum ctr_type mode, int pin ); +void controller_init( controller_t* ct, enum ctr_type mode, int pin ); -byte get_controllerStatus( controller_t* ct ); +byte controller_getStatus( controller_t* ct ); -float get_controller( controller_t* ct ); +float controller_getSpeed( controller_t* ct ); -float get_accel ( void ); +float controller_getAccel ( void ); -bool control_isActive( int pin ); +bool controller_isActive( int pin ); #ifdef __cplusplus diff --git a/lib/Openledrace-lib/olr-lib.c b/lib/Openledrace-lib/olr-lib.c index dc63fbc..b98a2f5 100644 --- a/lib/Openledrace-lib/olr-lib.c +++ b/lib/Openledrace-lib/olr-lib.c @@ -6,7 +6,7 @@ void process_main_track( track_t* tck, car_t* car ); void process_aux_track( track_t* tck, car_t* car ); -void init_car( car_t* car, controller_t* ct, uint32_t color ) { +void car_init( car_t* car, controller_t* ct, uint32_t color ) { car->ct = ct; car->color = color; car->trackID = TRACK_MAIN; @@ -15,8 +15,8 @@ void init_car( car_t* car, controller_t* ct, uint32_t color ) { car->dist_aux=0; } -void update_controller( car_t* car ) { - car->speed += get_controller( car->ct ); +void car_updateController( car_t* car ) { + car->speed += controller_getSpeed( car->ct ); } void update_track( track_t* tck, car_t* car ) { @@ -25,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-(cfg->nled_aux)) - // && get_controllerStatus( ct ) == 0 ) { //change track by switch + // && controller_getStatus( ct ) == 0 ) { //change track by switch && (car->speed <= SPD_MIN_TRACK_AUX )) { //change track by low speed car->trackID = TRACK_AUX; @@ -50,8 +50,8 @@ void process_aux_track( track_t* tck, car_t* car ){ struct cfgtrack const* cfg = &tck->cfg.track; if ( (int)car->dist_aux == tck->ledcoin - && car->speed <= get_accel() ) { - car->speed = get_accel ()*10; + && car->speed <= controller_getAccel() ) { + car->speed = controller_getAccel ()*10; tck->ledcoin = COIN_RESET; }; @@ -77,7 +77,7 @@ void process_main_track( track_t* tck, car_t* car ) { car->dist += car->speed; } -void init_ramp( track_t* tck ) { +void ramp_init( track_t* tck ) { tck->rampactive = true; } @@ -87,7 +87,7 @@ bool ramp_isactive( track_t* tck ) { } -void reset_carPosition( car_t* car) { +void car_resetPosition( car_t* car) { car->trackID = TRACK_MAIN; car->speed = 0; @@ -97,7 +97,15 @@ void reset_carPosition( car_t* car) { car->leaving = false; } -int track_configure( track_t* tck, int init_box ) { +void box_init( track_t* tck ) { + tck->rampactive = true; +} + +bool box_isactive( track_t* tck ) { + return tck->rampactive; +} + +int box_configure( track_t* tck, int init_box ) { struct cfgtrack* cfg = &tck->cfg.track; if( init_box >= cfg->nled_main ) return -1; cfg->nled_main = ( init_box == 0 ) ? cfg->nled_total : init_box; @@ -106,11 +114,12 @@ int track_configure( track_t* tck, int init_box ) { return 0; } -int track_cfgramp( track_t* tck, int center, int high ) { +int ramp_configure( track_t* tck, int center, int high ) { struct cfgramp* ramp = &tck->cfg.ramp; if ( center >= tck->cfg.track.nled_main || center <= 0 ) return -1; ramp->center = center; ramp->high = high; return 0; -} \ No newline at end of file +} + diff --git a/lib/Openledrace-lib/olr-lib.h b/lib/Openledrace-lib/olr-lib.h index 7156b7b..3a030e6 100644 --- a/lib/Openledrace-lib/olr-lib.h +++ b/lib/Openledrace-lib/olr-lib.h @@ -60,26 +60,30 @@ typedef struct { int ledcoin; //LED_SPEED_COIN uint32_t ledtime; bool rampactive; + bool boxactive; }track_t; -void init_ramp( track_t* tck ); +void car_init( car_t* car, controller_t* ct, uint32_t color ); -void set_ramp( track_t* tck ); +void car_updateController( car_t* car ); -bool ramp_isactive( track_t* tck ); - -void init_car( car_t* car, controller_t* ct, uint32_t color ); +void car_resetPosition( car_t* car); void update_track( track_t* tck, car_t* car ); -void update_controller( car_t* car ); +void box_init( track_t* tck ); -void reset_carPosition( car_t* car); +bool box_isactive( track_t* tck ); -int track_configure( track_t* tck, int init_box ); +int box_configure( track_t* tck, int init_box ); + +void ramp_init( track_t* tck ); + +bool ramp_isactive( track_t* tck ); + +int ramp_configure( track_t* tck, int center, int high ); -int track_cfgramp( track_t* tck, int center, int high ); #ifdef __cplusplus } // extern "C" diff --git a/src/open-led-race.ino b/src/open-led-race.ino index 6213db2..17d2ad0 100644 --- a/src/open-led-race.ino +++ b/src/open-led-race.ino @@ -152,37 +152,38 @@ void setup() { Serial.begin(115200); randomSeed( analogRead(A6) + analogRead(A7) ); - setup_controller( ); + controller_setup( ); param_load( &tck.cfg ); - init_car( &cars[0], &switchs[0], COLOR1 ); - init_controller( &switchs[0], DIGITAL_MODE, DIG_CONTROL_1 ); - init_car( &cars[1], &switchs[1], COLOR2 ); - init_controller( &switchs[1], DIGITAL_MODE, DIG_CONTROL_2 ); + car_init( &cars[0], &switchs[0], COLOR1 ); + controller_init( &switchs[0], DIGITAL_MODE, DIG_CONTROL_1 ); + car_init( &cars[1], &switchs[1], COLOR2 ); + controller_init( &switchs[1], DIGITAL_MODE, DIG_CONTROL_2 ); race.numcars = 2; - if( control_isActive( DIG_CONTROL_3 )) { - init_car( &cars[2], &switchs[2], COLOR3 ); - init_controller( &switchs[2], DIGITAL_MODE, DIG_CONTROL_3 ); + if( controller_isActive( DIG_CONTROL_3 )) { + car_init( &cars[2], &switchs[2], COLOR3 ); + controller_init( &switchs[2], DIGITAL_MODE, DIG_CONTROL_3 ); ++race.numcars; } - if( control_isActive( DIG_CONTROL_4 )) { - init_car( &cars[3], &switchs[3], COLOR4 ); - init_controller( &switchs[3], DIGITAL_MODE, DIG_CONTROL_4 ); + if( controller_isActive( DIG_CONTROL_4 )) { + car_init( &cars[3], &switchs[3], COLOR4 ); + controller_init( &switchs[3], DIGITAL_MODE, DIG_CONTROL_4 ); ++race.numcars; } track.begin(); if ( digitalRead( DIG_CONTROL_1 ) == 0 ) { //push switch 1 on reset for activate physics - init_ramp( &tck ); + ramp_init( &tck ); draw_ramp( &tck ); track.show(); } if ( digitalRead( DIG_CONTROL_2 ) == 0 ) { //push switch 2 on reset for activate boxes - track_configure( &tck, 240 ); + box_init( &tck ); + box_configure( &tck, 240 ); } race.cfg.startline = true; @@ -207,7 +208,7 @@ void loop() { else if ( race.phase == READY ) { for( int i = 0; i < race.numcars; ++i) { - reset_carPosition( &cars[i] ); + car_resetPosition( &cars[i] ); cars[i].repeats = 0; } tck.ledcoin = COIN_RESET; @@ -235,19 +236,21 @@ void loop() { else if( race.phase == RACING ) { strip_clear( &tck ); - if( tck.ledcoin == COIN_RESET ) { - tck.ledcoin = COIN_WAIT; - tck.ledtime = millis() + random(2000,7000); + + if( box_isactive( &tck ) ) { + if( tck.ledcoin == COIN_RESET ) { + tck.ledcoin = COIN_WAIT; + 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 ); } - + if( ramp_isactive( &tck ) ) draw_ramp( &tck ); - 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 ); if( cars[i].st == CAR_FINISH ) { @@ -293,7 +296,7 @@ void run_racecycle( car_t *car, int i ) { struct cfgtrack const* cfg = &tck.cfg.track; if( car->st == CAR_ENTER ) { - reset_carPosition( car ); + car_resetPosition( car ); if( car->repeats < race.cfg.nrepeat ) car->st = CAR_RACING; else @@ -302,7 +305,7 @@ void run_racecycle( car_t *car, int i ) { if( car->st == CAR_RACING ) { update_track( &tck, car ); - update_controller( car ); + car_updateController( car ); draw_car( &tck, car ); if( car->nlap == race.cfg.nlap @@ -327,7 +330,7 @@ void run_racecycle( car_t *car, int i ) { car->trackID = NOT_TRACK; sprintf( txbuff, "w%d%c", i + 1, EOL ); Serial.print( txbuff ); - reset_carPosition( car ); + car_resetPosition( car ); } } @@ -541,7 +544,7 @@ ack_t parseCommands(AsyncSerial &serial) { pch = strtok (NULL, ","); if( !pch ) return ack; - int err = track_configure( &tck, init_aux ); + int err = box_configure( &tck, init_aux ); if( err ) return ack; EEPROM.put( eeadrInfo, tck.cfg ); @@ -570,11 +573,11 @@ ack_t parseCommands(AsyncSerial &serial) { if( !pch ) return ack; int high = atoi( pch ); - int err = track_cfgramp( &tck, center, high ); + int err = ramp_configure( &tck, center, high ); if( err ) return ack; EEPROM.put( eeadrInfo, tck.cfg ); - init_ramp( &tck ); + ramp_init( &tck ); ack.rp = OK; if ( verbose >= DEBUG ) { //VERBOSE struct cfgramp const* cfg = &tck.cfg.ramp;