Через 2 датчики с I2C в то же время в Ардуино Уно
Hello everyone. I need to implement 2 sensors using I2C in my Uno. The sensors are: MLX90614 (contactless temperature sensor) VL53L0X (TOF sensor) Both are connected in I2C bus in my Arduino Uno. The code for MLX90614 is:
<pre>#include <Wire.h> #include <Adafruit_MLX90614.h> Adafruit_MLX90614 mlx = Adafruit_MLX90614(); void setup() { Serial.begin(115200); mlx.begin(); } void loop() { Serial.print(mlx.readObjectTempC()); Serial.println(); delay(800); }
and the code for sensor VL53L0X is:
<pre>#include "Adafruit_VL53L0X.h" Adafruit_VL53L0X lox = Adafruit_VL53L0X(); void setup() { Serial.begin(115200); while (! Serial) { delay(1); } if (!lox.begin()) { Serial.println(F("Failed to boot VL53L0X")); while(1); } } void loop() { VL53L0X_RangingMeasurementData_t measure; lox.rangingTest(&measure, false); if (measure.RangeStatus != 4) { Serial.println(measure.RangeMilliMeter); } else { Serial.println(" out of range "); } delay(800); }
Both codes work separately, but when I try to join them, they did not work:
Что я уже пробовал:
<pre>#include "Adafruit_VL53L0X.h" #include <Adafruit_MLX90614.h> #include <Wire.h> Adafruit_VL53L0X lox = Adafruit_VL53L0X(); Adafruit_MLX90614 mlx = Adafruit_MLX90614(); void setup() { Serial.begin(115200); mlx.begin(); while (! Serial) { delay(1); } if (!lox.begin()) { Serial.println(F("Failed to boot VL53L0X")); while(1); } } void loop() { if (Serial.available()) { String ch; ch = Serial.readString(); ch.trim(); if(ch=="read_temperature") { Serial.print(mlx.readObjectTempC()); Serial.print("\n"); } if(ch=="read_distance") { VL53L0X_RangingMeasurementData_t measure; lox.rangingTest(&measure, false); if (measure.RangeStatus != 4) { Serial.println(measure.RangeMilliMeter); } } } }
Any ideas? Thanks.
Garth J Lancaster
"они не сработали:" - это двусмысленно, не так ли ? что вы имеете в виду под этим - не получили ли вы никакого результата на последовательном мониторе, или показания одного из датчиков, или? Улучшить вопрос чтобы обновить информацию и точно указать, что это значит.
Итак, я предполагаю, что датчики подключены правильно (параллельно) с точки зрения линий SDA, SCL с подтягивающим резистором между ними и A4 (SDA) и A5 (SCL) на UNO. Они оба имеют разные адреса I2C (MLX90614 = 0x5A, VL53LOX = 0x29) по умолчанию, поэтому, если вы не изменили адреса, это не так
Я вижу в вашем комбинированном коде настройки
void setup() { Serial.begin(115200); mlx.begin(); while (! Serial) { delay(1); } if (!lox.begin()) { Serial.println(F("Failed to boot VL53L0X")); while(1); } }не могли бы вы, пожалуйста, попробовать переместить MLX по.начать(); "вниз", значит
void setup() { Serial.begin(115200); while (! Serial) { delay(1); } mlx.begin(); if (!lox.begin()) { Serial.println(F("Failed to boot VL53L0X")); while(1); } }
Я бы также спросил, действительно ли вам это нужно.
if (Serial.available()) { }вокруг комбинированного кода считывания датчика, так как вы ждете, пока серийный номер будет доступен в коде настройки