Попытка подключить датчик 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|
Я новичок в этом и надеюсь, что это не глупый вопрос. Пусть
2 ответа
Вы, очевидно, не поняли, как это устройство взаимодействует через последовательный порт. Вы не просто бросаете ему «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 включительно, у вас есть фактический пакет и вы можете действовать с данными.
Последовательные контакты 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, но и к потере связи. Эта схема, приведенная ниже, является примером того, что вам понадобится. Есть готовые адаптерные платы, которые можно приобрести за несколько долларов.
- Лучший способ отправить логическое значение (1/0) в приложение Windows в режиме реального времени
- Как разделить входящую строку?
- Какова максимальная длина провода для последовательной связи между двумя Arduino?
- Что выбрать между датчиками температуры и влажности: AM230x или DHT22?
- Последовательная связь между двумя Arduino (запрос и получение)
- Не нашел датчик отпечатков пальцев :( Arduino Mega 2560 Adafruit Fingerprint Sensor
- Как управлять 4 двигателями постоянного тока с помощью Arduino?
- Модуль SIM808: команда определения местоположения GSM (AT+CIPGSMLOC=1,1) дает неверное значение после выполнения команды отправки сообщения (AT+CMGS=+91xxxxxxxx)
Кажется, я сейчас публикую эту ссылку по каждому другому вопросу: https://majko.co.uk/blog/reading-serial-arduino. Я не знаю, откуда люди берут такой плохой код для работы с серийным номером., @Majenko