sensor_handle.c 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. #include "sensor_handle.h"
  2. #include "modbus_handle.h"
  3. //#include <gpiod.h>
  4. #define ANDERSON_temp1 0x0400
  5. #define ANDERSON_temp2 0x0401
  6. /// @brief 获取温湿度值
  7. /// @param manger
  8. /// @param saddr
  9. /// @param temp
  10. /// @param humi
  11. /// @return
  12. int _g_sensor_get_temperature_value(void* manger,int saddr,float* temp,float* humi)
  13. {
  14. int ret = 0 ;
  15. unsigned short data_temp[2] = {0};
  16. ret = g_modbus_read_x_reg(manger,saddr,0,2,data_temp);
  17. if(ret<=0)
  18. return -1 ;
  19. //解算湿度值
  20. *humi = data_temp[0]/10.0 ;
  21. //解算温度值
  22. *temp = data_temp[1]/10.0 ;
  23. return 0;
  24. }
  25. int _g_sensor_get_temperature_value_ANDERSON(void* manger,int saddr,float* temp,float* humi)
  26. {
  27. int ret = 0 ;
  28. unsigned short data_temp[2] = {0};
  29. ret = g_modbus_read_input_reg(manger,saddr,0,2,data_temp);
  30. if (ret <= 0)
  31. {
  32. return -1;
  33. }
  34. //解算湿度值
  35. *humi = data_temp[1]/10.0 ;
  36. //解算温度值
  37. *temp = data_temp[0]/10.0 ;
  38. return 0;
  39. }
  40. int _g_sensor_get_D_temperature_value_ANDERSON(void* manger,int saddr,float* temp1,float* temp2)
  41. {
  42. int ret = 0 ;
  43. unsigned short data_temp[1] = {0};
  44. ret = g_modbus_read_input_reg(manger,saddr,ANDERSON_temp1,1,data_temp);
  45. if (ret <= 0)
  46. {
  47. return -1;
  48. }
  49. //解算湿度值
  50. *temp1 = data_temp[0]/10.0 ;
  51. ret = g_modbus_read_input_reg(manger,saddr,ANDERSON_temp2,1,data_temp);
  52. if (ret <= 0)
  53. {
  54. return -1;
  55. }
  56. //解算温度值
  57. *temp2 = data_temp[0]/10.0 ;
  58. return 0;
  59. }
  60. /// @brief 获取IO状态
  61. /// @param saadr
  62. /// @param sts
  63. /// @return
  64. int _gsensor_get_io_status(int saddr,unsigned char* sts)
  65. {
  66. int val;
  67. struct gpiod_line *line;
  68. //获取系统IO状态
  69. int ret = 0 ;
  70. //获取GPIO引脚的值
  71. //val = gpiod_line_get_value(line);
  72. return 0;
  73. }
  74. /// @brief 设置IO输出状态
  75. /// @param saadr
  76. /// @param sts
  77. /// @return
  78. int _gsensor_set_io_status(int saddr,unsigned char sts)
  79. {
  80. int val;
  81. return 0;
  82. }
  83. // int _gsensor_io_init(char* port_name,int saddr)
  84. // {
  85. // int val;
  86. // struct gpiod_chip *chip;
  87. // struct gpiod_line *line;
  88. // chip = gpiod_chip_open_by_number(0); // 0是设备编号,根据实际情况修改
  89. // line = gpiod_chip_get_line(chip, X); // 替换X为引脚编号
  90. // //设置GPIO引脚的方向
  91. // gpiod_line_request_output(line, "gpio-example", GPIOD_LINE_ACTIVE_STATE_HIGH);
  92. // //设置GPIO引脚的值
  93. // gpiod_line_set_value(line, 1); // 设置为高电平
  94. // //读取GPIO引脚的值
  95. // val = gpiod_line_get_value(line);
  96. // printf("GPIO value: %d\n", val);
  97. // // 关闭GPIO设备
  98. // gpiod_line_release(line);
  99. // gpiod_chip_close(chip);
  100. // }