Датчики 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);
}
@Soul, 👍3
1 ответ
Во-первых: Почему вы включаете, объявляете и инициализируете объект tfmini библиотеки, если затем не используете его для считывания датчика?
Ваша проблема будет заключаться в том, что вы можете одновременно прослушивать только 1 программный интерфейс. Если вы прослушиваете первый интерфейс, а датчик на втором интерфейсе что-то отправляет, вы пропустите эти данные.
Я предлагаю вам переключить Uno на плату с большим количеством аппаратных последовательных интерфейсов (которые работают через аппаратное обеспечение, поэтому могут работать параллельно). Например, Arduino Mega имеет в общей сложности 4 аппаратных последовательных интерфейса.
Хотя вам может сойти с рук Uno при работе с внешним режимом запуска. В библиотеке TFmini есть пример с именем SingleReading
. Он устанавливает режим singlescan
в setup()
. Затем он выдает внешний триггер, а затем считывает показания датчика. Я предлагаю попробовать следующее: в своем коде вы инициируете все 3 объекта TFmini с соответствующим объектом SoftwareSerial. Затем в
цикле()
вы проходите через эти 3 элемента, сначала вызывая функцию listen()
для соответствующего объекта SoftwareSerial. Затем вы запускаете внешний триггер для соответствующего
объекта TFmini и считываете с него данные. Затем вы переходите к следующему
интерфейсу SoftwareSerial и вызываете
на нем функцию listen() и так далее. Идея заключается в том, что с помощью внешнего триггера вы можете контролировать, когда вы получите действительный фрейм данных. Я не уверен, будет ли датчик также отправлять некоторые данные между триггерами, но эти данные должны быть просто отброшены без каких-либо проблем.
Примечание: Я не могу проверить эту идею, потому что у меня нет соответствующего оборудования. Вам придется проверить это самому.
- Использование YS-IRTM с Arduino Uno
- Как преобразовать значения RGB в интенсивность
- Как считать показания датчика звука и включить датчик с датчиком воды, если показания выше порогового значения и при обнаружении воды в течение 2 минут?
- Как отправить сообщение на мой телефон, что моя система Arduino включена при включении моего Arduino
- (Код ультразвукового датчика: такого файла или каталога нет)
- Несколько неблокирующих таймеров обратного отсчета?
- Датчик HC-SR505 PIR выдает только HIGH уровень
- Как изменить переменную при нажатии кнопки, подключенной к контакту 2
Я действительно пытался использовать Мега, но у меня не сработал даже один датчик ., @Soul
@Soul Тогда ты, должно быть, сделал что-то еще не так. Вы не показали свой код для Мега, поэтому я не могу сказать, в чем там проблема. Но, конечно, вы можете попробовать режим внешнего триггера с Uno, как описано выше, @chrisl
В основном я использовал какой-то код ., @Soul
@Soul Тогда это твоя проблема. Вы **не можете** слушать несколько
SoftwareSerial
одновременно, как описано выше. Вам нужно изменить код для Mega, чтобы вы использовали аппаратные последовательные интерфейсыSerial1
кSerial4
и подключили TFMinis к соответствующим контактам, @chrisl