Неправильные данные с Serial
- Войдите на сайт для отправки комментариев
Вс, 15/11/2015 - 11:19
Здравствуйте. Помогите пожалуйста! Имеется Ардуино 2560 и LCD 16*2. Принимает по 2 каналу код MODBUS ASCII. Передаем на ЖК. Идут коды B1, F6, D6 (HEX) на ЖК . На канале 2 на мониторе порта хорошая пачка:
:010101100005E8
: начало пакета
01 адрес устройства
01 функция
и т д
Вместо символа ":" - B1
"0" - F6 или D6 (HEX) ???
Это начало программы , с остальным думаю разбирусь.
Код привожу:
#include <LiquidCrystal.h>
#include <Wire.h>
int ascI[17]; //Обозначаем массив
int Val; // и переменную
LiquidCrystal lcd(8, 9, 4, 5, 6, 7 );
void setup() {
Serial2.begin(38400, SERIAL_8N1);
Serial3.begin(38400, SERIAL_8N1);
Serial.begin(38400, SERIAL_8N1);
pinMode(2, OUTPUT); //Передача 2 канала
pinMode(3, OUTPUT); //Передача 3 канала
digitalWrite(2, LOW);
digitalWrite(3, LOW);
lcd.begin(16, 2);// LCD 16 на 2
}
void loop() {
if (Serial2.available() > 0 ) { //Что нибудь выхватываем
lcd.clear();
lcd.setCursor(0, 0);
Val = Serial2.read(); // Записываем в переменную
lcd.print (Val, HEX); // Печатаем на ЖК
}
digitalWrite(3, HIGH);
delay(1000);
Serial3.print(ascI[0]); // Передаем 1 символ
digitalWrite(3, LOW);
delay(1000);
}
Ни один из этих кодов не входит в ASCII.
ASCII - 7-битный код.
Дык он в HEX выводит, а там можно хоть черта лысого так вывести.
Какая разница HEX, не HEX. Этот диапазон не входит в ASCII, значит там, где требуется ASCII, результат будет непрогнозируемым.
Ну он получил строку ":010101100005E8" и выводит все байты как HEX.
Должно получиться что-то типа
3A 30 31 30 31 30 31 31 30 30 30 30 35 45 38
https://upload.wikimedia.org/wikipedia/commons/thumb/1/1b/ASCII-Table-wide.svg/2000px-ASCII-Table-wide.svg.png
Если говно с одной стороны записал, то говно с другой стороны и получает. Может там вообще RS232 в TTL запихать пытается.
На канал 2 приходит пачка:
3A 30 31 30 31 30 31 31 30 30 30 30 35 45 38 0D 0A (HEX)
которая соответствует символам:
:010101100005E8
Схема 2 и 3 канала собрана на MAX485, 2 и 3 вывод ардуино - включение передачи.