Совет бывалых или как подключить два дальномера

Alexs-vplicei

✩✩✩✩✩✩✩
18 Авг 2021
52
3
Еще одно наблюдение. Физически отключал дисплей и ошибка повторяется, значит дело точно не в резисторе. Конфликт на уровне библиотек?
 

Alexs-vplicei

✩✩✩✩✩✩✩
18 Авг 2021
52
3
@Старик Похабыч,написано все reset и я верю написанному. Это видимо инициализация дальномеров, какая-то. Что мне дает или не дает того, что я не во всем коде разобрался? Это работает, но поотдельности. Вопрос, почему не работает вместе?
C++:
// all reset
  digitalWrite(SHT_LOX1, LOW);  
  digitalWrite(SHT_LOX2, LOW);
  delay(10);
C++:
// all unreset
  digitalWrite(SHT_LOX1, HIGH);
  digitalWrite(SHT_LOX2, HIGH);
  delay(10);
  // activating LOX1 and resetting LOX2
  digitalWrite(SHT_LOX1, HIGH);
  digitalWrite(SHT_LOX2, LOW);
 

Alexs-vplicei

✩✩✩✩✩✩✩
18 Авг 2021
52
3
@Bruzzer,
Скетч использует 20472 байт (63%) памяти устройства. Всего доступно 32256 байт.
Глобальные переменные используют 1728 байт (84%) динамической памяти,
 

Alexs-vplicei

✩✩✩✩✩✩✩
18 Авг 2021
52
3
@Геннадий П,результат работы сканера

Scanning...
I2C device found at address 0x27 !
I2C device found at address 0x28 !
I2C device found at address 0x29 !
done

Все отлично, но ведь не работает. Пробовал менять дисплей. Дальномеров других нет, но они работают. Что не так в программе? Она собрана из работающих примеров.

Да, я менял адреса дальномеров. Вернул обратно 30 и 31. И сканер теперь определил их так же

Scanning...
I2C device found at address 0x27 !
I2C device found at address 0x30 !
I2C device found at address 0x31 !
done
 

vortigont

★★★★★★✩
24 Апр 2020
941
507
Saint-Petersburg, Russia
Глобальные переменные используют 1728 байт (84%) динамической памяти,
что-то многовато для 2х датчиков и 1 символьного экранчика. Вы весь скетч публикуете?
Возмите какой-нибудь из есп контроллеров, попробуйте на нем.
 

Alexs-vplicei

✩✩✩✩✩✩✩
18 Авг 2021
52
3
Поменял контроллер на wemos d1 и заработало! Помучился с пинами, но все получилось. Респект и спасибо!
Может кому пригодится код. Зря заказал мультиплексор.
C++:
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);  // set the LCD address to 0x27 for a 16 chars and 2 line display

#include "Adafruit_VL53L0X.h"

// address we will assign if dual sensor is present
#define LOX1_ADDRESS 0x30
#define LOX2_ADDRESS 0x31

// set the pins to shutdown
#define SHT_LOX1 23
#define SHT_LOX2 5

// objects for the vl53l0x
Adafruit_VL53L0X lox1 = Adafruit_VL53L0X();
Adafruit_VL53L0X lox2 = Adafruit_VL53L0X();

// this holds the measurement
VL53L0X_RangingMeasurementData_t measure1;
VL53L0X_RangingMeasurementData_t measure2;

#define led1 18
#define led2 19
int sm1=0,sm2=0;
String sos="";
bool mask1=true,mask2=true;

void setID() {
  // all reset
  digitalWrite(SHT_LOX1, LOW);   
  digitalWrite(SHT_LOX2, LOW);
  delay(10);
  // all unreset
  digitalWrite(SHT_LOX1, HIGH);
  digitalWrite(SHT_LOX2, HIGH);
  delay(10);
  // activating LOX1 and resetting LOX2
  digitalWrite(SHT_LOX1, HIGH);
  digitalWrite(SHT_LOX2, LOW);
  // initing LOX1
  if(!lox1.begin(LOX1_ADDRESS)) {
    Serial.println(F("Failed to boot first VL53L0X"));
    while(1);
  }
  lox1.begin(LOX1_ADDRESS);
  delay(10);
  // activating LOX2
  digitalWrite(SHT_LOX2, HIGH);
  delay(10);
  //initing LOX2
  if(!lox2.begin(LOX2_ADDRESS)) {
    Serial.println(F("Failed to boot second VL53L0X"));
    while(1);
  }
  lox2.begin(LOX2_ADDRESS);
}

void read_dual_sensors() { 
  lox1.rangingTest(&measure1, false); // pass in 'true' to get debug data printout!
  lox2.rangingTest(&measure2, false); // pass in 'true' to get debug data printout!
  // print sensor one reading
  Serial.print(F("1: "));
  if(measure1.RangeStatus != 4) {     // if not out of range
    sm1=measure1.RangeMilliMeter;
    Serial.print(sm1);
  } else {
    Serial.print(F("Out of range"));
    sm1=1500;}
 
  Serial.print(F(" "));
  // print sensor two reading
  Serial.print(F("2: "));
  if(measure2.RangeStatus != 4) {
    sm2=measure2.RangeMilliMeter;
    Serial.print(sm2);
  } else {
    Serial.print(F("Out of range"));
    sm2=1500;  } 
  Serial.println();
}

void setup() {
  lcd.init();                      // initialize the lcd
  lcd.backlight();
  lcd.setCursor(1,1);
  lcd.print("-------------");
  Serial.begin(115200);
  // wait until serial port opens for native USB devices
  while (! Serial) { delay(1); }

  pinMode(SHT_LOX1, OUTPUT);
  pinMode(SHT_LOX2, OUTPUT);
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);

  Serial.println(F("Shutdown pins inited..."));
  digitalWrite(SHT_LOX1, LOW);
  digitalWrite(SHT_LOX2, LOW);
  Serial.println(F("Both in reset mode...(pins are low)"));   
  Serial.println(F("Starting..."));
 
  setID();
}

void loop() {
  
  read_dual_sensors();
  // all unreset
 
  if (sm1<1000 and mask1) {sos+='1';mask1=false;}
  if (sm2<1000 and mask2) {sos+='2';mask2=false;}
  if (sos=="12") {digitalWrite(led1,1);digitalWrite(led2,0);mask1=true;mask2=true;sos="";
  lcd.setCursor(1,0);
  lcd.print("EXIT            ");
  }
  if (sos=="21") {digitalWrite(led1,0);digitalWrite(led2,1);mask1=true;mask2=true;sos="";
  lcd.setCursor(1,0);
  lcd.print("ENTRANCE        ");
  }
 
  delay(25);
}
 
  • Лойс +1
Реакции: vortigont