/*
Nadajnik
*/
/*
Nadajnik
*/
#include <RF24.h>
#include <RF24Network.h>
RF24 radio(7, 8); // nRF24L01 (CE,CSN)
RF24Network network(radio); // Include the radio in the network
const uint16_t this_node = 00; // Address of this node in Octal format ( 04,031, etc)
const uint16_t node01 = 01; // (Address where the data is going)
struct package
{
float temp = 11.11;
float hum = 22.22;
uint16_t light = 33;
uint16_t batt = 44;
};
typedef struct package Package;
Package data;
void setup() {
Serial.begin(9600);
// SPI.begin();
radio.begin();
radio.setPALevel(RF24_PA_HIGH);
network.begin(32, this_node); //(channel, node address)
}
void loop() {
network.update();
RF24NetworkHeader header(node01); // (Address where the data is going)
bool ok = network.write(header, &data, sizeof(data)); // Send the data
Serial.println("sending array...");
delay(1000);
}
/*
* Odbiornik
*
*/
#include <RF24.h>
#include <RF24Network.h>
RF24 radio(7, 8);
RF24Network network(radio); // Include the radio in the network
const uint16_t this_node = 01; // Address of this node in Octal format ( 04,031, etc)
//const uint16_t node00 = 00; // (Address where the data is going)
struct package
{
float temp = 11.11;
float hum = 22.22;
uint16_t light = 33;
uint16_t batt = 44;
};
typedef struct package Package;
Package incomingData;
void setup() {
Serial.begin(9600);
radio.begin();
radio.setPALevel(RF24_PA_HIGH);
network.begin(32, this_node); //(channel, node address)
}
void loop() {
network.update();
while ( network.available() ) { // Is there any incoming data?
RF24NetworkHeader header;
network.read(header, &incomingData, sizeof(incomingData)); // Read the incoming data
Serial.println("Struktura, 4 elementy:");
Serial.println(incomingData.temp);
Serial.println(incomingData.hum);
Serial.println(incomingData.light);
Serial.println(incomingData.batt);
Serial.println("Koniec");
}
}
Pożyteczna funkcja, która wysyła dane, w tym przypadku strukturę package składającą się z dwóch elementów: koloru i jasności diody RGB, do węzła nodeNumber.
deklaracja struktury
struct package // paczka danych wychodzących: kolor i jasność
{
uint32_t c = 0xFF3333;
uint16_t b = 100;
};
typedef struct package Package;
Package sendData;
...
funkcja
RF24SendData(to_node, sendData);
deklaracja funkcji
// funkcja wysyła strukturę do konkretnego węzła nRF24
void RF24SendData(uint16_t nodeNumber, package dataValue)
{
RF24NetworkHeader header(nodeNumber); // (adres węzła do którego wysyłamy dane)
bool ok = network.write(header, &dataValue, sizeof(dataValue)); // wysyłanie danych
if (ok) {
Serial.println("Poszło!");
Serial.println(dataValue.c, HEX);
Serial.println(dataValue.b);
}
}
Struktura, przykład dodawania zmiennych typu string, funkcja strcpy
Jeśli w strukturze mamy tablicę typu char dodanie lub zamianę elementu można wykonać używając funkcji strcpy
// Arduino Uno
struct buttons
{
int color[3];
int positions[4];
char stringi[20];
void (*fn)();
};
// Declare the functions here, or use prototyping
void func1();
void func2();
buttons test[] =
{
{ {0, 0, 0}, {0, 0, 100, 100}, "Oryginalny tekst", func1 },
{ {40, 40, 40}, {50, 50, 10, 10}, "Drugi tekst", func2 },
};
void setup()
{
Serial.begin(115200);
Serial.println();
Serial.println(__FILE__);
Serial.println(__DATE__);
printf("\n\tNazwa pliku: %s\n\tData kompilacji: %s\n", __FILE__, __DATE__);
Serial.println("Calling the functions:");
Serial.println( test[0].stringi);
test[0].fn();
test[1].fn();
}
void loop()
{
}
void func1()
{
Serial.println("Wykonywana func1");
strcpy(test[0].stringi, "Skopiowany tekst");
}
void func2()
{
Serial.println("Wykonywana func2");
Serial.println( test[0].stringi);
}