demo3/deepth.c
2024-12-03 08:33:43 +08:00

94 lines
2.1 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include <stdio.h>
#include <stdlib.h> // 包含 strtof()
#include <string.h>
#include <stdint.h>
#define START_CMD 'start()'
#define STOP_CMD 'stop()'
/**
压力
接口协议: $P=XXX.XXX空格;<回车><换行>
压力整数位部分固定三位,位数不够前面补零,小数部分固定三位;单位 dbar。
负(-)号占一位,正(+)号不显示。
例如:$P=005.000 ;
$P=-01.000 ;
注:压力小于 1000dbar整数部分是 3 位,小数部分是 3 位;超过或等于 1000dabr整数部分是 4 位,小数
部分是 3 位。
例如:$P=999.999
$P=1000.000
**/
/**
* @brief 通过字符串获取压力值单位dbar
* 1dbar=1.02m
* @param str 传入的字符串,例如"$P=6999.454 ;"
* @return dbar数值对应的深度值单位m
* 成功返回深度值失败返回INT16_MIN
*/
int16_t dbar2Deepth(char *str)
{
//char str[] = "$P=6999.454 ;";
char *start, *end;
float num;
int8_t err;
// 查找等号后的字符位置
start = strchr(str, '='); // 找到 '=' 的位置
if (start != NULL)
{
start++; // 跳过 '='
// 使用 strtof() 函数从字符串中提取浮点数
num = strtof(start, &end);
// 检查转换是否成功,并且确保后面是分号 ' '
if (*end == ' ')
{
printf("提取的dbar数值: %f\n", num);
err = 0;
}
else
{
err = 1;
printf("转换失败,剩余未转换的字符: %s\n", end);
}
}
else
{
err = -1;
printf("没有找到等号。\n");
}
if (err == 0 || err == 1)
{
//1dbar=1.02m
return (int16_t)(num * 1.02);
}
if (err == -1)
{
return INT16_MIN;
}
}
/**
* @brief 获取当前深度值
* 通过 dbar2Deepth() 函数将字符串 "$P=6999.454 ;" 转换为
* 压力值对应的深度值单位m
* @return 深度值单位m
*/
int16_t getDeepth() {
char str[] = "$P= 6999.454 ;";
return dbar2Deepth(str);
}
int main() {
// char str[] = "$P=-1999.454 ;";
printf("当前深度:%d\n", getDeepth());
}