#include "bflb_adc.h" #include "bflb_mtimer.h" #include "board.h" #define PRESS_MIN 20 #define PRESS_MAX 6000 #define VOLTAGE_MIN 150 #define VOLTAGE_MAX 3300 struct bflb_adc_channel_s chan[] = { { .pos_chan = ADC_CHANNEL_2, .neg_chan = ADC_CHANNEL_GND } }; u8 state = 0; u16 val = 0; u16 value_AD = 0; long PRESS_AO = 0; int VOLTAGE_AO = 0; long map(long x, long in_min, long in_max, long out_min, long out_max); int main(void) { bflb_platform_init(); bflb_adc_init(); bflb_adc_channel_config(chan, ARRAY_SIZE(chan)); bflb_adc_enable(); bflb_mtimer_init(); printf("Test start\n"); while (1) { bflb_adc_get_data(chan, ARRAY_SIZE(chan), &value_AD); VOLTAGE_AO = map(value_AD, 0, 4095, 0, 3300); if (VOLTAGE_AO < VOLTAGE_MIN) { PRESS_AO = 0; } else if (VOLTAGE_AO > VOLTAGE_MAX) { PRESS_AO = PRESS_MAX; } else { PRESS_AO = map(VOLTAGE_AO, VOLTAGE_MIN, VOLTAGE_MAX, PRESS_MIN, PRESS_MAX); } printf("AD value = %d, voltage = %d mV, pressure = %ld g\n", value_AD, VOLTAGE_AO, PRESS_AO); bflb_mdelay(500); } } long map(long x, long in_min, long in_max, long out_min, long out_max) { return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; }注释该代码
时间: 2023-06-17 11:05:36 浏览: 182
01.库表说明(旧版)1
这是一段使用芯片内置ADC模块读取压力传感器输出压缩值并转换为压力值的代码。主要包含以下步骤:
1. 包含需要的头文件:bflb_adc.h, bflb_mtimer.h, board.h
2. 定义压力和电压的最小最大值
3. 定义ADC通道结构体数组
4. 定义变量:状态state,采集到的AD值val,转换后的AD值value_AD,转换后的压力值PRESS_AO,转换后的电压值VOLTAGE_AO
5. 声明map函数,用于将输入的数值从一个范围映射到另一个范围
6. 在主函数中初始化平台、ADC模块、定时器,并进入循环
7. 在循环中,使用ADC模块采集压力传感器输出的AD值
8. 将采集到的AD值转换为电压值,并根据电压值计算出压力值
9. 打印采集到的AD值、电压值和压力值
10. 等待500毫秒后再次进入循环
注释中对每一行代码进行了简单的说明。
阅读全文