#ifndef _DEFINITIONS_H #define _DEFINITIONS_H // ########################## DEFINES ########################## #define SERIAL_CONTROL_BAUD 115200 // [-] Baud rate for HoverSerial (used to communicate with the hoverboard) #define SERIAL_BAUD 115200 // [-] Baud rate for built-in Serial (used for the Serial Monitor) #define START_FRAME 0xABCD // [-] Start frme definition for reliable serial communication #define SERIAL_LOG_BAUD 115200 // baud rate for logging output bool log_update=true; unsigned long last_log_send=0; //#define SENDPERIOD 20 //ms. delay for sending speed and steer data to motor controller via serial #define LOGMININTERVAL 20 //minimum interval (ms) to send logs #define LOGMAXINTERVAL 10000 //maximum time (ms) after which data is send #define WRITE_HEADER_TIME 400 //just before FEEDBACKRECEIVETIMEOUT, so header gets written before error comments bool log_header_written = false; //#define FEEDBACKRECEIVETIMEOUT 500 //bool controllerFront_connected=false; //bool controllerRear_connected=false; bool controllers_connected=false; #define PIN_THROTTLE A7 //const uint16_t calib_throttle_min = 420; //better a bit too high than too low //const uint16_t calib_throttle_max = 790; const uint16_t failsafe_throttle_min_A = 4900; //if adc value falls below this failsafe is triggered. const uint16_t failsafe_throttle_max_A = 14500; //if adc value goes above this failsafe is triggered. const uint16_t failsafe_throttle_min_B = 3900; //if adc value falls below this failsafe is triggered. const uint16_t failsafe_throttle_max_B = 12500; //if adc value goes above this failsafe is triggered. const uint16_t failsafe_throttle_maxDiff = 200;//maximum adc value difference between both sensors A and B. value range 0-1000. choose value at least 2x higher than maximum difference when moving throttle slowly //const uint16_t throttleCurvePerMM[] = {414,460,490,511,527,539,548,555,561,567,573,578,584,590,599,611,630,657,697,754,789,795}; //adc values for every unit (mm) of linear travel //const uint16_t throttleCurvePerMM[] = {8485,8904,9177,9368,9513,9623,9705,9768,9823,9877,9932,9978,10032,10087,10169,10278,10451,10697,11061,11579,11898,11952}; //adc values for every unit (mm) of linear travel. config used until 20230826 const uint16_t throttleCurvePerMM_A[] = {11800,11130,10300,9990,9650,9470,9370,9240,9130,9030,8950,8850,8700,8560,8350,8040,7750,7150,6520}; //adc values for every unit (mm) of linear travel const bool throttleCurvePerMM_A_Descending=true; //set true if corresponding array is descending const uint16_t throttleCurvePerMM_B[] = {6200,6700,7420,7710,8030,8200,8310,8440,8560,8640,8740,8840,8990,9130,9330,9630,9900,10440,10990}; //adc values for every unit (mm) of linear travel const bool throttleCurvePerMM_B_Descending=false; //set true if corresponding array is descending #define PIN_BRAKE A8 const uint16_t calib_brake_min = 7000; //better a bit too high than too low const uint16_t calib_brake_max = 11000; const uint16_t failsafe_brake_min = 4000; //if adc value falls below this failsafe is triggered const uint16_t failsafe_brake_max = 14500; //if adc value goes above this failsafe is triggered const uint16_t calib_control_buttonA=7170; // adc value for button A pressed const uint16_t calib_control_buttonB=10402; // adc value for button B pressed const uint16_t calib_control_buttonAB=5595; // adc value for button A and B pressed const uint16_t calib_control_treshold=100; // from calibration value adc-thres to adc+thres const uint16_t calib_control_max=13000; //over which adc value button are both released uint16_t ads_throttle_A_raw=0; uint16_t ads_throttle_B_raw=0; uint16_t ads_brake_raw=failsafe_brake_min; uint16_t ads_control_raw=0; int16_t throttle_posA; //scaled and clamped throttle position for sensor A int16_t throttle_posB; //scaled and clamped throttle position for sensor B int16_t throttle_pos=0; //combined and filtered throttle position int16_t brake_pos=0; //filtered throttle position bool control_buttonA=false; bool control_buttonB=false; unsigned long loopmillis; unsigned long looptime_duration; #define ADSREADPERIOD 3 //set slightly higher as actual read time to avoid unnecessary register query #define ADCREADPERIOD 10 #define BUTTONREADPERIOD 20 unsigned long last_adsread=0; //needed for failcheck uint16_t throttle_rawA=failsafe_throttle_min_A; //start at min so that failsafe is not triggered uint16_t throttle_rawB=failsafe_throttle_min_B; //start at min so that failsafe is not triggered #define THROTTLE_ADC_FILTER 0.4 //higher value = faster response uint16_t brake_raw=failsafe_brake_min; //start at min so that failsafe is not triggered #define ADC_OUTOFRANGE_TIME 100 //for failsafe_throttle_min_X. how long values need to stay bad to trigger failsafe #define ADC_DIFFHIGH_TIME 500 //for failsafe_throttle_maxDiff. how long values need to stay bad to trigger failsafe bool error_throttle_outofrange=false; bool error_throttle_difftoohigh=false; bool error_brake_outofrange=false; bool error_ads_max_read_interval=false; bool error_sdfile_unavailable=false; #define REVERSE_ENABLE_TIME 1000 //ms. how long standstill to be able to drive backward #define NORMAL_MAX_ACCELERATION_RATE 10000 #define SLOW_MAX_ACCELERATION_RATE 500 int16_t max_acceleration_rate=NORMAL_MAX_ACCELERATION_RATE; //maximum cmd send increase per second //Driving parameters int16_t minimum_constant_cmd_reduce=1; //reduce cmd every loop by this constant amount when freewheeling/braking int16_t brake_cmdreduce_proportional=500; //cmd gets reduced by an amount proportional to brake position (ignores freewheeling). cmd_new-=brake_cmdreduce_proportional / second @ full brake. with BREAK_CMDREDUCE_CONSTANT=1000 car would stop with full brake at least after a second (ignoring influence of brake current control/freewheeling) float startbrakecurrent=2; //Ampere. "targeted brake current @full brake". at what point to start apply brake proportional to brake_pos. for everything above that cmd is reduced by freewheel_break_factor float startbrakecurrent_offset=0.13; //offset start point for breaking, because of reading fluctuations around 0A. set this slightly above idle current reading float freewheel_break_factor=500.0; //speed cmd units per amp per second. 1A over freewheel_current decreases cmd speed by this amount (on average) float reverse_speed=0.25; //reverse driving speed //0 to 1 int16_t throttle_max=1000; //maximum allowed set speed. used for scaling and limiting. [0,1000] bool reverse_enabled=false; unsigned long last_notidle=0; //not rolling to fast, no pedal pressed #define PIN_START A9 #define PIN_LED_START 2 //Enginge start led #define PIN_LATCH_ENABLE A6 #define PIN_MODE_LEDG 4 #define PIN_MODE_LEDR 5 #define PIN_FAN 6 //Output High=Fans on //unsigned long last_send = 0; //unsigned long last_receive = 0; float filtered_currentAll=0; //Statistics values float max_filtered_currentAll; float min_filtered_currentAll; float max_filtered_wattAll; float min_filtered_wattAll; float max_meanSpeed; float minSpeedms; //speed in m/s of slowest wheel double overallTrip; //m. trip with read distance from sd card double trip; //m. trip distance since boot double currentConsumed; double overallCurrentConsumed; double watthoursConsumed; double overallWatthoursConsumed; float lastTripVoltage=0; int16_t cmd_send=0; int16_t last_cmd_send=0; uint8_t speedmode=0; #define SPEEDMODE_SLOW 1 #define SPEEDMODE_NORMAL 0 unsigned long button_start_lastchange=0; bool button_start_state=false; #define LONG_PRESS_ARMING_TIME 2000 #define DEBOUNCE_TIME 50 bool armed = false; //cmd output values forced to 0 if false bool statswritten = true; #define CURRENT_FILTER_SIZE 60 //latency is about CURRENT_FILTER_SIZE/2*MEASURE_INTERVAL (measure interval is defined by hoverboard controller) #define CURRENT_MEANVALUECOUNT 20 //0<= meanvaluecount < CURRENT_FILTER_SIZE/2. how many values will be used from sorted weight array from the center region. abour double this values reading are used #define DISPLAYUPDATEPERIOD 100 #endif