MEMS.c 778 B

123456789101112131415161718192021222324252627282930313233343536
  1. #include "MEMS.h"
  2. #include "IIC.h"
  3. /**
  4. * @brief MEMS数字甲醛传感器IIC端口初始化
  5. * @param None
  6. * @retval None
  7. */
  8. void MEMS_CH2O_init(void)
  9. {
  10. IIC_init(); // iic延时计数400
  11. }
  12. /**
  13. * @brief 读取MEMS数字甲醛传感器检测浓度
  14. * @param None
  15. * @retval 返回读取到的数据 2字节 0-100ppm 正常<=2
  16. */
  17. uint16_t MEMS_CH2O_read(void)
  18. {
  19. uint8_t recHigh = 0,recLow = 0;
  20. IIC_start();
  21. IIC_send_byte(MEMS_CH2O_wrAddr); // slave address + write cmd
  22. if(IIC_wait_ack()) return 0xFFFF;
  23. IIC_send_byte(0xA1); // read cmd
  24. if(IIC_wait_ack()) return 0xFFFE;
  25. IIC_start();
  26. IIC_send_byte(MEMS_CH2O_rdAddr); // slave address + read cmd
  27. if(IIC_wait_ack()) return 0xFFFD;
  28. recHigh = IIC_read_byte(1);
  29. recLow = IIC_read_byte(0);
  30. IIC_stop();
  31. return (uint16_t)recHigh << 8 | recLow;
  32. }