#26 2025-03-16 00:25:17

dimich
Учасник
Зареєстрований: 2023-12-01
Повідомлень: 316

Re: Допомога з конвертацією float в HEX

jokeer пише:

ReadSerial виглядає по наркоманськи wink

Та там весь код наркоманський.
Навіщо аж три таймера з однаковим інтервалом?

В ReadSerial()

      if (Buffer[0] == 0X5A & Buffer[3] == 0X83) {
          if (Buffer[4] == 0X50) {           

виконується навіть коли прочитано лише 1 байт, а в Buffer[3] і Buffer[4] може бути хто зна шо.

Точніше, в Buffer[3] і Buffer[4] значення ніколи і не записуються, бо як тільки прочитано один байт, Buffer_Len скидається в нуль.

І хіба дисплей відповідає такими ж командами, якими сам керується? Я в документацію не вчитувався, але це було би дуже дивно. Зазвичай керуючий пристрій видає команду на читання, потім зчитує результат.

Взагалі, якщо Serial читається побайтно, навіщо зайвий раз перевіряти available()?

Це:

if (Buffer[0] == 0X5A & Buffer[3] == 0X83)

з логічної точки зору працюватиме, але семантично мабуть малось на увазі

if (Buffer[0] == 0X5A && Buffer[3] == 0X83)

Активний

#27 2025-03-16 00:46:23

jokeer
Гість

Re: Допомога з конвертацією float в HEX

я б порадив підключити дисплей до software serial, а в Serial виводити якийсь debug. І переписати згідно з тим, як воно повинно працювати. копіпаста кусків коду то погано . складно зрозуміти що там відбувається.

#28 2025-03-18 16:10:50

Primaangel88
Учасник
Зареєстрований: 2025-03-13
Повідомлень: 15

Re: Допомога з конвертацією float в HEX

Доброго дня, панове!
зробив так я ви радили. пишу код сам. Але якась херня виходить повна

посадив дисплей на softserial.
написав ось це:

if (dwinSerial.available()){
    Buffer[l]=dwinSerial.read();
    l++;
    bufflag=true;
     }
     
 if (bufflag && Buffer[0] == 0X5A && Buffer[3] == 0X83 && Buffer[4]==0X50){


  Serial.println();
            Serial.print(Buffer[0], HEX);
            Serial.print(Buffer[1], HEX);
            Serial.print(Buffer[2], HEX);
            Serial.print(Buffer[3], HEX);
            Serial.print(Buffer[4], HEX);
            Serial.print(Buffer[5], HEX);
            Serial.print(Buffer[6], HEX);
            Serial.print(Buffer[7], HEX);
            Serial.print(Buffer[8], HEX);
       
            
    l=0;
  bufflag=!bufflag;
 }

при натисканні будь якої кнопки на дисплеї отримую:
5A A 66 83 5000 0 0 0
а повинен отримати: 5A A5 06 83 50 00 01 00 01 (перша кнопка натиснута)
і скільки б я не натискав кнопки скетч чомусь не видає нічого.

Остання редакція Primaangel88 (2025-03-18 16:14:03)

Неактивний

#29 2025-03-18 16:21:34

Primaangel88
Учасник
Зареєстрований: 2025-03-13
Повідомлень: 15

Re: Допомога з конвертацією float в HEX

виправив

if(bufflag && l>=20){
 if (bufflag && Buffer[0] == 0X5A && Buffer[3] == 0X83 && Buffer[4]==0X50){


  Serial.println();
            Serial.print(Buffer[0], HEX);
            Serial.print(Buffer[1], HEX);
            Serial.print(Buffer[2], HEX);
            Serial.print(Buffer[3], HEX);
            Serial.print(Buffer[4], HEX);
            Serial.print(Buffer[5], HEX);
            Serial.print(Buffer[6], HEX);
            Serial.print(Buffer[7], HEX);
            Serial.print(Buffer[8], HEX);
       
 }      
    l=0;
  bufflag=!bufflag;
 }

тепер читає але не кожен раз. треба задовбат кнопку натисканням і тільки разу з 10 спрацьовує

нижче те що в серіал піля 30-40 натискань:
5AA5683500104
5AA5683500107
5AA5683500107
5AA5683500103
5AA5683500106

від одного до 7 стани реле. комбінація 3 реле.

Остання редакція Primaangel88 (2025-03-18 16:26:00)

Неактивний

#30 2025-03-18 17:30:51

dimich
Учасник
Зареєстрований: 2023-12-01
Повідомлень: 316

Re: Допомога з конвертацією float в HEX

Primaangel88 пише:

Але якась херня виходить повна

Так завжди виходить, коли код пишеться одразу, без чіткого розуміння що він має робити, та без попередньої розробки алгоритму (на папері з олівцем, так).

Primaangel88 пише:

при натисканні будь якої кнопки на дисплеї отримую:
5A A 66 83 5000 0 0 0

Ну, значення Buffer[0], Buffer[3] та Buffer[4] відповідають тим, на які перевіряєте. Що не так?

Primaangel88 пише:

а повинен отримати: 5A A5 06 83 50 00 01 00 01 (перша кнопка натиснута)

Ви впевнені, що саме таку послідовність має видавати дисплей? Це десь зазначено в описі протоколу?

Primaangel88 пише:
if(bufflag && l>=20){
 if (bufflag && Buffer[0] == 0X5A && Buffer[3] == 0X83 && Buffer[4]==0X50){
 }

тепер читає але не кожен раз. треба задовбат кнопку натисканням і тільки разу з 10 спрацьовує

Так умова спрацьовує тільки коли набереться 20 байт ТА байти у певних позиціях мають певні значення.

Для початку сформулюйте словами, що конкретно має робити код? Знаходити певну послідовність байтів у вхідному потоці з послідовного порта?

Primaangel88 пише:
            Serial.print(Buffer[0], HEX);
            Serial.print(Buffer[1], HEX);
            Serial.print(Buffer[2], HEX);
            Serial.print(Buffer[3], HEX);
            Serial.print(Buffer[4], HEX);
            Serial.print(Buffer[5], HEX);
            Serial.print(Buffer[6], HEX);
            Serial.print(Buffer[7], HEX);
            Serial.print(Buffer[8], HEX);

Тут же всі символи зливатимуться, "1 23" не відрізнити від "12 3".

for (auto i : Buffer) {
    Serial.print(i, HEX);
    Serial.print(' ');
}

Або, з лідируючими нулями:

for (auto i : Buffer) {
  char s[4];
  snprintf(s, sizeof(s), "%02x ", i);
  Serial.print(s);
}

Взагалі, якщо вся комунікація з дисплеєм іде по послідовному порту, а чіткого опису протоколу немає, я би для початку підʼєднав би його до компа і відлагодив комунікацію у програмі для компа, без всяких ардуін. На будь якій мові, яку знаєте, хоч C#, хоч Python, чи що інше. Потім би уже портував на ардуіну.

Остання редакція dimich (2025-03-18 17:33:34)

Активний

#31 2025-03-18 17:39:37

jokeer
Гість

Re: Допомога з конвертацією float в HEX

коли я бачу змінні buffer і flag, в мене трохи глазік смикається;)
спробуйте пояснити, що за комунікація повинна відбуватися.
Так то дисплей з контроллером спілкуються, півділа зроблено.

#32 2025-03-18 18:08:50

Primaangel88
Учасник
Зареєстрований: 2025-03-13
Повідомлень: 15

Re: Допомога з конвертацією float в HEX

Ура!!! запрацювало....
коли скоротив до 9 символів масив.
алгоритм роботи такий.
поки ми не чіпаємо дисплей нічого не передається.
коли дисплей відпрацював натискання кнопки він посилає наступні данні в порт:
5A A5 06 83 50 00 01 00 01

5А А5 маска
06 довжина передачі в байтах починаючи з наступного після цього тобто (6)
83 команда читання данних з RAM памяті, я так зрозумів так дисплей каже що він наступні данні прочитав з своєї RAM
50 00 адреса в памяті
01 кількість слів що читаються(апдейт)
00 01 данні що там лежать

при підключенні до программи DWIN, кожне опрацювання дотику передається саме в такому вигляді(в HEX)

отже коли я отримую що за адресою 5000 данні
0001(->bin 0001) перша кнопка активна (інші неактивні )
0002(->bin 0010) друга
0003(->bin 0100) третя

Остання редакція Primaangel88 (2025-03-19 14:15:50)

Неактивний

#33 2025-03-18 19:52:52

Primaangel88
Учасник
Зареєстрований: 2025-03-13
Повідомлень: 15

Re: Допомога з конвертацією float в HEX

перероблю код за вашими прикладами, та викладу. Дякую за допомогу.

Неактивний

#34 2025-03-18 19:58:56

dimich
Учасник
Зареєстрований: 2023-12-01
Повідомлень: 316

Re: Допомога з конвертацією float в HEX

Primaangel88 пише:

коли дисплей відпрацював натискання кнопки він посилає наступні данні в порт:
5A A5 06 83 50 00 01 00 01

Цікаво. Це він сам ініціює передачу чи відповідає на команду читання?
Якщо ініціює сам, що відбудеться, коли керуючий хост відправляє якусь команду і очікує відповіді, а в цей момент на дисплеї натиснули кнопку?

Primaangel88 пише:

5А А5 маска

Я би назвав це заголовком (frame header) або маркером.

Primaangel88 пише:

06 довжина передачі в байтах
83 команда читання данних з RAM памяті, я так зрозумів так дисплей каже що він наступні данні прочитав з своєї RAM
50 00 адреса в памяті

Тут наче має бути ще 01 - розмір даних у 16-бітних словах.

Primaangel88 пише:

00 01 данні що там лежать

І що, ніхто досі не написав для цього протокола людського парсера? Всі оперують масивом байтів?

Активний

#35 2025-03-18 21:58:12

jokeR
Учасник
Зареєстрований: 2024-12-12
Повідомлень: 49

Re: Допомога з конвертацією float в HEX

google://dwin arduino library
їх дофіга
можна не гратися в реверс-інжинірінг

ЗІ
img.png

Щось форум глючить. Якісь повідомлення показує, якісь ні..

Остання редакція jokeR (2025-03-18 22:02:25)

Неактивний

Швидке повідомлення

Введіть повідомлення і натисніть Надіслати

Підвал форуму