помогите с протоколом

Robber
Offline
Зарегистрирован: 15.03.2018

Здраствуйте дорогие участники форума!!!

Не могли бы ВЫ помочь ну или обыяснить как реализовать устройство информацинного табло,я в программирование совсем новичек но хотелось бы сделать данное устройство, но не как не могу понять как сделать что ты при получения нужного байта данных выводилась та или инная цыфра.

Заранее СПАСИБО

 

вот данный протокол

Управление табло осуществляется пакетами различной длины. Контроль целостности пакетов и достоверность доставки не предусмотрены. Ответный пакет не предусмотрен. Байты значением до 0x20 используются только в служебных целях (начало и окончание пакета) и в теле пакета встречаться не могут. Формат пакета следующий:

Длина (байт)

Значение (hex)

Назначение

 

1

0x01

 

Признак начала пакета установки данных

 

1

0x20…0x7F

 

Адрес табло

 

1

0x20…0x7F

 

Режим мигания: 0x20 – не мигает; 0x21 – мигает постоянно; 0x22…0x7F – мигает (N-0x21) раз.

 

N

0x20…0x7F

 

Данные пакета для отображения на табло

 

1

0x07

 

Признак окончания пакета

 

 

Данные пакета передаются в виде ASCII-кодов тех символов, которые следует отобразить на табло. Например, для отображения символа «7» будет передано значение 0x37.

Green
Offline
Зарегистрирован: 01.10.2015

Пишите htpicc@gmail.com

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

Нужна только часть отвечающая за передачу данных ?

brokly(at)mail.ru 

 

Robber
Offline
Зарегистрирован: 15.03.2018

brokly пишет:

Нужна только часть отвечающая за передачу данных ?

brokly(at)mail.ru 

 

 

за прием информаци которая поступает с сервера

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

Как то так.

word counter=0;
const byte addr=0x20; // адрес этого табло 32
String msg=""; // тут будет текстовое сообщение 
byte blink=0; // тут будет признак мигания

void setup() {
  Serial.begin(9600); 
}

void loop() {
  while (Serial.available()) {
     byte in=Serial.read();
     if (in==0x01) {
        msg="";
        counter=0; 
     } else if (counter==0) {
        if (in==addr) {
          counter=1;     
        } else {
          counter=0xFFFF;
        }
     } else if (counter==1){
        blink=in;
        counter=2;
     } else if (counter==2) {
        if (in==0x07) {
           // ТУТ КОНЕЦ ПРИЕМА ПАКЕТА
           // все данные в соответствующих переменнных
        } else if (in>=' '){
           msg+=(char)in;
        } 
     }
  }

}

 

Robber
Offline
Зарегистрирован: 15.03.2018

спасибо вы меня выручили

 

Green
Offline
Зарегистрирован: 01.10.2015

Обычно, "спасибо мало!"?