v1.3
This commit is contained in:
@@ -56,6 +56,7 @@ Gyver433_xx<пин, буфер, CRC> xx;
|
||||
#define G433_SLOW // [TX] длинная синхронизация при отправке на SYN480R РЕЖЕ 400мс
|
||||
#define G433_MANCHESTER // [должно быть одинаково на RX и TX] интерфейс Manchester Coding для экспериментов =)
|
||||
#define G433_SPEED 1000 // [должно быть одинаково на RX и TX] скорость 100-8000 бит/с, по умолч. 2000 бит/с
|
||||
#define G433_RSSI_COUNT 10 // [RX] количество успешно принятых пакетов для расчёта RSSI (по умолч. 10)
|
||||
```
|
||||
|
||||
<a id="usage"></a>
|
||||
@@ -74,6 +75,7 @@ bool readData(T &data); // прочитает буфер в любой ти
|
||||
uint16_t getSize(); // получить размер принятых данных
|
||||
uint16_t gotData(); // вернёт количество успешно принятых в tickISR() байт (см. пример isr_rx)
|
||||
uint8_t buffer[]; // доступ к буферу для отладки
|
||||
uint8_t getRSSI(); // получить качество приёма (процент успешных передач)
|
||||
|
||||
// ============= CRC =============
|
||||
// можно использовать встроенные функции для генерации байта CRC для ручной упаковки пакетов
|
||||
@@ -84,7 +86,7 @@ uint8_t G433_crc_xor(uint8_t *buffer, uint8_t size); // ручной CRC XOR
|
||||
<a id="example"></a>
|
||||
## Примеры
|
||||
Остальные примеры смотри в **examples**!
|
||||

|
||||

|
||||
### Отправка
|
||||
```cpp
|
||||
#include <Gyver433.h>
|
||||
@@ -151,6 +153,7 @@ void loop() {
|
||||
- v1.0
|
||||
- v1.1 - оптимизация, новый интерфейс, поддержка дешёвых синих модулей, работа в прерывании
|
||||
- v1.2 - улучшение качества связи, оптимизация работы в прерывании
|
||||
- v1.3 - добавлен вывод RSSI
|
||||
|
||||
<a id="feedback"></a>
|
||||
## Баги и обратная связь
|
||||
|
||||
@@ -31,6 +31,9 @@ void loop() {
|
||||
// принятые данные доступны в .buffer
|
||||
// и имеют размер .size
|
||||
Serial.write(rx.buffer, rx.size);
|
||||
Serial.println();
|
||||
|
||||
// выведем также качество связи
|
||||
Serial.print(", RSSI: ");
|
||||
Serial.println(rx.getRSSI());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -26,6 +26,7 @@ getSize KEYWORD2
|
||||
gotData KEYWORD2
|
||||
G433_crc8 KEYWORD2
|
||||
G433_crc_xor KEYWORD2
|
||||
getRSSI KEYWORD2
|
||||
|
||||
#######################################
|
||||
# Constants (LITERAL1)
|
||||
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
name=Gyver433
|
||||
version=1.2
|
||||
version=1.3
|
||||
author=AlexGyver <alex@alexgyver.ru>
|
||||
maintainer=AlexGyver <alex@alexgyver.ru>
|
||||
sentence=Simple library for 433 MHz radio
|
||||
|
||||
+18
-1
@@ -18,6 +18,7 @@
|
||||
v1.0 - релиз
|
||||
v1.1 - оптимизация, новый интерфейс, поддержка дешёвых синих модулей, работа в прерывании
|
||||
v1.2 - улучшение качества связи, оптимизация работы в прерывании
|
||||
v1.3 - добавлен вывод RSSI
|
||||
*/
|
||||
|
||||
#ifndef Gyver433_h
|
||||
@@ -34,6 +35,10 @@ uint8_t G433_crc_xor(uint8_t *buffer, uint8_t size); // ручной CRC XOR
|
||||
#define G433_SPEED 2000
|
||||
#endif
|
||||
|
||||
#ifndef G433_RSSI_COUNT
|
||||
#define G433_RSSI_COUNT 10
|
||||
#endif
|
||||
|
||||
// тайминги интерфейса
|
||||
#define FRAME_TIME (1000000ul / G433_SPEED) // время фрейма (либо HIGH)
|
||||
#define HALF_FRAME (FRAME_TIME / 2) // полфрейма (либо LOW)
|
||||
@@ -188,18 +193,29 @@ public:
|
||||
uint16_t gotData() {
|
||||
if (parse == 2 && millis() - tmr2 >= 10) { // фрейм не закрыт
|
||||
parse = size = 0; // приём окончен
|
||||
if (byteCount > 1) { // если что то приняли
|
||||
if (byteCount > 1 + !!CRC_MODE) { // если что то приняли
|
||||
if (CRC_MODE == G433_CRC8) { // CRC8
|
||||
if (!G433_crc8(buffer, byteCount)) size = byteCount - 2;
|
||||
} else if (CRC_MODE == G433_XOR) { // CRC XOR
|
||||
if (!G433_crc_xor(buffer, byteCount)) size = byteCount - 2;
|
||||
} else size = byteCount - 1; // без CRC
|
||||
if (size > 0) okCount++;
|
||||
else errCount++;
|
||||
if (okCount >= G433_RSSI_COUNT) {
|
||||
RSSI = 100 - errCount * 100 / (errCount + okCount);
|
||||
errCount = okCount = 0;
|
||||
}
|
||||
}
|
||||
return size;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
// получить качество приёма (процент успешных передач)
|
||||
uint8_t getRSSI() {
|
||||
return RSSI;
|
||||
}
|
||||
|
||||
// получить размер принятых данных
|
||||
uint16_t getSize() {
|
||||
return size;
|
||||
@@ -270,6 +286,7 @@ private:
|
||||
uint8_t parse = 0;
|
||||
uint32_t tmr = 0, tmr2 = 0;
|
||||
uint8_t bitCount = 0, byteCount = 0;
|
||||
uint8_t errCount = 0, okCount = 0, RSSI = 0;
|
||||
};
|
||||
|
||||
// ===== CRC =====
|
||||
|
||||
Reference in New Issue
Block a user