Снова по сборке сетевого пакета.
- Войдите на сайт для отправки комментариев
Втр, 15/12/2015 - 20:59
Доброго времени суток, снова я к вам за советом!
Необходимо скомпоновать сетевой пакет, где первый байт - ID устройства, следующие 4 байте - номер события.
Пробовал так:
byte ID = 1
unsigned long SequenceId = 0;
;
void loop()
{
Udp.beginPacket("192.168.1.100", 8888);
Udp.write(ID);
Udp.write(SequenceId, 4);
Udp.endPacket();
SequenceId ++;
delay(10000);
}
Ругается на Udp.write(SequenceId, 4); - Call of overloaded 'write(long unsigned int&, int)' is ambiguous
Если записать так Udp.write(SequenceId);, то используется только 1 байт из 4. Как это исправить?
1. Разбейте
SequenceIdна байты и отправляйте по очереди, черезUdp.write(byte);.2. Преобразуйте
SequenceIdв массив символов и отправьте черезUdp.write(buffer, size);Сделал так:
byte ID = 0; unsigned long SequenceId = 0; byte* ptr = (byte*)&SequenceId; void loop() { delay(1000); Udp.beginPacket("192.168.1.100", 8888); Udp.write(ID); for (byte i = 0; i < 4; i ++){ Udp.write(ptr[i]); } Udp.endPacket(); SequenceId ++;Работает, но как то громоздко выглядит с этими указателями, может можно упростит?.
А как можно преобразовать long в массив?
Сделал так:
byte ID = 0; unsigned long SequenceId = 0; byte* ptr = (byte*)&SequenceId; void loop() { delay(1000); Udp.beginPacket("192.168.1.100", 8888); Udp.write(ID); for (byte i = 0; i < 4; i ++){ Udp.write(ptr[i]); } Udp.endPacket(); SequenceId ++;Работает, но как то громоздко выглядит с этими указателями, может можно упростит?.
А как можно преобразовать long в массив?
будет хуже
http://arduino.stackexchange.com/questions/5416/convert-long-to-char-arr...
ок, спасибо!
А не проще Udp.write(&SequenceId, sizeof(SequenceId));
?
ну вот зачем?
ну вот зачем?
TC поблагодарил, значит решение нашёл. Я предложил вариант. Какие проблемы?
ну вот зачем?
Никаких. Шутка юмора.
Получаю ошибку: no matching function for call to 'EthernetUDP::write(long unsigned int*, unsigned int)'
Получаю ошибку: no matching function for call to 'EthernetUDP::write(long unsigned int*, unsigned int)'
попробуйте приведение типа