Передать текст внутри структуры
- Войдите на сайт для отправки комментариев
Втр, 22/08/2017 - 22:31
Как передать текст внутри структуры?
Отдельно числа и отдельно только текст - без проблем, а вместе соединить не получается.
Master:
#include <RS485_non_blocking.h> #include <SoftwareSerial.h> #define RS485_RX_PIN 6 #define RS485_TX_PIN 5 SoftwareSerial rs485(RS485_RX_PIN, RS485_TX_PIN); // receive pin, transmit pin struct // структура пакета данных { byte thisDeviceID; byte destinationID; int value; String msg; } data; size_t fWrite(const byte what) { return rs485.write(what); } RS485 network(NULL, NULL, fWrite, 0); void setup() { Serial.begin(9600); rs485.begin(9600); // software serial for talking to other devices network.begin(); // initialize the RS485 library } // end of setup void loop() { //const byte msg[] = "Hello world"; // Этот вариант передается корректно. Только почему "byte"? //network.sendMsg(msg, sizeof (msg)); memset(&data, 0, sizeof(data)); data.thisDeviceID = 3; data.destinationID = 0; data.value = 8; data.msg = "Test point"; network.sendMsg((byte *) &data, sizeof(data)); delay (1000); } // end of loop
Slave:
#include <RS485_non_blocking.h> #include <SoftwareSerial.h> #define RS485_RX_PIN 6 #define RS485_TX_PIN 5 SoftwareSerial rs485(RS485_RX_PIN, RS485_TX_PIN); // receive pin, transmit pin struct // структура пакета данных { byte thisDeviceID; byte destinationID; int value; String msg; } data; int fAvailable() { return rs485.available(); } int fRead() { return rs485.read(); } RS485 network(fRead, fAvailable, NULL, 20); void setup() { Serial.begin(9600); rs485.begin(9600); // software serial for talking to other devices network.begin(); // initialize the RS485 library } // end of setup void loop() { if (network.update()) { // Serial.write(network.getData(), network.getLength()); это работает с byte msg[] = "Hello world" // Serial.println(); memset(&data, 0, sizeof(data)); int len = network.getLength(); if (len > sizeof(data)) len = sizeof(data); memcpy(&data, network.getData(), len); Serial.println(data.thisDeviceID); Serial.println(data.destinationID); Serial.println(data.value); Serial.println(data.msg); Serial.println(); } } // end of loop
Результат:
3
0
8
<< тут пустая строка вместо текста.
вы наверное сглупили . У String нет постояного размера. И да даные String хранятся в куче. Вы переслали указатель. А вот содержимое кучи осталось в передатчике. А в приемнике нет данных из этой кучи.
ладно. Как тогда передать char msg[20]? Ибо на data.msg[] = "Test point"; оно ругается: "expected primary-expression before ']' token"
только массивом с фиксированой длиной. Или надо городить свой передатчик и свой приемник.
только массивом с фиксированой длиной. Или надо городить свой передатчик и свой приемник.
А функция len где?
И я не ТС. И это не моя тема.
Посмотрел, но не нашёл. Там только memcpy(data.msg, p, len(p));
Впрочем, не особо-то и хотелось :)