Input & Input Manipulation Functions - Singhzing-kid1/Buff-Ducks GitHub Wiki

deadzone

int32_t deadzone(controller_analog_e_t valueY, controller_analog_e_t valueX){
    if ((master.get_analog(valueY) >= drivers[driverIndex].deadZoneLimit || master.get_analog(valueY) <= -drivers[driverIndex].deadZoneLimit) && master.get_analog(valueX) == 0){
        return master.get_analog(valueY);
    } else if ((master.get_analog(valueY) >= drivers[driverIndex].deadZoneLimit || master.get_analog(valueY) <= -drivers[driverIndex].deadZoneLimit) && master.get_analog(valueX) != 0){
        if(master.get_analog(valueY) < 0){
            if(-hypot((double)master.get_analog(valueX), (double)master.get_analog(valueY)) <= -drivers[driverIndex].deadZoneLimit){
                return (int32_t)-hypot((double)master.get_analog(valueX), (double)master.get_analog(valueY));
            }
        } else if(master.get_analog(valueY) > 0){
            if(hypot((double)master.get_analog(valueX), (double)master.get_analog(valueY)) >= drivers[driverIndex].deadZoneLimit){
                return (int32_t)hypot((double)master.get_analog(valueX), (double)master.get_analog(valueY));
            }
        }
    } else{
        return (int32_t)0;
    }
}

Simply put this takes the x and y axes from one of the analog sticks using the Pythagorean theorem to find out whether or not the analog stick is within a circular dead-zone of a radius set in config.cpp. If it is within this dead-zone it returns zero, and if it is outside the dead-zone it returns the hypotenuse of the triangle created from the x and y values of the joystick.

clamp

int32_t clamp(int32_t analogValue){
    if(abs(analogValue) >= drivers[driverIndex].clampLimit){
        if(analogValue < 0){
            return (int32_t)-drivers[driverIndex].clampLimit;
        } else if(analogValue > 0){
            return (int32_t)drivers[driverIndex].clampLimit;
        }
    } else{
        return analogValue;
    }
}

Checks if the input value is greater than a value set in config.cpp and if so it returns that value. Works for both negative and positive inputs.