Чтение последовательного ввода Arduino
Я считываю ввод со своих весов Ohaus, используя его вывод RS232, используя этот код:
#define HWSERIAL Serial1
void setup() {
Serial.begin(9600);
HWSERIAL.begin(9600);
}
void loop() {
int incomingByte;
if (Serial.available() > 0) {
incomingByte = Serial.read();
Serial.print("USB received: ");
Serial.println(incomingByte, DEC);
//HWSERIAL.print("USB received:");
//HWSERIAL.println(incomingByte, DEC);
}
if (HWSERIAL.available() > 0) {
incomingByte = HWSERIAL.read();
Serial.print("UART received: ");
Serial.println(incomingByte);
//HWSERIAL.print("UART received:");
//HWSERIAL.println(incomingByte);
}
}
Нажимая кнопку печати на весах, я ожидал, что данные будут приходить одним пакетом только с показаниями, но я получаю ожидаемые данные, но весы продолжают отправлять данные впоследствии (ES снова и снова) . Мне нужно разобрать только то, что нужно. Ниже приведены выходные данные консоли на моем компьютере.
UART received:
UART received:
UART received:
UART received:
UART received: 0
UART received: .
UART received: 0
UART received: 0
UART received:
UART received:
UART received:
UART received:
UART received:
UART received:
UART received: ?
UART received: (This is a CR)
UART received: (This is a LF)
UART received:
UART received:
UART received:
UART received:
UART received: 0
UART received: .
UART received: 4
UART received: 0
UART received:
UART received:
UART received:
UART received:
UART received:
UART received:
UART received: ?
UART received: G
UART received:
UART received:
UART received: (CR)
UART received: (LF)
UART received: E
UART received: S
UART received: (CR)
UART received: (LF)
... (The ES loops over and over until the print button is pressed again)
0,00 — это текущее показание весов, а 0,40 — вес тары. Это все, что мне нужно, и я не могу понять, как это разобрать. Блоки имеют разную длину, так как мне извлечь необходимую информацию и игнорировать повторяющийся «ES»? Я не уверен на 100 %, правильно ли я это делаю?
Вывод в формате DEC
UART received: 32
UART received: 32
UART received: 32
UART received: 32
UART received: 48
UART received: 46
UART received: 48
UART received: 48
UART received: 32
UART received: 32
UART received: 32
UART received: 32
UART received: 32
UART received: 32
UART received: 63
UART received: 13
UART received: 10
UART received: 32
UART received: 32
UART received: 32
UART received: 32
UART received: 48
UART received: 46
UART received: 52
UART received: 48
UART received: 32
UART received: 32
UART received: 32
UART received: 32
UART received: 32
UART received: 32
UART received: 63
UART received: 71
UART received: 32
UART received: 32
UART received: 13
UART received: 10
UART received: 69
UART received: 83
UART received: 13
UART received: 10
UART received: 69
UART received: 83
...
@polyhedron, 👍1
Обсуждение1 ответ
Лучший ответ:
Из руководства: http://dmx.ohaus.com/WorkArea/showcontent.aspx?id=4294974226
Баланс вернет «ES» для неверных команд.
Убедитесь, что вы используете правильные последовательные параметры, что линия RX подключена правильно.
Спасибо, это определенно помогло. Я просто удалил линию TX из Arduino, так как не отправляю данные на весы., @polyhedron
- Подключите Arduino к LiDAR через RS-232
- Как использовать SPI на Arduino?
- Нажать клавишу Windows, используя «keyboard.press();»
- Как подключить вывод INT MPU 6050?
- Улучшенное циклическое переключение цветов RGB.
- Проблема с загрузкой моего скетча на Ардуино
- Ардуино для чтения с преобразователя RS232 в последовательный модуль TTL
- Отправка мультимедийных клавиш клавиатуры с помощью библиотеки клавиатур
Из руководства: http://dmx.ohaus.com/WorkArea/showcontent.aspx?id=4294974226 > Баланс вернет «ES» для недопустимых команд. Убедитесь, что вы используете правильные последовательные параметры, что линия RX подключена правильно., @jdwolf
Можете ли вы дать полный рабочий эскиз и вывод, который на самом деле из этого эскиза. Сделайте incomingByte целым числом и удалите приведение к char при печати. Распечатайте его как DEC или HEX, чтобы вы могли видеть количество символов, пробелов, переводов строки или других причудливых байтов., @Jot
Это настоящий сигнал RS-232? Что вы используете для преобразования его в сигнал уровня ttl? Если вы используете модуль, сообщите нам, какой модуль. Добавлю к вам вопрос о модели весов. Документ, упомянутый @jdwolf, показывает разные форматы для разных моделей. «г» — это единица измерения, а «?» нестабилен. Остальные должны вписаться в один из форматов. Я полагаю, что двухсимвольный «термин» - это cr lf., @Jot
Что ж, я попытался использовать Max 3232, но по какой-то причине весы не выдавали достаточного напряжения, чтобы вызвать отправку ttl, поэтому я подключил его напрямую к контакту 0 на leonardo, чтобы получить это показание и Я действительно получил вышеуказанные показания UART. Проблема заключалась в том, что 232 посылал ошибочные сигналы и вызывал проблемы. Я не понимаю, почему это сработало, потому что RS232 инвертирован из ttl, поэтому мое единственное предположение, что ohaus уже преобразует свой сигнал в ttl?, @polyhedron
Шум на вашей линии TX? Похоже, вы отправляете случайные данные, которые устройство не понимает., @tgunr
Я пытаюсь сделать почти то же самое с весами OHAUS Ranger 3000. Вы выяснили, какой сигнал поступает от OHAUS: 5 В TTL или 13 В RS232? Спасибо, @blaudp79