94 lines
2.1 KiB
C
94 lines
2.1 KiB
C
|
#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());
|
|||
|
}
|