Неправильные данные с Serial

dm55
Offline
Зарегистрирован: 24.10.2015

Здравствуйте. Помогите пожалуйста! Имеется Ардуино 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);
}

 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

dm55 пишет:
Принимает по 2 каналу код MODBUS ASCII. Передаем на ЖК. Идут коды B1, F6, D6 (HEX) на ЖК .

Ни один из этих кодов не входит в ASCII.

ASCII - 7-битный код.

Radjah
Offline
Зарегистрирован: 06.08.2014

Дык он в HEX выводит, а там можно хоть черта лысого так вывести.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Какая разница HEX, не HEX. Этот диапазон не входит в ASCII, значит там, где требуется ASCII, результат будет непрогнозируемым.

Radjah
Offline
Зарегистрирован: 06.08.2014

Ну он получил строку ":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 запихать пытается.

dm55
Offline
Зарегистрирован: 24.10.2015

На канал 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 вывод ардуино - включение передачи.