Датчики TFmini с Arduino

У меня есть три датчика TFmini, и мне нужно, чтобы все они были обнаружены. У меня на работе только один , контакт 4,5 . Моя информация в области кодирования является базовой . Я действительно ценю вашу помощь . Заранее спасибо.

Я думаю, что проблема в библиотеке, которую я не могу добавить TFMini_1.

Вот мой код,

#include <SoftwareSerial.h>
#include "TFMini.h"
TFMini tfmini;
TFMini tfmini1;



//Declaring variables and constants
TFMini TFFront;
TFMini TFRight;
TFMini TFLeft;
SoftwareSerial SerialTFMini (4,5);    //(RX, TX)
SoftwareSerial SerialTFMini_1 (6,7);    //(RX, TX)
SoftwareSerial SerialTFMini_2(8,9);     //(RX, TX)


void getTFminiData(int* distance, int* strength) {
  static char i = 0;
  char j = 0;
  int checksum = 0; 
  static int rx[9];
  if(SerialTFMini.available())
    


  {  
    // Serial.println( "tfmini serial available" );
    rx[i] = SerialTFMini.read();
   
    if(rx[0] != 0x59) {
      i = 0;
    } else if(i == 1 && rx[1] != 0x59) {
      i = 0;
    } else if(i == 8) {
      for(j = 0; j < 8; j++) {
        checksum += rx[j];
      }
      if(rx[8] == (checksum % 256)) {
        *distance = rx[2] + rx[3] * 256;
        *strength = rx[4] + rx[5] * 256;
      }
      i = 0;
    } else 
    {
      i++;
    } 
  }  
}

       //Threshold distance in "cm"; speak only when any object is nearer than this distance

void setup() 
{

  //Initializing Baud Rates
  Serial.begin (115200);
  while(!Serial);                     //Wait for USB Serial Port to connect
  Serial.println("Initializing...");
  SerialTFMini.begin (TFMINI_BAUDRATE);
  
  
  

  //Initializing TFMini Sensors
tfmini.begin(&SerialTFMini);     
}

void loop() 
{ 
   int distance = 0;
  int strength = 0;

  getTFminiData(&distance, &strength);
  while(!distance) {
    getTFminiData(&distance, &strength);
    if(distance) {
      Serial.print(distance);
      Serial.print("cm\t");
      Serial.print("strength: ");
      Serial.println(strength);
    }
   }

delay(100);

}

, 👍3


1 ответ


0

Во-первых: Почему вы включаете, объявляете и инициализируете объект tfmini библиотеки, если затем не используете его для считывания датчика?

Ваша проблема будет заключаться в том, что вы можете одновременно прослушивать только 1 программный интерфейс. Если вы прослушиваете первый интерфейс, а датчик на втором интерфейсе что-то отправляет, вы пропустите эти данные.

Я предлагаю вам переключить Uno на плату с большим количеством аппаратных последовательных интерфейсов (которые работают через аппаратное обеспечение, поэтому могут работать параллельно). Например, Arduino Mega имеет в общей сложности 4 аппаратных последовательных интерфейса.

Хотя вам может сойти с рук Uno при работе с внешним режимом запуска. В библиотеке TFmini есть пример с именем SingleReading. Он устанавливает режим singlescan в setup(). Затем он выдает внешний триггер, а затем считывает показания датчика. Я предлагаю попробовать следующее: в своем коде вы инициируете все 3 объекта TFmini с соответствующим объектом SoftwareSerial. Затем в цикле() вы проходите через эти 3 элемента, сначала вызывая функцию listen() для соответствующего объекта SoftwareSerial. Затем вы запускаете внешний триггер для соответствующего объекта TFmini и считываете с него данные. Затем вы переходите к следующему интерфейсу SoftwareSerial и вызываете на нем функцию listen() и так далее. Идея заключается в том, что с помощью внешнего триггера вы можете контролировать, когда вы получите действительный фрейм данных. Я не уверен, будет ли датчик также отправлять некоторые данные между триггерами, но эти данные должны быть просто отброшены без каких-либо проблем.

Примечание: Я не могу проверить эту идею, потому что у меня нет соответствующего оборудования. Вам придется проверить это самому.

,

Я действительно пытался использовать Мега, но у меня не сработал даже один датчик ., @Soul

@Soul Тогда ты, должно быть, сделал что-то еще не так. Вы не показали свой код для Мега, поэтому я не могу сказать, в чем там проблема. Но, конечно, вы можете попробовать режим внешнего триггера с Uno, как описано выше, @chrisl

В основном я использовал какой-то код ., @Soul

@Soul Тогда это твоя проблема. Вы **не можете** слушать несколько SoftwareSerial одновременно, как описано выше. Вам нужно изменить код для Mega, чтобы вы использовали аппаратные последовательные интерфейсы Serial1 к Serial4 и подключили TFMinis к соответствующим контактам, @chrisl