传感技术
直播中

dql2016

9年用户 342经验值
擅长:模拟技术 测量仪表 嵌入式技术 处理器/DSP 测量仪表 嵌入式技术 模拟技术 处理器/DSP
私信 关注
[经验]

【罗姆传感器评估板试用体验连载】五、项目结项之读取全部传感器数据

将气压传感器评估板(BM1390GLV-EVK-001)、颜色传感器评估板(BH1749NUC-EVK-001)、温度传感器评估板(BH1900NUX-EVK-001)全部插到扩展板的iic接口上,根据不同的地址进行访问,读取数据。


arduino程序如下:



  1. #include
  2. #include
  3. #include
  4. #include
  5. #include "BH1900NUX.h"
  6. #include

  7. #define I2C_FREQUENCY   (400000)
  8. #define DIGIT_NUM       (4)

  9. int32_t meas_time;

  10. BH1749NUC bh1749nuc(BH1749NUC_DEVICE_ADDRESS_39);//颜色
  11. BH1900NUX bh1900(BH1900NUX_SLAVE_ADDRESS);//温度
  12. BM1390GLV bm1390glv;//气压


  13. void bm1390_error_func(int32_t result)
  14. {
  15.     uint8_t cnt;
  16.     switch (result) {
  17.         case BM1390GLV_COMM_ERROR:
  18.             (void)Serial.println("Communication Error.");
  19.             break;
  20.         case BM1390GLV_WAI_ERROR:
  21.             (void)Serial.println("ID Error.");
  22.             break;
  23.         default:
  24.             (void)Serial.println("Unknown Error.");
  25.             break;
  26.     }
  27.     (void)Serial.println("BM1390GLV Check System and Driver Parameter.");
  28.     cnt = 0;
  29.     while (1) {
  30.         (void)Serial.print(".");
  31.         if (cnt < 30) {
  32.             cnt++;
  33.         } else {
  34.             cnt = 0;
  35.             (void)Serial.println();
  36.         }
  37.         delay(1000);
  38.     }
  39.     return;
  40. }


  41. void bh1900_error_func(int32_t result)
  42. {
  43.     switch (result) {
  44.         case BH1900NUX_COMM_ERROR :
  45.             (void)Serial.println("BH1900NUX Communication Error.");
  46.             break;   
  47.         case BH1900NUX_WAI_ERROR :
  48.             (void)Serial.println("BH1900NUX Who am I Error.");
  49.             break;      
  50.         case BH1900NUX_PARAM_ERROR :
  51.             (void)Serial.println("BH1900NUX Parameter Error.");
  52.             break;      
  53.         default :
  54.             (void)Serial.println("BH1900NUX Unknown Error.");
  55.             break;
  56.     }
  57.     while (1) {
  58.         (void)Serial.println("BH1900NUX Check System.");
  59.         delay(1000);
  60.     }
  61.     return;
  62. }

  63. void bh1900_setup()
  64. {
  65.     int32_t result;   
  66.     meas_time = 0;     
  67.     (void)Serial.print("BH1900NUX Sample");
  68.     Wire.setClock(I2C_FREQUENCY);
  69.     result = bh1900.init();
  70.     if (result > 0) {
  71.         meas_time = result;
  72.     } else {
  73.         bh1900_error_func(result);
  74.     }   
  75.     result = bh1900.start();
  76.     if (result != BH1900NUX_RESULT_OK) {
  77.         bh1900_error_func(result);
  78.     }   
  79.     delay(meas_time);
  80.     return;
  81. }

  82. void bh1749_setup() {
  83.   byte rc;
  84.   rc = bh1749nuc.init();
  85.   if (rc != 0) {
  86.     Serial.println(F("BH1749NUC initialization failed"));
  87.     Serial.flush();
  88.   }
  89. }

  90. void bm1390_setup()
  91. {
  92.     int32_t result;
  93.     String  DriverVersion;
  94.     DriverVersion = bm1390glv.get_driver_version();
  95.     (void)Serial.print("BM1390GLV Driver Version : ");
  96.     (void)Serial.println(DriverVersion);
  97.     result = bm1390glv.init();
  98.     if (result == BM1390GLV_COMM_OK) {
  99.         (void)bm1390glv.start();
  100.     } else {
  101.         bm1390_error_func(result);
  102.     }
  103.     return;
  104. }

  105. void bh1749_loop() {
  106.   byte rc;
  107.   unsigned short color[5];
  108.   rc = bh1749nuc.get_val(color);
  109.   if (rc == 0) {
  110.     Serial.write("BH1749NUC (RED)    = ");
  111.     Serial.println(color[0]);
  112.     Serial.write("BH1749NUC (GREEN)  = ");
  113.     Serial.println(color[1]);
  114.     Serial.write("BH1749NUC (BLUE)   = ");
  115.     Serial.println(color[2]);
  116.     Serial.write("BH1749NUC (IR)     = ");
  117.     Serial.println(color[3]);
  118.     Serial.write("BH1749NUC (GREEN2) = ");
  119.     Serial.println(color[4]);
  120.   }
  121. }

  122. void bh1900_loop()
  123. {
  124.     int32_t result;
  125.     float   temp;
  126.     result = bh1900.get_val(&temp);
  127.     if (result == BH1900NUX_RESULT_OK) {
  128.         (void)Serial.print("BH1900NUX [TEMP(degree Celsius)] = ");
  129.         (void)Serial.println(temp, DIGIT_NUM);
  130.     }  
  131.     return;
  132. }

  133. void bm1390_loop()
  134. {
  135.     int32_t result;
  136.     float32 press, temp;
  137.     result = bm1390glv.get_val(&press, &temp);
  138.     if (result == BM1390GLV_COMM_OK) {
  139.         (void)Serial.write("Pressure(hPa):Temperature(degree Celsius) = ");
  140.         (void)Serial.print(press);
  141.         (void)Serial.write(", ");
  142.         (void)Serial.print(temp);
  143.         (void)Serial.println();
  144.     } else {
  145.         bm1390_error_func(result);
  146.     }
  147.     return;
  148. }

  149. void setup()
  150. {
  151.   Serial.begin(9600);
  152.   while (!Serial) {
  153.   }
  154.   Wire.begin();     
  155.   bh1900_setup();
  156.   bh1749_setup();
  157.   bm1390_setup();
  158. }

  159. void loop()
  160. {
  161.   bh1749_loop();
  162.   bh1900_loop();
  163.   bm1390_loop();
  164.   delay(1000);
  165. }

获取到3个传感器的数据后,就可以将它们打包按照一定的数据帧格式发送了,例如发送到串口透传lora、4g、wifi、蓝牙等模块,扩展很多功能。

lv_0_20220315201720(1)

更多回帖

发帖
×
20
完善资料,
赚取积分