function v_updated = update_v3(time, v0, Z2_diff, Z3_diff, Z3, Z2, v3)
alpha_5 = -0.021637;
alpha_6 = 0.018593;
v_split = 53.784;
u5_max = 1;
u6_max = 1;
update_time_limit = 25;

global bias_v3;
global v3_time_before_next_update_is_allowed;
%%%%%%%%%%%%%%%%%%%%
if Z3_diff ~= 0
    if v3 < v_split
        if time >= v3_time_before_next_update_is_allowed
        bias_v3 = (Z2-u5_max)/alpha_5 + v_split - v0;
        v3_time_before_next_update_is_allowed = time + update_time_limit;
        end
    end
end
%%%%%%%%%%%%%%%%%%%%
if Z2_diff ~= 0
    if v3 > v_split
        if time >= v3_time_before_next_update_is_allowed
        bias_v3 = (Z3-u6_max)/alpha_6 + v_split - v0;
        v3_time_before_next_update_is_allowed = time + update_time_limit;
        end
    end
end
%%%%%%%%%%%%%%%%%%%%
v_updated = v0 + bias_v3;
end