testAdc.lua 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. --[[
  2. 8. Air8000内部ADC接口为12bits 外部直流分压为0-3.4V
  3. 9. Air8000内部具有2个ADC接口,ADC0 -- AIO3 ADC1 -- AIO4
  4. 10. 特殊通道, CPU内部温度Temp -- adc.CH_CPU 主供电脚电压 VBAT -- adc.CH_VBAT
  5. 11. 设置分压(adc.setRange)要在adc.open之前设置,否则无效!!
  6. ]]
  7. local testAdc = {}
  8. -- adc.setRange(adc.ADC_RANGE_1_2) -- 关闭分压
  9. adc.setRange(adc.ADC_RANGE_MAX) -- 启用分压
  10. local rtos_bsp = rtos.bsp()
  11. function adc_pin() -- 根据不同开发板,设置ADC编号
  12. log.info("main", "define ADC pin in main.lua")
  13. return 0,1,255,255, adc.CH_CPU ,adc.CH_VBAT
  14. end
  15. local adc_pin_0,adc_pin_1,adc_pin_2,adc_pin_3,adc_pin_temp,adc_pin_vbat=adc_pin()
  16. function testAdc.dotest()
  17. if adc_pin_0 and adc_pin_0 ~= 255 then adc.open(adc_pin_0) end
  18. if adc_pin_1 and adc_pin_1 ~= 255 then adc.open(adc_pin_1) end
  19. if adc_pin_2 and adc_pin_2 ~= 255 then adc.open(adc_pin_2) end
  20. if adc_pin_3 and adc_pin_3 ~= 255 then adc.open(adc_pin_3) end
  21. if adc_pin_temp and adc_pin_temp ~= 255 then adc.open(adc_pin_temp) end
  22. if adc_pin_vbat and adc_pin_vbat ~= 255 then adc.open(adc_pin_vbat) end
  23. -- 下面是循环打印, 接地不打印0也是正常现象
  24. -- ADC的精度都不会太高, 若需要高精度ADC, 建议额外添加adc芯片
  25. while true do
  26. if adc_pin_0 and adc_pin_0 ~= 255 then --adc0
  27. log.debug("adc", "adc" .. tostring(adc_pin_0), adc.read(adc_pin_0)) -- 若adc.get报nil, 改成adc.read
  28. end
  29. if adc_pin_1 and adc_pin_1 ~= 255 then --adc1
  30. log.debug("adc", "adc" .. tostring(adc_pin_1), adc.get(adc_pin_1))
  31. end
  32. if adc_pin_temp and adc_pin_temp ~= 255 then
  33. log.debug("adc", "CPU TEMP", adc.get(adc_pin_temp))
  34. end
  35. if adc_pin_vbat and adc_pin_vbat ~= 255 then
  36. log.debug("adc", "VBAT", adc.get(adc_pin_vbat))
  37. end
  38. sys.wait(1000)
  39. end
  40. -- 若不再读取, 可关掉adc, 降低功耗, 非必须
  41. if adc_pin_0 and adc_pin_0 ~= 255 then adc.close(adc_pin_0) end
  42. if adc_pin_1 and adc_pin_1 ~= 255 then adc.close(adc_pin_1) end
  43. if adc_pin_2 and adc_pin_2 ~= 255 then adc.close(adc_pin_2) end
  44. if adc_pin_3 and adc_pin_3 ~= 255 then adc.close(adc_pin_3) end
  45. if adc_pin_temp and adc_pin_temp ~= 255 then adc.close(adc_pin_temp) end
  46. if adc_pin_vbat and adc_pin_vbat ~= 255 then adc.close(adc_pin_vbat) end
  47. end
  48. return testAdc