Solved ram issue with gravity map. Update to 4 cars
This commit is contained in:
parent
e45dfae657
commit
9242511611
5 changed files with 33 additions and 41 deletions
|
@ -62,40 +62,28 @@ void process_aux_track( track_t* tck, car_t* car ){
|
|||
|
||||
void process_main_track( track_t* tck, car_t* car ) {
|
||||
struct cfgtrack const* cfg = &tck->cfg.track;
|
||||
const int nled = cfg->nled_main;
|
||||
const byte* gmap = tck->gmap;
|
||||
if ( gmap[(word)car->dist % nled] < 127 )
|
||||
car->speed -= cfg->kg*(127-( gmap[(word)car->dist % nled]) );
|
||||
if ( gmap[(word)car->dist % nled] > 127 )
|
||||
car->speed += cfg->kg*(( gmap[(word)car->dist % nled])-127 );
|
||||
|
||||
if ( tck->rampactive ) {
|
||||
struct cfgramp const* r = &tck->cfg.ramp;
|
||||
int const pos = (int)car->dist % cfg->nled_main;
|
||||
if ( pos >= r->init && pos < r->center )
|
||||
car->speed -= cfg->kg * r->high * ( pos - r->init );
|
||||
|
||||
if ( pos <= r->end && pos > r->center )
|
||||
car->speed += cfg->kg * r->high * ( pos - r->center );
|
||||
}
|
||||
|
||||
car->speed -= car->speed * cfg->kf;
|
||||
car->dist += car->speed;
|
||||
}
|
||||
|
||||
void init_ramp( track_t* tck ) {
|
||||
struct cfgtrack const* cfg = &tck->cfg.track;
|
||||
byte* gmap = tck->gmap;
|
||||
for( int i=0; i<cfg->nled_main; i++ ) {
|
||||
gmap[i] = 127;
|
||||
}
|
||||
tck->rampactive = true;
|
||||
}
|
||||
|
||||
void set_ramp( track_t* tck ) {
|
||||
struct cfgramp* r = &tck->cfg.ramp;
|
||||
for( int i=0; i<(r->center - r->init); i++ )
|
||||
tck->gmap[r->init+i] = 127-i*((float)r->high/(r->center - r->init));
|
||||
|
||||
tck->gmap[r->center] = 127;
|
||||
|
||||
for( int i=0; i<(r->end - r->center); i++ )
|
||||
tck->gmap[r->center+i+1] = 127+r->high-i*((float)r->high/(r->end-r->center));
|
||||
|
||||
r->enabled = true;
|
||||
}
|
||||
|
||||
bool ramp_isactive( track_t* tck ) {
|
||||
return tck->cfg.ramp.enabled;
|
||||
return tck->rampactive;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -57,7 +57,7 @@ typedef struct {
|
|||
struct cfgparam cfg;
|
||||
int ledcoin; //LED_SPEED_COIN
|
||||
uint32_t ledtime;
|
||||
byte* gmap; //pointer to gravity map
|
||||
bool rampactive;
|
||||
}track_t;
|
||||
|
||||
|
||||
|
|
|
@ -6,7 +6,7 @@ void param_setdefault( struct cfgparam* cfg ) {
|
|||
cfg->ramp.init = 90;
|
||||
cfg->ramp.center = 100;
|
||||
cfg->ramp.end = 110;
|
||||
cfg->ramp.high = 12;
|
||||
cfg->ramp.high = 2;
|
||||
|
||||
cfg->track.nled_total = MAXLED;
|
||||
cfg->track.nled_main = 300; //240
|
||||
|
|
|
@ -15,7 +15,7 @@ extern "C"{
|
|||
|
||||
enum{
|
||||
LEN_UID = 16,
|
||||
CFG_VER = 2,
|
||||
CFG_VER = 3,
|
||||
};
|
||||
|
||||
|
||||
|
@ -35,7 +35,6 @@ struct cfgramp {
|
|||
int center;
|
||||
int end;
|
||||
int high;
|
||||
bool enabled;
|
||||
};
|
||||
|
||||
struct brdinfo {
|
||||
|
|
|
@ -39,7 +39,7 @@
|
|||
|
||||
|
||||
enum{
|
||||
MAX_CARS = 2,
|
||||
MAX_CARS = 4,
|
||||
};
|
||||
|
||||
|
||||
|
@ -104,7 +104,6 @@ enum loglevel verbose = DISABLE;
|
|||
static struct race race;
|
||||
static car_t cars[ MAX_CARS ];
|
||||
static controller_t switchs[ MAX_CARS ];
|
||||
static byte gravity_map[ MAXLED ];
|
||||
static track_t tck;
|
||||
|
||||
static int const eeadrInfo = 0;
|
||||
|
@ -143,18 +142,14 @@ AsyncSerial asyncSerial(data, dataLength,
|
|||
|
||||
Adafruit_NeoPixel track = Adafruit_NeoPixel( MAXLED, PIN_LED, NEO_GRB + NEO_KHZ800 );
|
||||
|
||||
void init_track( track_t* tck ){
|
||||
param_load( &tck->cfg );
|
||||
tck->gmap = gravity_map;
|
||||
init_ramp( tck );
|
||||
}
|
||||
|
||||
|
||||
void setup() {
|
||||
|
||||
Serial.begin(115200);
|
||||
randomSeed( analogRead(A0) + analogRead(A1) );
|
||||
setup_controller( );
|
||||
init_track( &tck );
|
||||
param_load( &tck.cfg );
|
||||
|
||||
init_car( &cars[0], &switchs[0], COLOR1 );
|
||||
init_controller( &switchs[0], DIGITAL_MODE, DIG_CONTROL_1 );
|
||||
|
@ -177,7 +172,7 @@ void setup() {
|
|||
track.begin();
|
||||
|
||||
if ( digitalRead( DIG_CONTROL_1 ) == 0 ) { //push switch 1 on reset for activate physic
|
||||
set_ramp( &tck );
|
||||
init_ramp( &tck );
|
||||
draw_ramp( &tck );
|
||||
track.show();
|
||||
}
|
||||
|
@ -453,9 +448,19 @@ void draw_car( track_t* tck, car_t* car ) {
|
|||
}
|
||||
|
||||
void draw_ramp( track_t* tck ) {
|
||||
struct cfgtrack const* cfg = &tck->cfg.track;
|
||||
for(int i=0; i< cfg->nled_main; i++)
|
||||
track.setPixelColor(i, track.Color(0,0,(127-tck->gmap[i])/8) );
|
||||
struct cfgramp const* r = &tck->cfg.ramp;
|
||||
byte dist = 0;
|
||||
byte intensity = 0;
|
||||
for( int i = r->init; i <= r->center; ++i ) {
|
||||
dist = r->center - r->init;
|
||||
intensity = ( 255 * (i - r->init) ) / ( 2* dist );
|
||||
track.setPixelColor( i, track.Color( intensity,intensity, 0 ) );
|
||||
}
|
||||
for( int i = r->center; i <= r->end; ++i ) {
|
||||
dist = r->end - r->center;
|
||||
intensity = ( 255 * ( r->end - i ) ) / ( 2* dist );
|
||||
track.setPixelColor( i, track.Color( intensity,intensity, 0 ) );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@ -576,7 +581,7 @@ ack_t parseCommands(AsyncSerial &serial) {
|
|||
if( err ) return ack;
|
||||
EEPROM.put( eeadrInfo, tck.cfg );
|
||||
|
||||
set_ramp( &tck );
|
||||
init_ramp( &tck );
|
||||
ack.rp = OK;
|
||||
if ( verbose >= DEBUG ) { //VERBOSE
|
||||
struct cfgramp const* cfg = &tck.cfg.ramp;
|
||||
|
|
Loading…
Add table
Reference in a new issue