adc_vol_sample.c 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. /*
  2. * Copyright (c) 2006-2018, RT-Thread Development Team
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. *
  6. * Change Logs:
  7. * Date Author Notes
  8. * 2018-11-29 misonyo first implementation.
  9. */
  10. /*
  11. * 程序清单:这是一个 ADC 设备使用例程
  12. * 例程导出了 adc_sample 命令到控制终端
  13. * 命令调用格式:adc_sample
  14. * 程序功能:通过 ADC 设备采样电压值并转换为数值。
  15. */
  16. #include <rtthread.h>
  17. #include <rtdevice.h>
  18. #define ADC_DEV_NAME "adc1"
  19. #define ADC_DEV_CHANNEL 5
  20. static int adc_vol_sample(int argc, char *argv[])
  21. {
  22. rt_adc_device_t adc_dev;
  23. rt_uint32_t value, vol;
  24. rt_err_t ret = RT_EOK;
  25. /* 查找设备 */
  26. adc_dev = (rt_adc_device_t)rt_device_find(ADC_DEV_NAME);
  27. if (adc_dev == RT_NULL)
  28. {
  29. rt_kprintf("adc sample run failed! can't find %s device!\n", ADC_DEV_NAME);
  30. return RT_ERROR;
  31. }
  32. /* 使能设备 */
  33. ret = rt_adc_enable(adc_dev, ADC_DEV_CHANNEL);
  34. /* 读取数据 */
  35. value = rt_adc_read(adc_dev, ADC_DEV_CHANNEL);
  36. rt_kprintf("the value is :%d \n", value);
  37. /* 转换为对应电压值,3.3V对应12位最大值4096,数据精度乘以100保留2位小数 */
  38. vol = value * 330 / 4096;
  39. rt_kprintf("the voltage is :%d.%02d \n", vol / 100, vol % 100);
  40. /* 关闭设备 */
  41. ret = rt_adc_disable(adc_dev, ADC_DEV_CHANNEL);
  42. return ret;
  43. }
  44. /* 导出到 msh 命令列表中 */
  45. MSH_CMD_EXPORT(adc_vol_sample, adc voltage convert sample);