This commit is contained in:
Alex
2021-09-09 17:54:30 +03:00
parent 96520e1b3b
commit e6f45643b9
12 changed files with 292 additions and 318 deletions
+32 -18
View File
@@ -1,39 +1,53 @@
// демо-пример: инициализация и настройки
// крупный приёмник SYN480R [VCC: 3.3-5.5V, logic: VCC]
// или MX-RM-5V (RF-5V) [VCC: 5V, logic: 5V]
// демо-пример приёма в прерывании
// SYN480R, крупный чип: 3.3-5.5V
// MX-RM-5V (RF-5V): 5V
// RX470 (WL101-341): 3-5V
// дефайны перед подключением библиотеки
//#define G433_MANCHESTER // интерфейс Manchester Coding для экспериментов =)
//#define G433_SPEED 1000 // скорость 100-8000 бит/с, по умолч. 2000 бит/с
//#define G433_SPEED 2000 // скорость 100-10000 бит/с, по умолч. 2000 бит/с
#include <Gyver433.h>
//Gyver433_RX<пин> rx;
//Gyver433_RX<пин, буфер> rx;
//Gyver433_RX<пин, буфер, CRC> rx;
// пин: цифровой пин
// буфер: размер буфера в байтах. По умолч. 64
// CRC: проверка целостности данных: G433_CRC8 (надёжный), G433_XOR (лёгкий), G433_NOCRC (отключено). По умолч. G433_CRC8
// буфер: размер приёмного буфера в байтах. По умолч. 64
#include <Gyver433.h>
Gyver433_RX<2, 20> rx;
void setup() {
Serial.begin(9600);
// взводим прерывания по CHANGE
attachInterrupt(0, isr, CHANGE);
}
void loop() {
// "тик" опрашивает радио и вернёт количество успешно принятых байт
// tick принимает асинхронно, но может ловить ошибки при загруженном коде
// tickWait блокирует выполнение, но принимает данные чётко
// тикер вызывается в прерывании
void isr() {
rx.tickISR();
}
//if (rx.tick()) {
if (rx.tickWait()) {
// принятые данные доступны в .buffer
// и имеют размер .size
Serial.write(rx.buffer, rx.size);
void loop() {
// gotData() вернёт количество удачно принятых байт
if (rx.gotData()) { // если больше 0
// ЧИТАЕМ. СПОСОБ 1
// я знаю, что передатчик отправляет char[15]
char data[15];
// читаем принятые данные в data
// если данные совпадают по размеру - ок
if (rx.readData(data)) Serial.print(data);
else Serial.print("Data error");
// выведем также качество связи
// ЧИТАЕМ. СПОСОБ 2
// вывести сырые данные из буфера в порт
//Serial.write(rx.buffer, rx.size);
// выведем также качество соединения
Serial.print(", RSSI: ");
Serial.println(rx.getRSSI());
}
// имитация загруженного кода. Не влияет на приём
delay(50);
}
+8 -15
View File
@@ -1,24 +1,17 @@
// демо-пример: инициализация и настройки
// мелкий передатчик SYN115 [VCC: 1.8-3.6V, logic: VCC]
// или FS1000A [VCC: 3-12V, logic: 5V]
// демо-пример отправки
// SYN115, маленький чип: 1.8-3.6V
// FS1000A: 3-12V
// WL102-341: 2.0-3.6V
// дефайны перед подключением библиотеки
//#define G433_FAST // короткая синхронизация для зелёных модулей
//#define G433_MEDIUM // средняя синхронизация для SYN480R при отправке ЧАЩЕ 400мс (активно по умолчанию)
//#define G433_SLOW // длинная синхронизация для SYN480R при отправке РЕЖЕ 400мс
//#define G433_MANCHESTER // интерфейс Manchester Coding для экспериментов =)
//#define G433_SPEED 1000 // скорость 100-8000 бит/с, по умолч. 2000 бит/с
//#define G433_SPEED 2000 // скорость 100-10000 бит/с, по умолч. 2000 бит/с
#include <Gyver433.h>
//Gyver433_TX<пин> tx;
//Gyver433_TX<пин, буфер> tx;
//Gyver433_TX<пин, буфер, CRC> tx;
// пин: цифровой пин
// буфер: размер буфера в байтах. На "ручную" отправку буфер не нужен. По умолч. 64
// CRC: проверка целостности данных: G433_CRC8 (надёжный), G433_XOR (лёгкий), G433_NOCRC (отключено). По умолч. G433_CRC8
Gyver433_TX<2, 20> tx;
//Gyver433_RX<пин> tx;
Gyver433_TX<2> tx;
void setup() {
}
@@ -32,7 +25,7 @@ void loop() {
data[13] = (count % 10) + '0';
if (++count >= 100) count = 0;
// отправка данных любого типа. Блокирующая на период отправки
// отправка данных любого типа
tx.sendData(data);
// отправка 10 раз в сек
-26
View File
@@ -1,26 +0,0 @@
// приём в прерывании. Отправляет пример demo_tx
//#define G433_SPEED 1000 // скорость 100-8000 бит/с, по умолч. 2000 бит/с
#include <Gyver433.h>
Gyver433_RX<2, 20> rx; // указали пин и размер буфера
void setup() {
Serial.begin(9600);
// взводим прерывания по CHANGE
attachInterrupt(0, isr, CHANGE);
}
void isr() {
rx.tickISR(); // спец. тикер вызывается в прерывании по CHANGE
}
void loop() {
// .gotData() вернёт количество удачно принятых в прерывании байт
if (rx.gotData()) { // если больше 0
Serial.write(rx.buffer, rx.size);
Serial.println();
}
// имитация загруженного кода
delay(100);
}
+9 -3
View File
@@ -1,15 +1,21 @@
// обмен сырыми данными без CRC и буфера на отправку
// обмен сырыми данными без CRC
// отправляет пример raw_tx
// принимаем без прерывания! для примера
//#define G433_SPEED 1000 // скорость 100-10000 бит/с, по умолч. 2000 бит/с
#include <Gyver433.h>
Gyver433_RX<2, 20, G433_NOCRC> rx; // буфер на приём нужен!
Gyver433_RX<2, 20, G433_NOCRC> rx; // буфер 20 байт
void setup() {
Serial.begin(9600);
}
void loop() {
if (rx.tickWait()) {
// этот тикер нужно вызывать как можно чаще
// лучше принимать в прерывании, см. пример demo
if (rx.tick()) {
// выводим сырые байты в порт
Serial.write(rx.buffer, rx.size);
Serial.println();
}
+3 -3
View File
@@ -1,10 +1,10 @@
// обмен сырыми данными без CRC и буфера на отправку
// обмен сырыми данными без CRC
// принимает пример raw_rx
//#define G433_SPEED 1000 // скорость 100-8000 бит/с, по умолч. 2000 бит/с
//#define G433_SPEED 1000 // скорость 100-10000 бит/с, по умолч. 2000 бит/с
#include <Gyver433.h>
Gyver433_TX<2, 0, G433_NOCRC> tx; // буфер на отправку 0! Экономим
Gyver433_TX<2, G433_NOCRC> tx;
void setup() {
}
+2 -2
View File
@@ -1,5 +1,5 @@
// выводим данные на дисплей. Отправляет пример demo_tx
//#define G433_SPEED 1000 // скорость 100-8000 бит/с, по умолч. 2000 бит/с
//#define G433_SPEED 1000 // скорость 100-10000 бит/с, по умолч. 1500 бит/с
#include <Gyver433.h>
Gyver433_RX<2> rx; // указали пин
@@ -18,4 +18,4 @@ void loop() {
lcd.home();
for (byte i = 0; i < rx.size; i++) lcd.write(rx.buffer[i]);
}
}
}
+14 -12
View File
@@ -1,12 +1,12 @@
// приём структуры данных
//#define G433_SPEED 1000 // скорость 100-8000 бит/с, по умолч. 2000 бит/с
//#define G433_SPEED 1000 // скорость 100-10000 бит/с, по умолч. 2000 бит/с
#include <Gyver433.h>
Gyver433_RX<2, 10> rx; // указали пин и размер буфера
Gyver433_RX<2, 12> rx; // указали пин и размер буфера
// формат пакета для приёма (такой же как отправляется)
struct dataPack {
struct DataPack {
byte counter;
byte randomNum;
int analog;
@@ -19,14 +19,16 @@ void setup() {
void loop() {
if (rx.tick()) {
dataPack data; // "буферная" структура
rx.readData(data); // переписываем данные в неё
Serial.println("Received:");
Serial.println(data.counter);
Serial.println(data.randomNum);
Serial.println(data.analog);
Serial.println(data.time);
Serial.println();
DataPack data; // "буферная" структура
if (rx.readData(data)) { // переписываем данные в неё
// если данные подходят - выводим
Serial.println(data.counter);
Serial.println(data.randomNum);
Serial.println(data.analog);
Serial.println(data.time);
Serial.println();
} else {
Serial.println("Wrong data");
}
}
}
+6 -7
View File
@@ -1,19 +1,19 @@
// передача структуры данных
//#define G433_SPEED 1000 // скорость 100-8000 бит/с, по умолч. 2000 бит/с
//#define G433_SPEED 1000 // скорость 100-10000 бит/с, по умолч. 2000 бит/с
#define G433_SLOW // отправляю раз в секунду на SYN480R
#include <Gyver433.h>
Gyver433_TX<2, 10> tx; // указали пин и размер буфера
Gyver433_TX<2> tx; // указали пин
// формат пакета для отправки
struct dataPack {
byte counter;
struct DataPack {
byte counter = 0;
byte randomNum;
int analog;
uint32_t time;
};
dataPack data;
DataPack data;
void setup() {
Serial.begin(9600);
@@ -24,9 +24,8 @@ void loop() {
data.randomNum = random(256); // случайное число
data.analog = analogRead(0); // тут ацп
data.time = millis(); // тут миллис
tx.sendData(data);
Serial.println("Transmitted:");
Serial.println(data.counter);
Serial.println(data.randomNum);