1 Commits

Author SHA1 Message Date
Alex 8196c8e583 v1.4 2021-07-17 23:04:48 +03:00
5 changed files with 32 additions and 33 deletions
+1
View File
@@ -154,6 +154,7 @@ void loop() {
- v1.1 - оптимизация, новый интерфейс, поддержка дешёвых синих модулей, работа в прерывании - v1.1 - оптимизация, новый интерфейс, поддержка дешёвых синих модулей, работа в прерывании
- v1.2 - улучшение качества связи, оптимизация работы в прерывании - v1.2 - улучшение качества связи, оптимизация работы в прерывании
- v1.3 - добавлен вывод RSSI - v1.3 - добавлен вывод RSSI
- v1.4 - переделан FastIO
<a id="feedback"></a> <a id="feedback"></a>
## Баги и обратная связь ## Баги и обратная связь
+1 -1
View File
@@ -1,5 +1,5 @@
name=Gyver433 name=Gyver433
version=1.3 version=1.4
author=AlexGyver <alex@alexgyver.ru> author=AlexGyver <alex@alexgyver.ru>
maintainer=AlexGyver <alex@alexgyver.ru> maintainer=AlexGyver <alex@alexgyver.ru>
sentence=Simple library for 433 MHz radio sentence=Simple library for 433 MHz radio
+6 -22
View File
@@ -1,17 +1,6 @@
// Быстрый IO для AVR (для остальных будет digitalxxxxx) #include "FastIO_v2.h"
// v1.0
#ifndef FastIO_h bool F_fastRead(const uint8_t pin) {
#define FastIO_h
#include <Arduino.h>
bool fastRead(const uint8_t pin); // быстрое чтение пина
void fastWrite(const uint8_t pin, bool val); // быстрая запись
uint8_t fastShiftIn(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder); // быстрый shiftIn
void fastShiftOut(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder, uint8_t data); // быстрый shiftOut
// ================================================================
bool fastRead(const uint8_t pin) {
#if defined(__AVR_ATmega328P__) || defined(__AVR_ATmega168__) #if defined(__AVR_ATmega328P__) || defined(__AVR_ATmega168__)
if (pin < 8) return bitRead(PIND, pin); if (pin < 8) return bitRead(PIND, pin);
else if (pin < 14) return bitRead(PINB, pin - 8); else if (pin < 14) return bitRead(PINB, pin - 8);
@@ -32,8 +21,7 @@ bool fastRead(const uint8_t pin) {
return 0; return 0;
} }
void F_fastWrite(const uint8_t pin, bool val) {
void fastWrite(const uint8_t pin, bool val) {
#if defined(__AVR_ATmega328P__) || defined(__AVR_ATmega168__) #if defined(__AVR_ATmega328P__) || defined(__AVR_ATmega168__)
if (pin < 8) bitWrite(PORTD, pin, val); if (pin < 8) bitWrite(PORTD, pin, val);
else if (pin < 14) bitWrite(PORTB, (pin - 8), val); else if (pin < 14) bitWrite(PORTB, (pin - 8), val);
@@ -56,8 +44,7 @@ void fastWrite(const uint8_t pin, bool val) {
#endif #endif
} }
uint8_t F_fastShiftIn(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder) {
uint8_t fastShiftIn(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder) {
#if defined(AVR) #if defined(AVR)
volatile uint8_t *_clk_port = portOutputRegister(digitalPinToPort(clockPin)); volatile uint8_t *_clk_port = portOutputRegister(digitalPinToPort(clockPin));
volatile uint8_t *_dat_port = portInputRegister(digitalPinToPort(dataPin)); volatile uint8_t *_dat_port = portInputRegister(digitalPinToPort(dataPin));
@@ -81,8 +68,7 @@ uint8_t fastShiftIn(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder) {
#endif #endif
} }
void F_fastShiftOut(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder, uint8_t data) {
void fastShiftOut(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder, uint8_t data) {
#if defined(AVR) #if defined(AVR)
volatile uint8_t *_clk_port = portOutputRegister(digitalPinToPort(clockPin)); volatile uint8_t *_clk_port = portOutputRegister(digitalPinToPort(clockPin));
volatile uint8_t *_dat_port = portOutputRegister(digitalPinToPort(dataPin)); volatile uint8_t *_dat_port = portOutputRegister(digitalPinToPort(dataPin));
@@ -104,6 +90,4 @@ void fastShiftOut(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder, uint8_t d
#else #else
shiftOut(dataPin, clockPin, bitOrder, data); shiftOut(dataPin, clockPin, bitOrder, data);
#endif #endif
} }
#endif
+13
View File
@@ -0,0 +1,13 @@
// Быстрый IO для AVR (для остальных будет digitalxxxxx)
// v1.0
#ifndef _FastIO_v2_h
#define _FastIO_v2_h
#include <Arduino.h>
bool F_fastRead(const uint8_t pin); // быстрое чтение пина
void F_fastWrite(const uint8_t pin, bool val); // быстрая запись
uint8_t F_fastShiftIn(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder); // быстрый shiftIn
void F_fastShiftOut(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder, uint8_t data); // быстрый shiftOut
#endif
+11 -10
View File
@@ -19,12 +19,13 @@
v1.1 - оптимизация, новый интерфейс, поддержка дешёвых синих модулей, работа в прерывании v1.1 - оптимизация, новый интерфейс, поддержка дешёвых синих модулей, работа в прерывании
v1.2 - улучшение качества связи, оптимизация работы в прерывании v1.2 - улучшение качества связи, оптимизация работы в прерывании
v1.3 - добавлен вывод RSSI v1.3 - добавлен вывод RSSI
v1.4 - переделан FastIO
*/ */
#ifndef Gyver433_h #ifndef Gyver433_h
#define Gyver433_h #define Gyver433_h
#include <Arduino.h> #include <Arduino.h>
#include "FastIO.h" #include "FastIO_v2.h"
uint8_t G433_crc8(uint8_t *buffer, uint8_t size); // ручной CRC8 uint8_t G433_crc8(uint8_t *buffer, uint8_t size); // ручной CRC8
uint8_t G433_crc_xor(uint8_t *buffer, uint8_t size); // ручной CRC XOR uint8_t G433_crc_xor(uint8_t *buffer, uint8_t size); // ручной CRC XOR
@@ -107,28 +108,28 @@ public:
// отправка сырого набора байтов // отправка сырого набора байтов
void write(uint8_t* buf, uint16_t size) { void write(uint8_t* buf, uint16_t size) {
for (uint16_t i = 0; i < TRAINING_PULSES; i++) { for (uint16_t i = 0; i < TRAINING_PULSES; i++) {
fastWrite(TX_PIN, 1); F_fastWrite(TX_PIN, 1);
G433_DELAY(FRAME_TIME); G433_DELAY(FRAME_TIME);
fastWrite(TX_PIN, 0); F_fastWrite(TX_PIN, 0);
G433_DELAY(FRAME_TIME); G433_DELAY(FRAME_TIME);
} }
fastWrite(TX_PIN, 1); // старт F_fastWrite(TX_PIN, 1); // старт
G433_DELAY(START_PULSE); // ждём G433_DELAY(START_PULSE); // ждём
fastWrite(TX_PIN, 0); // старт бит F_fastWrite(TX_PIN, 0); // старт бит
#ifdef G433_MANCHESTER #ifdef G433_MANCHESTER
G433_DELAY(HALF_FRAME); // ждём G433_DELAY(HALF_FRAME); // ждём
for (uint16_t n = 0; n < size; n++) { for (uint16_t n = 0; n < size; n++) {
uint8_t data = buf[n]; uint8_t data = buf[n];
for (uint8_t b = 0; b < 8; b++) { for (uint8_t b = 0; b < 8; b++) {
fastWrite(TX_PIN, !(data & 1)); F_fastWrite(TX_PIN, !(data & 1));
G433_DELAY(HALF_FRAME); G433_DELAY(HALF_FRAME);
fastWrite(TX_PIN, (data & 1)); F_fastWrite(TX_PIN, (data & 1));
G433_DELAY(HALF_FRAME); G433_DELAY(HALF_FRAME);
data >>= 1; data >>= 1;
} }
} }
fastWrite(TX_PIN, 0); // конец передачи F_fastWrite(TX_PIN, 0); // конец передачи
#else #else
bool flag = 0; bool flag = 0;
for (uint16_t n = 0; n < size; n++) { for (uint16_t n = 0; n < size; n++) {
@@ -136,7 +137,7 @@ public:
for (uint8_t b = 0; b < 8; b++) { for (uint8_t b = 0; b < 8; b++) {
if (data & 1) G433_DELAY(FRAME_TIME); if (data & 1) G433_DELAY(FRAME_TIME);
else G433_DELAY(HALF_FRAME); else G433_DELAY(HALF_FRAME);
fastWrite(TX_PIN, flag = !flag); F_fastWrite(TX_PIN, flag = !flag);
data >>= 1; data >>= 1;
} }
} }
@@ -231,7 +232,7 @@ public:
private: private:
bool pinChanged() { bool pinChanged() {
bit = fastRead(RX_PIN); bit = F_fastRead(RX_PIN);
if (bit != prevBit) { if (bit != prevBit) {
prevBit = bit; prevBit = bit;
return 1; return 1;