Страница 1 из 2
Блок отправки данных.
Добавлено: 14.12.2019{, 09:21}
Serjik
Всем доброго! Искал, сам пробовал, не получается.
Нужен блок который бы отправлял данные 0x82, 0хF2, 0xC4... И что бы можно было можно добавлять или сокращать входы. Я так понял что 0хF2 отправляется как Char? То есть 2 элемента одним потоком за счет чего получается слитность... Пробовал по разному. Одним потоком все отправляет, без пробелов. Из за чего блок не понимает что от него хотят. Помогите создать блок!
![думаю :smile469:](./images/smilies/smile469.gif)
Блок отправки данных.
Добавлено: 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
Блок отправки данных.
Добавлено: 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, есть ряд проблем.