Example #1
0
static void read_distance(void) {
	float previous = state->distance;
	float read = ultrasonic.get_distance();
	if(read > state->config.can_height) {
		read = state->config.can_height;
	}
	if(read < 0) return;
	float delta = previous - read;
	if(delta > 10 || delta < -10) {
		if(state->distance_change++ == 5) {
			state->distance_change = 0;
			state->distance = read;
			state->level = (state->config.can_height - read) / state->config.can_height * 100;
		} else {
			read = previous - (delta * state->distance_change / 5);
			state->distance = read;
			state->level = (state->config.can_height - read) / state->config.can_height * 100;
		}
	} else {
		state->distance_change = 0;
		state->distance = read;
		state->level = (state->config.can_height - read) / state->config.can_height * 100;
	}
}