예제 #1
0
파일: sonar.c 프로젝트: wmRosy/Flow
/**
  * @brief  Read out newest sonar data
  *
  * @param  sonar_value_filtered Filtered return value
  * @param  sonar_value_raw Raw return value
  */
bool sonar_read(float* sonar_value_filtered, float* sonar_value_raw)
{
	// check SR04 timeout
	if (sr04_initialized && trigger_time > 0 && get_boot_time_us() - trigger_time > SONAR_TIMEOUT)
	{
		printf("TIMEOUT\n");
		sonar_valid = false;
		trigger_time = 0;
	}
	
	if (private_sonar_initialized && timeout && isnan(distance))
	{
		sonar_valid = false;
	}
	
	/* getting new data with only around 10Hz */
	if (new_value) {
		sonar_filter();
		new_value = 0;
		sonar_measure_time = get_boot_time_us();
	}

	/* catch post-filter out of band values */
	if (x_post < SONAR_MIN || x_post > SONAR_MAX) {
		sonar_valid = false;
	}

	*sonar_value_filtered = x_post;
	*sonar_value_raw = sonar_raw;

	return sonar_valid;
}
예제 #2
0
/****************定高数据处理**************/
void AltHold_Data_Handling()
{
	float high=0;
	//获取滤波后的超声波高度	//ps :注意滤波后的相位不要太滞后		
	//判断声纳原始数据是否有效
	 sonar_valid=Sonar_Valid_Check(sonar_valid,&Ultra);  
	 high=sonar_filter(&sonar_valid,&Ultra)*100;//cm 
	 if(high==0)
	 {
	    sonar_valid=false;
	 }
	 else if(sonar_valid==true)
	 {
	   Ultra.z=high;
	 }


}
예제 #3
0
파일: sonar.c 프로젝트: MarkHarbison/Flow
/**
  * @brief  Read out newest sonar data
  *
  * @param  sonar_value_filtered Filtered return value
  * @param  sonar_value_raw Raw return value
  */
bool sonar_read(float* sonar_value_filtered, float* sonar_value_raw)
{
	/* getting new data with only around 10Hz */
	if (new_value) {
		sonar_filter();
		new_value = 0;
		sonar_measure_time = get_boot_time_us();
	}

	/* catch post-filter out of band values */
	if (x_post < SONAR_MIN || x_post > SONAR_MAX) {
		sonar_valid = false;
	}

	*sonar_value_filtered = x_post;
	*sonar_value_raw = sonar_raw;

	return sonar_valid;
}