fix reading trackpoint too fast
This commit is contained in:
parent
bc2ebcbebb
commit
0d33dda103
|
@ -60,7 +60,7 @@ struct nrfdata {
|
|||
};
|
||||
|
||||
long last_sendNRF=0;
|
||||
#define NRFSEND_DELAY 20 //ms
|
||||
#define NRFSEND_DELAY 45 //ms
|
||||
|
||||
#define PIN_TOUCH 5
|
||||
long last_touch=0;
|
||||
|
@ -76,6 +76,7 @@ boolean motorenabled=false;
|
|||
#define PIN_POWERON 7
|
||||
|
||||
#define TRACKPOINT_MAX 70 //value for maximum stick movement
|
||||
#define TRACKPOINT_MAX_ERROR 90 //if value above this amount, error is triggered (nipple position stuck. maybe fixed by slowing down reading interval)
|
||||
float speedscale=0.0;
|
||||
float steerscale=0.0;
|
||||
|
||||
|
@ -120,6 +121,8 @@ void sendRF(nrfdata senddata);
|
|||
long readVcc();
|
||||
void setup_updateSpeedmode();
|
||||
|
||||
unsigned long last_testprint=0;
|
||||
|
||||
void setup() {
|
||||
//Mouse.begin();
|
||||
|
||||
|
@ -215,6 +218,11 @@ void loop() {
|
|||
Serial.println(d.y);
|
||||
#endif
|
||||
|
||||
Serial.print("DataReport: ");
|
||||
Serial.print(d.x);
|
||||
Serial.print(", ");
|
||||
Serial.println(d.y);
|
||||
|
||||
|
||||
nrfdata senddata;
|
||||
|
||||
|
@ -226,14 +234,30 @@ void loop() {
|
|||
int16_t xin;
|
||||
if (d.x>=0 && d.x<=127){ //positive range
|
||||
xin=map(constrain((int16_t)d.x,0,TRACKPOINT_MAX) , 0,TRACKPOINT_MAX, 0, 1000 );
|
||||
if ((float)d.x>TRACKPOINT_MAX_ERROR) { //value outside expected range
|
||||
touching=false; //simulate hands off (needs recentering to reenable)
|
||||
motorenabled=false;
|
||||
}
|
||||
}else{ //negative range 128(=-1000) to 255(0)
|
||||
xin=map(constrain((int16_t)d.x,127+TRACKPOINT_MAX,255) , 127+TRACKPOINT_MAX,255, -1000, 0 );
|
||||
if ((float)d.x<255-TRACKPOINT_MAX_ERROR) { //value outside expected range
|
||||
touching=false; //simulate hands off (needs recentering to reenable)
|
||||
motorenabled=false;
|
||||
}
|
||||
}
|
||||
int16_t yin;
|
||||
if (d.y>=0 && d.y<=127){ //positive range
|
||||
yin=map(constrain((float)d.y,0,TRACKPOINT_MAX) , 0,TRACKPOINT_MAX, 0, 1000 );
|
||||
if ((float)d.y>TRACKPOINT_MAX_ERROR) { //value outside expected range
|
||||
touching=false; //simulate hands off (needs recentering to reenable)
|
||||
motorenabled=false;
|
||||
}
|
||||
}else{ //negative range 128(=-1000) to 255(0)
|
||||
yin=map(constrain((float)d.y,127+TRACKPOINT_MAX,255) , 127+TRACKPOINT_MAX,255, -1000, 0 );
|
||||
if ((float)d.y<255-TRACKPOINT_MAX_ERROR) { //value outside expected range
|
||||
touching=false; //simulate hands off (needs recentering to reenable)
|
||||
motorenabled=false;
|
||||
}
|
||||
}
|
||||
|
||||
last_xin=xin; //save position values for other stuff than control
|
||||
|
@ -316,6 +340,7 @@ void loop() {
|
|||
}else{
|
||||
senddata.commands|= motorenabled << 0; //motorenabled is bit 0
|
||||
}
|
||||
|
||||
#ifdef DEBUG
|
||||
Serial.print(senddata.steer);
|
||||
Serial.print(", ");
|
||||
|
@ -323,6 +348,7 @@ void loop() {
|
|||
#endif
|
||||
|
||||
|
||||
|
||||
senddata.checksum=(uint8_t)((senddata.steer+3)*(senddata.speed+13));
|
||||
sendRF(senddata);
|
||||
|
||||
|
@ -337,9 +363,14 @@ void loop() {
|
|||
}
|
||||
|
||||
|
||||
if(millis()-last_testprint >= 250){ //Test print
|
||||
Serial.print(last_xin); Serial.print(", "); Serial.println(last_yin);
|
||||
last_testprint=millis();
|
||||
}
|
||||
|
||||
if(millis()-last_touch <= TOUCH_TIMEOUT){ //is touched
|
||||
if (!touching && setupmode!=SETUP_DONE) { //was false, is touching again (and not during setup_done wait)
|
||||
Serial.println("touching was false");
|
||||
//Serial.println("touching was false");
|
||||
if (last_xin==0 && last_yin==0) { //stick at center position
|
||||
touching=true; //enable only if stick is at center again
|
||||
motorenabled=true;
|
||||
|
|
Loading…
Reference in New Issue