RA4M2通过ADC实现电压和内部温度测量,并可以通过LCD显示出来。如果将RA4M2通过串口与蓝牙模块通信,可以通过蓝牙透传方式将ADC测量数据发给手机,手机通过小程序或专用APP将数据展示出来。
对于蓝牙模块来说,在通过串口使用AT指令完成工作模式等基本配置后,可以无需进行蓝牙针对性编程,MCU可以串口直接将数据透传到手机。
先定义透传数据交换格式,方便MCU和手机传递ADC数据。
数据由16字节表示:
uint8_t four_ADC_UpdateCharData[16]
| 第一个四字节 | 第二个四字节 | 第三个四字节 | 第四个四字节 |
|---|---|---|---|
| 保留 | ADC采集电压 | 参考电压 | 内部温度 |
void formatSendData(uint32_t x,uint8_t pos)
{
uint8_t i;
a_ADC_UpdateCharData[0] = (x >> 24) & 0xFF; // 最高有效字节
a_ADC_UpdateCharData[1] = (x >> 16) & 0xFF;
a_ADC_UpdateCharData[2] = (x >> 8) & 0xFF;
a_ADC_UpdateCharData[3] = x & 0xFF; // 最低有效字节
for(i=0;i<4;i++)
{
four_ADC_UpdateCharData[pos*4+i]=a_ADC_UpdateCharData[i];
}
}
ADC采集
void read_adc_value(void)
{
uint16_t adc_data;
double a0;
int32_t cal127;
uint8_t buf[30]={0};
R_ADC_ScanStart(&g_adc4_ctrl);
while (!scan_complete_flag) //等待转换完成标志
{
;
}
scan_complete_flag = false; //重新清除标志位
formatSendData(3300,0);
//输入电压
R_ADC_Read(&g_adc4_ctrl, ADC_CHANNEL_4, &adc_data);
a0 = (double)(adc_data*3.3/4095);
cal127=a0*1000;
formatSendData(cal127,1);
sprintf((char*)buf,"%05.2f",a0);
GUI_WriteASCII_BIG(60,5,buf,VGA_WHITE,VGA_RED);
//参考电压
R_ADC_Read(&g_adc4_ctrl, ADC_CHANNEL_VOLT, &adc_data);
a0 = (double)(adc_data*3.3/4095);
cal127=a0*1000;
formatSendData(cal127,2);
sprintf((char*)buf,"%05.2f",a0);
GUI_WriteASCII_BIG(60,55,buf,VGA_WHITE,VGA_GREEN);
//内部温度
R_ADC_Read(&g_adc4_ctrl, ADC_CHANNEL_TEMPERATURE, &adc_data);
double temperature = ADCTEMP_AS_C(adc_data);
sprintf((char*)buf,"%05.2f",temperature);
cal127=1000*temperature;
formatSendData(cal127,3);
GUI_WriteASCII_BIG(60,105,buf,VGA_WHITE,VGA_BLUE);
for (int i = 0; i < 16; i++) {
printf("%c", four_ADC_UpdateCharData[i]); // %02X 表示2位十六进制,不足补零
}
printf("\r\n");
}
采集电压:R_ADC_Read(&g_adc4_ctrl, ADC_CHANNEL_4, &adc_data);
采集参考电压:R_ADC_Read(&g_adc4_ctrl, ADC_CHANNEL_VOLT, &adc_data);
采集内部温度:R_ADC_Read(&g_adc4_ctrl, ADC_CHANNEL_TEMPERATURE, &adc_data);
printf已经重定向串口,并且串口与蓝牙模块连接,通过以下程序将采集的数据输出到蓝牙模块:
for (int i = 0; i < 16; i++) {
printf("%c", four_ADC_UpdateCharData[i]); // %02X 表示2位十六进制,不足补零
}
printf("\r\n");
小程序实现略。思路是小程序扫描蓝牙设备,进行连接。连接成功后,自动获得所有蓝牙特征值,如果是透传notify特征值,则进行订阅。订阅完成后,在MCU每次发送透传数据后,手机会收到16字节交换数据,进行解析并在手机屏显示。



更多回帖