test.txt 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236
  1. #include <Arduino.h>
  2. #include <HCSR04.h>
  3. #include <SPI.h>
  4. #include <Wire.h>
  5. #include <ICM_20948.h>
  6. #include <Adafruit_Sensor.h>
  7. #include <Adafruit_BME280.h>
  8. #include "freertos/semphr.h"
  9. typedef struct
  10. {
  11. uint8_t data_ready;
  12. SemaphoreHandle_t mutex;
  13. } data_flag_t;
  14. // =====================================================
  15. // ULTRASONIC SENSORS
  16. // =====================================================
  17. UltraSonicDistanceSensor distanceSensor1(9, 10);
  18. UltraSonicDistanceSensor distanceSensor2(20, 21);
  19. UltraSonicDistanceSensor distanceSensor3(2, 1);
  20. // =====================================================
  21. // ICM-20948
  22. // =====================================================
  23. #define CS_PIN 8
  24. #define MISO_PIN 7
  25. #define SCLK_PIN 6
  26. #define MOSI_PIN 5
  27. #define AD0_VAL 1
  28. ICM_20948_SPI myICM;
  29. // =====================================================
  30. // BME280
  31. // =====================================================
  32. #define I2C0_SCL 4
  33. #define I2C0_SDA 3
  34. #define BME280_ADDR 0x76
  35. TwoWire I2CBus0(0);
  36. Adafruit_BME280 bme;
  37. // =====================================================
  38. // SETUP
  39. // =====================================================
  40. void setup()
  41. {
  42. Serial.begin(115200);
  43. delay(1000);
  44. Serial.println();
  45. Serial.println("================================");
  46. Serial.println(" START SENZOROV");
  47. Serial.println("================================");
  48. // ---------------------------------------------------
  49. // ICM-20948 SPI
  50. // ---------------------------------------------------
  51. Serial.println("Inicializujem ICM-20948...");
  52. SPI.begin(SCLK_PIN, MISO_PIN, MOSI_PIN);
  53. bool icmOK = false;
  54. while (!icmOK)
  55. {
  56. myICM.begin(CS_PIN, SPI);
  57. Serial.print("ICM-20948: ");
  58. Serial.println(myICM.statusString());
  59. if (myICM.status == ICM_20948_Stat_Ok)
  60. {
  61. icmOK = true;
  62. Serial.println("ICM-20948 OK!");
  63. }
  64. else
  65. {
  66. Serial.println("ICM-20948 chyba - skusam znova...");
  67. delay(1000);
  68. }
  69. }
  70. // ---------------------------------------------------
  71. // BME280 I2C
  72. // ---------------------------------------------------
  73. Serial.println();
  74. Serial.println("Inicializujem BME280...");
  75. I2CBus0.setPins(I2C0_SDA, I2C0_SCL);
  76. bool bmeOK = bme.begin(BME280_ADDR, &I2CBus0);
  77. if (bmeOK)
  78. {
  79. Serial.println("BME280 OK!");
  80. }
  81. else
  82. {
  83. Serial.println("BME280 CHYBA!");
  84. }
  85. }
  86. // =====================================================
  87. // LOOP
  88. // =====================================================
  89. void loop()
  90. {
  91. // ===================================================
  92. // ULTRASONIC
  93. // ===================================================
  94. float distance1 = distanceSensor1.measureDistanceCm();
  95. float distance2 = distanceSensor2.measureDistanceCm();
  96. float distance3 = distanceSensor3.measureDistanceCm();
  97. // ===================================================
  98. // ICM-20948
  99. // ===================================================
  100. if (myICM.dataReady())
  101. {
  102. myICM.getAGMT();
  103. }
  104. // ===================================================
  105. // BME280
  106. // ===================================================
  107. float temperatureBME = bme.readTemperature();
  108. float pressureBME = bme.readPressure() / 100.0F;
  109. float humidityBME = bme.readHumidity();
  110. // ===================================================
  111. // SERIAL OUTPUT
  112. // ===================================================
  113. Serial.println("--------------------------------");
  114. // Ultrasonic
  115. Serial.println("ULTRASONIC:");
  116. Serial.print("US1: ");
  117. Serial.print(distance1);
  118. Serial.println(" cm");
  119. Serial.print("US2: ");
  120. Serial.print(distance2);
  121. Serial.println(" cm");
  122. Serial.print("US3: ");
  123. Serial.print(distance3);
  124. Serial.println(" cm");
  125. // ICM-20948
  126. Serial.println();
  127. Serial.println("ICM-20948:");
  128. Serial.print("ACC [mg] X: ");
  129. Serial.print(myICM.accX());
  130. Serial.print(" Y: ");
  131. Serial.print(myICM.accY());
  132. Serial.print(" Z: ");
  133. Serial.println(myICM.accZ());
  134. Serial.print("GYR [DPS] X: ");
  135. Serial.print(myICM.gyrX());
  136. Serial.print(" Y: ");
  137. Serial.print(myICM.gyrY());
  138. Serial.print(" Z: ");
  139. Serial.println(myICM.gyrZ());
  140. Serial.print("MAG [uT] X: ");
  141. Serial.print(myICM.magX());
  142. Serial.print(" Y: ");
  143. Serial.print(myICM.magY());
  144. Serial.print(" Z: ");
  145. Serial.println(myICM.magZ());
  146. Serial.print("IMU TEMP: ");
  147. Serial.print(myICM.temp());
  148. Serial.println(" C");
  149. // BME280
  150. Serial.println();
  151. Serial.println("BME280:");
  152. Serial.print("Temperature: ");
  153. Serial.print(temperatureBME);
  154. Serial.println(" C");
  155. Serial.print("Pressure: ");
  156. Serial.print(pressureBME);
  157. Serial.println(" hPa");
  158. Serial.print("Humidity: ");
  159. Serial.print(humidityBME);
  160. Serial.println(" %");
  161. Serial.println("--------------------------------");
  162. delay(500);
  163. }