Fix bug related to coin in no box mode. Change the name of some functions.
This commit is contained in:
parent
6d37c439db
commit
1498f6581e
5 changed files with 79 additions and 63 deletions
|
@ -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 );
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Add table
Reference in a new issue