So, I have an ATTiny85 sending data, awesome. I would like to have it send a message that consists of a few concatenated parts.
I have been reading about strings, buffers, chars, toCharArray and more for about 6 hours now and am completely puzzled by this.
Below, the variable deze
will no transmit, but msg
will.
So I tried to do something like char *deze = "hello" + "world";
but that also fails.
What would be the best way to construct a piece of data that will be send by my 433MHz transmitter. I need to combine INT, String and float before sending it as uint8_t (bytes?).
#include <RH_ASK.h>
#define R_PIN PB4
#define T_PIN PB1
#define L_PIN PB3
RH_ASK driver(2000, R_PIN, T_PIN);
void setup()
{
if (!driver.init()){
pinMode(L_PIN, OUTPUT);
digitalWrite(L_PIN, HIGH);
delay(500);
digitalWrite(L_PIN, LOW);
delay(500);
}
}
void loop()
{
char deze[5];
char *msg = "gewonechar";
String thijs = "thijs";
thijs.toCharArray(deze, sizeof(deze)-1);
driver.send((uint8_t *)deze, strlen(msg));
driver.waitPacketSent();
delay(200);
}
[edit]
This is the working code on the receiver side.
struct data {
uint16_t id;
uint16_t pin;
uint16_t value1;
uint16_t value2;
} myData;
void loop()
{
uint8_t buf[RH_ASK_MAX_MESSAGE_LEN];
uint8_t buflen = sizeof(buf);
if (driver.recv(buf, &buflen)) {
memcpy(&myData, buf, buflen);
Serial.print("ID: ");
Serial.println(myData.id);
Serial.print("Pin: ");
Serial.println(myData.pin);
Serial.print("Value1: ");
Serial.println(myData.value1);
Serial.print("Value2: ");
Serial.println(myData.value2);
Serial.println("");
}
server.handleClient();
yield;
}
And the transmitter
#include <RH_ASK.h>
#define BAUD 2000
#define RX 11
#define TX 12
RH_ASK driver(BAUD, RX, TX);
struct data {
uint16_t id;
uint16_t pin;
uint16_t value1;
uint16_t value2;
} myData;
void setup() {
Serial.begin(9600); // Debugging only
if (!driver.init())
Serial.println("init failed");
}
void loop()
{
struct data myData;
myData.id = 1001;
myData.pin = 4;
myData.value1 = analogRead(4);
myData.value2 = analogRead(5);
driver.send((uint8_t *)&myData, sizeof(myData));
driver.waitPacketSent();
delay(2000);
}
Library used: http://www.airspayce.com/mikem/arduino/RadioHead/