This commit is contained in:
Alex
2021-06-20 12:05:51 +03:00
parent d10b64cbe6
commit 060fcbb9ce
5 changed files with 33 additions and 9 deletions
+18 -1
View File
@@ -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 =====