Страница 1 из 2

Блок отправки данных.

Добавлено: 14.12.2019{, 09:21}
Serjik
Всем доброго! Искал, сам пробовал, не получается. :(
Нужен блок который бы отправлял данные 0x82, 0хF2, 0xC4... И что бы можно было можно добавлять или сокращать входы. Я так понял что 0хF2 отправляется как Char? То есть 2 элемента одним потоком за счет чего получается слитность... Пробовал по разному. Одним потоком все отправляет, без пробелов. Из за чего блок не понимает что от него хотят. Помогите создать блок! :smile469:

Блок отправки данных.

Добавлено: 14.12.2019{, 13:10}
fsergei70
Serjik писал(а):
14.12.2019{, 09:21}
0x82, 0хF2, 0xC4
А случайно не коды ли ASCII. В любом случае это обозначение 16 тиричной системы исчисления

Отправлено спустя 9 минут 4 секунды:
Попробуйте по таблице символов найти буквы которые соответсвтуют шеснадцатеричному значению ваших кодов. например
0x82 это просто запятая
0хF2 это маленькая русская буква т
0xC4 это заглавная русская Д
и так далее
вот одна из таблиц символов, и отправлять уже эти символы

https://istarik.ru/blog/programmirovanie/53.html

Блок отправки данных.

Добавлено: 14.12.2019{, 14:02}
Nikan
.

Блок отправки данных.

Добавлено: 15.12.2019{, 15:51}
Serjik
fsergei70, Уж очень сложно.

Nikan, А в блоке как реализовать?

Отправлено спустя 9 минут 3 секунды:
Если туда вставлять стринг то на выходе билиберда.

Блок отправки данных.

Добавлено: 15.12.2019{, 16:17}
fsergei70
Вот еще вариант, возьмите калькулятор виндос, в режиме программист переведите числа в десятичный формат и подавайте эти значения на блок конвертации CHAR

Блок отправки данных.

Добавлено: 15.12.2019{, 17:10}
Serjik
fsergei70, Не понял вообще! Там один вход! А мне нужно 8 входов и один выход!

Блок отправки данных.

Добавлено: 15.12.2019{, 17:31}
Nikan
.

Блок отправки данных.

Добавлено: 16.12.2019{, 19:57}
Serjik
Nikan писал(а):
15.12.2019{, 17:31}
если вы готовы переводить HEX в десятичный вид(хоть на калькуляторе), то с блоком помогу.

Переводить не проблема! Проблема понять как это работает да бы собрать действующий блок. Я как ни пытался, он шлет одним потоком.

Блок отправки данных.

Добавлено: 17.12.2019{, 02:20}
Nikan
.

Блок отправки данных.

Добавлено: 17.12.2019{, 07:55}
fsergei70
Nikan писал(а):
17.12.2019{, 02:20}
как то так
А как приделать к этим блокам подсчет и передачу контрольной суммы

Отправлено спустя 1 минуту 2 секунды:
Лучше если бы у блоков был выход контрольной суммы.

Блок отправки данных.

Добавлено: 17.12.2019{, 08:22}
aidar_i
Если сделать конвертер

https://github.com/benrugg/Arduino-Hex- ... Conversion

Блок отправки данных.

Добавлено: 17.12.2019{, 11:46}
Sancho
aidar_i, Айдар, ради интереса посмотрел по ссылке - тот ещё писатель кода, я правда тоже...
Код тяжёлый, время-тормозящий, с масштабированием вместо одной функции математики.
Для примера:
СпойлерПоказать

Код: Выделить всё

//оригинал
unsigned int hexToDec(String hexString) {  
  unsigned int decValue = 0;
  int nextInt;  
  for( int i = 0; i < hexString.length(); i++) {    
 nextInt = int(hexString.charAt(i));
    if (nextInt >= 48 && nextInt <= 57) nextInt = map(nextInt, 48, 57, 0, 9);
    if (nextInt >= 65 && nextInt <= 70) nextInt = map(nextInt, 65, 70, 10, 15);
    if (nextInt >= 97 && nextInt <= 102) nextInt = map(nextInt, 97, 102, 10, 15);
 nextInt = constrain(nextInt, 0, 15);
    
 decValue = (decValue * 16) + nextInt;
  }  
  return decValue;
}
// лёгкое редактирование
unsigned int hexToDec(String hexString) {  
  unsigned int decValue = 0;
  int nextInt; 
	int abc =   hexString.length();		// вычислим один раз длинну строки, а не в каждой итерации цикла :)
  for( int i = 0; i < abc; i++) {    
 nextInt = int(hexString.charAt(i));
    if (nextInt >= 48 && nextInt <= 57) nextInt -=48; // вместо  nextInt = map(nextInt, 48, 57, 0, 9);
    if (nextInt >= 65 && nextInt <= 70) nextInt -=50; // вместо  nextInt = map(nextInt, 65, 70, 10, 15);
    if (nextInt >= 97 && nextInt <= 102) nextInt -=80; // вместо  nextInt = map(nextInt, 97, 102, 10, 15);
 nextInt = constrain(nextInt, 0, 15);
    
 decValue = (decValue * 16) + nextInt;
  }  
  return decValue;
}
Только, честно, я так и не понял, каким образом ТС нужно отсылать данные - пакетом или поштучно, или ещё как...

Блок отправки данных.

Добавлено: 17.12.2019{, 14:46}
Nikan
.

Блок отправки данных.

Добавлено: 17.12.2019{, 14:48}
Sancho
Если последовательным, может тогда проще делать?
Использовать блок с одним serialwrite и подавать в цикле платы из массива.
Думаю, что проще и размер передачи проще менять.

Отправлено спустя 8 минут 56 секунд:
Nikan писал(а):
17.12.2019{, 14:46}
в флпроге проблема другая - нельзя числовую переменную записать ни в каком виде кроме десятичного.
иногда реально напрягает, особенно с битовыми операциями

Блок отправки данных.

Добавлено: 17.12.2019{, 15:25}
Nikan
.

Блок отправки данных.

Добавлено: 19.12.2019{, 20:05}
Serjik
Nikan, Спасибо! Буду пробовать собирать схему. Блок универсален получился! Можно как для авто использовать, так и для контроллеров как в моем случае. ПРО-МИКРО и некстион 2.4 в полне сносно будет! Даже на некстион я смогу числа вводить, что упрощает все действие! Принимать мне ни чего не надо, надо только отправить команду на исполнение. А вот на счет авто надо подумать. Там еще и прием нужен...

Блок отправки данных.

Добавлено: 20.12.2019{, 16:21}
Nikan
.

Блок отправки данных.

Добавлено: 18.02.2020{, 23:09}
nickoass
Nikan писал(а):
17.12.2019{, 02:20}
Serjik писал(а):
16.12.2019{, 19:57}
Переводить не проблема! Проблема понять как это работает да бы собрать действующий блок. Я как ни пытался, он шлет одним потоком.
как то так Serial Write.flp
А можно добавить в блок отправку переменных String ?

Блок отправки данных.

Добавлено: 19.02.2020{, 00:35}
Nikan
.

Блок отправки данных.

Добавлено: 19.02.2020{, 09:52}
nickoass
Nikan писал(а):
19.02.2020{, 00:35}
nickoass писал(а):
18.02.2020{, 23:09}
А можно добавить в блок отправку переменных String ?
а для чего? обычный вариант же есть - отправка в UART
Например, для отправки АТ команд. Со стандартным блоком Отправка в UART, есть ряд проблем.