Попытка подключить датчик FT к Arduino Mega с помощью RX TX

Я пытаюсь подключить этот датчик, https://www.robotous.com/forcetorquesensor (RTF60-HA01-C ), с помощью Arduino Mega. Датчик имеет входное напряжение 5 В и обменивается данными через CAN/RS232/RS422. Я использую RS232, правильно подключил провода и попытался установить последовательную связь, используя приведенный ниже код.

#include<String.h>
# define BuffSize 32

byte buff[BuffSize];
unsigned char data_field[16];
byte comm[11]  = {0x55, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xAA};
// SOP == 0x55, EOP == 0xAA, Checksum == суммирование всех данных в data_field
void setup() {

  // поместите сюда свой код установки для однократного запуска:
  Serial.begin(115200);
  Serial2.begin(115200);
  for (int i = 0; i < BuffSize; i++) {
    buff[i] = 13; //Номер для инициализации буфера
  }

}

  void loop() {
    // поместите сюда свой основной код для многократного запуска:

     Serial2.write(comm, 11);
    //Serial.println(Serial2.available());
    if (Serial2.available() > 0) {
      //int read = Serial2.readBytes(buff, BuffSize);
        String output = "";
        for(int i=0;i<BuffSize;i++){
        buff[i]=Serial2.read();
        output = output + buff[i] + "|";
     }
  //Serial.println(чтение);
    Serial.flush();

    Serial.println(output);
    Serial.println();

    }
  }

В результате я получаю только 0 и иногда 10. Как показано ниже

0|0|0|0|0|0|0|0|10|0|0|0|0|0|0|0|0|10|0|0|0|0|0|0|0|0|10|255|255|255|255|255|

Я новичок в этом и надеюсь, что это не глупый вопрос. Пусть

, 👍0

Обсуждение

Кажется, я сейчас публикую эту ссылку по каждому другому вопросу: https://majko.co.uk/blog/reading-serial-arduino. Я не знаю, откуда люди берут такой плохой код для работы с серийным номером., @Majenko


2 ответа


0

Вы, очевидно, не поняли, как это устройство взаимодействует через последовательный порт. Вы не просто бросаете ему «11», чтобы он заработал — вы должны создать правильный командный пакет и отправить его, а затем устройство начинает отвечать ответными пакетами, которые вы должны правильно проанализировать.

Пакет команды начинается с 0x55, затем следует команда и данные (всего 8 байт), затем контрольная сумма и байт EOP (0xAA).

Например:

0x55, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0B, 0xAA

При чтении вы не ищете "хотя бы один байт", а затем пытаетесь прочитать 32 байта. Это просто никогда не сработает. Вам нужно дождаться прибытия 0x55, затем дождаться прибытия каждого из 16 следующих байтов команды и данных, по одному за раз (они НЕ приходят все сразу!), и сохранить их - затем вычислить контрольную сумму для этих байтов команды и данных, прочитать следующий байт и убедиться, что он соответствует контрольной сумме. Наконец, подтвердите, что у вас правильный пакет, прочитав байт EOP 0xAA.

В идеале вы хотите реализовать алгоритм скользящего окна, в котором у вас есть массив из 19 байтов, и входящие байты фильтруются от одного конца массива к другому. Когда первый байт равен 0x55, а последний байт равен 0xAA, а предпоследний байт равен (усеченной) сумме байтов от 2 до 17 включительно, у вас есть фактический пакет и вы можете действовать с данными.

,

1

Последовательные контакты RX и TX Arduino несовместимы с RS-232 без использования какой-либо схемы, обеспечивающей правильные уровни напряжения.

**RS-232 logic and voltage levels**
0 (space)   Asserted    +3 to +15 V
1 (mark)    Deasserted  −15 to −3 V 

Подключение контактов RX/TX Arduino непосредственно к устройству RS-232 может не только привести к сбою в работе Arduino, но и к потере связи. Эта схема, приведенная ниже, является примером того, что вам понадобится. Есть готовые адаптерные платы, которые можно приобрести за несколько долларов.

,