Jonas Kessinger Ответов: 0

Через 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())
{
}
вокруг комбинированного кода считывания датчика, так как вы ждете, пока серийный номер будет доступен в коде настройки

0 Ответов