add slower rate for braking
This commit is contained in:
parent
4c153f28e8
commit
901c46af34
|
@ -57,6 +57,7 @@ long loopmillis=0; //only use one millis reading each loop
|
|||
long last_looptime=0; //for looptiming
|
||||
#define LOOPTIME 10 //how often the loop(s) should run
|
||||
long millis_lastchange=0; //for poweroff after some time with no movement
|
||||
#define MAXBRAKERATE 7 //maximum rate for braking (loop timing)
|
||||
|
||||
String errormessage=""; //store some error message to print
|
||||
|
||||
|
@ -66,7 +67,7 @@ long state_modechange_time=0;
|
|||
|
||||
long millis_lastadc=0;
|
||||
#define ADC_READTIME 10 //time interval to read adc (for filtering)
|
||||
#define ADC_THROTTLE_FILTER 0.05 //low value = slower change
|
||||
#define ADC_THROTTLE_FILTER 0.2 //low value = slower change
|
||||
int adc_throttle_raw=0; //raw throttle value from adc
|
||||
float adc_throttle=0; //filtered value
|
||||
|
||||
|
@ -449,6 +450,11 @@ void loop_idle() {
|
|||
|
||||
void loop_on() {
|
||||
int16_t speedvalue=constrain( map(adc_throttle, ADC_CALIB_THROTTLE_MIN, ADC_CALIB_THROTTLE_MAX, 0, 1000 ) ,0, 1000);
|
||||
int16_t lastSpeed=(out_speedFL+out_speedFR+out_speedRL+out_speedRR)/4;
|
||||
|
||||
if (speedvalue<=lastSpeed) { //braking
|
||||
speedvalue = (lastSpeed-speedvalue)>MAXBRAKERATE ? (lastSpeed-MAXBRAKERATE):speedvalue;
|
||||
}
|
||||
|
||||
out_speedFL=speedvalue;
|
||||
out_speedFR=speedvalue;
|
||||
|
|
|
@ -12,12 +12,17 @@ long lastReadADC=0;
|
|||
long lastSend=0;
|
||||
long lastHBLoop=0;
|
||||
|
||||
int LOOPTIME_CONTROLLER=10; //controller looptime
|
||||
long lastLoopController=0;
|
||||
int ADC_CALIB_THROTTLE_MIN=2000; //controller
|
||||
int ADC_CALIB_THROTTLE_MAX=3120; //controller
|
||||
int ADC_READTIME=10; //controller. in ms
|
||||
int adc_throttle_raw=ADC_CALIB_THROTTLE_MIN; //controller. raw value read from adc (here slider)
|
||||
float adc_throttle=adc_throttle_raw; //controller. internally filtered value
|
||||
float ADC_THROTTLE_FILTER=0.05; //controller
|
||||
float ADC_THROTTLE_FILTER=0.2; //controller
|
||||
|
||||
int speedvalue=0;
|
||||
int MAXBRAKERATE=7; //Controller
|
||||
|
||||
int SENDPERIOD=50; //controller. in ms
|
||||
int sendSpeed=0; //transmittet speed value over usart
|
||||
|
@ -30,6 +35,7 @@ int outSpeed=0; //hoverboard. speedvalue for pwm. filtered speedRate
|
|||
|
||||
Slider SinputValue;
|
||||
Slider SfilteredInputValue;
|
||||
Slider SspeedValue;
|
||||
Slider SspeedRate;
|
||||
Slider SoutSpeed;
|
||||
|
||||
|
@ -62,14 +68,20 @@ void setup() {
|
|||
.setRange(ADC_CALIB_THROTTLE_MIN,ADC_CALIB_THROTTLE_MAX)
|
||||
;
|
||||
|
||||
SspeedRate=cp5.addSlider("speedRate")
|
||||
SspeedValue=cp5.addSlider("speedValue") //after brake slowing
|
||||
.setPosition(10,50+30+10+20+10)
|
||||
.setSize(500,20)
|
||||
.setRange(0,1000)
|
||||
;
|
||||
|
||||
SspeedRate=cp5.addSlider("speedRate")
|
||||
.setPosition(10,50+30+10+20+10+20+10)
|
||||
.setSize(500,20)
|
||||
.setRange(0,1000)
|
||||
;
|
||||
|
||||
SoutSpeed=cp5.addSlider("outSpeed")
|
||||
.setPosition(1,50+30+10+20+10+20+10)
|
||||
.setPosition(1,50+30+10+20+10+20+10+20+10)
|
||||
.setSize(500,30)
|
||||
.setRange(0,1000)
|
||||
;
|
||||
|
@ -152,9 +164,20 @@ void draw() {
|
|||
adc_throttle = adc_throttle*(1-ADC_THROTTLE_FILTER) + adc_throttle_raw*ADC_THROTTLE_FILTER; //adc_throttle = adc_throttle*(1-ADC_THROTTLE_FILTER) + adc_throttle_raw*ADC_THROTTLE_FILTER;
|
||||
SfilteredInputValue.setValue(adc_throttle);
|
||||
}
|
||||
if (loopmillis-lastLoopController>LOOPTIME_CONTROLLER){ //frequency of controller LOOPTIME
|
||||
lastLoopController=millis();
|
||||
int lastSpeed=speedvalue;
|
||||
speedvalue=int(constrain( map(adc_throttle, ADC_CALIB_THROTTLE_MIN, ADC_CALIB_THROTTLE_MAX, 0, 1000 ) ,0, 1000));
|
||||
|
||||
if (speedvalue<=lastSpeed) { //braking
|
||||
speedvalue = (lastSpeed-speedvalue)>MAXBRAKERATE ? (lastSpeed-MAXBRAKERATE):speedvalue;
|
||||
}
|
||||
SspeedValue.setValue(speedvalue);
|
||||
}
|
||||
|
||||
if (loopmillis-lastSend>SENDPERIOD){ //Frequency of transmitting new values to the hoverboard
|
||||
lastSend=millis();
|
||||
sendSpeed=int(constrain( map(adc_throttle, ADC_CALIB_THROTTLE_MIN, ADC_CALIB_THROTTLE_MAX, 0, 1000 ) ,0, 1000));
|
||||
sendSpeed=speedvalue;
|
||||
}
|
||||
|
||||
if (loopmillis-lastHBLoop>LOOPTIME){ //frequency of hoverboard mainboard (looptime)
|
||||
|
|
Loading…
Reference in New Issue