mirror of
https://github.com/Kugelschieber/arduino-c.git
synced 2026-01-18 11:00:26 +00:00
Fixed payload length.
This commit is contained in:
11
main.c
11
main.c
@@ -7,6 +7,7 @@
|
|||||||
#include "rf24/nRF24L01.h"
|
#include "rf24/nRF24L01.h"
|
||||||
|
|
||||||
//#define TX
|
//#define TX
|
||||||
|
#define PAYLOAD 32 // byte
|
||||||
|
|
||||||
unsigned char rx_addr[5] = {0xE7, 0xE7, 0xE7, 0xE7, 0xE7};
|
unsigned char rx_addr[5] = {0xE7, 0xE7, 0xE7, 0xE7, 0xE7};
|
||||||
unsigned char tx_addr[5] = {0xD7, 0xD7, 0xD7, 0xD7, 0xD7};
|
unsigned char tx_addr[5] = {0xD7, 0xD7, 0xD7, 0xD7, 0xD7};
|
||||||
@@ -32,7 +33,7 @@ void prepare(){
|
|||||||
pin_mode(A2, OUTPUT); // red
|
pin_mode(A2, OUTPUT); // red
|
||||||
|
|
||||||
rf24_init(7, 6, 5, 4, 3, 2);
|
rf24_init(7, 6, 5, 4, 3, 2);
|
||||||
rf24_config(2, 13);
|
rf24_config(2, PAYLOAD);
|
||||||
|
|
||||||
#ifdef TX
|
#ifdef TX
|
||||||
rf24_rx_addr(rx_addr);
|
rf24_rx_addr(rx_addr);
|
||||||
@@ -59,7 +60,7 @@ void tx(){
|
|||||||
_delay_ms(10);
|
_delay_ms(10);
|
||||||
digital_write(A1, LOW);
|
digital_write(A1, LOW);
|
||||||
digital_write(A2, LOW);
|
digital_write(A2, LOW);
|
||||||
unsigned char data[13] = "World!";
|
unsigned char data[PAYLOAD] = "Hello, World! What's going on?";
|
||||||
|
|
||||||
rf24_send(data);
|
rf24_send(data);
|
||||||
while(rf24_is_sending());
|
while(rf24_is_sending());
|
||||||
@@ -78,12 +79,12 @@ void rx(){
|
|||||||
digital_write(A2, LOW);
|
digital_write(A2, LOW);
|
||||||
|
|
||||||
if(rf24_data_ready()){
|
if(rf24_data_ready()){
|
||||||
unsigned char data[13];
|
unsigned char data[PAYLOAD];
|
||||||
|
|
||||||
rf24_get_data(data);
|
rf24_get_data(data);
|
||||||
digital_write(A1, HIGH);
|
digital_write(A1, HIGH);
|
||||||
serial_write((char*)data, 13);
|
serial_write((char*)data, PAYLOAD);
|
||||||
|
|
||||||
_delay_ms(1000);
|
_delay_ms(100);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
29
rf24/rf24.c
29
rf24/rf24.c
@@ -38,13 +38,7 @@ void rf24_config(unsigned char channel, unsigned char payload_len){
|
|||||||
_payload_len = payload_len;
|
_payload_len = payload_len;
|
||||||
|
|
||||||
rf24_config_register(RF_CH, channel&RF_CH_MASK); // 2.4Ghz + channel*1Mhz
|
rf24_config_register(RF_CH, channel&RF_CH_MASK); // 2.4Ghz + channel*1Mhz
|
||||||
|
rf24_config_register(RX_PW_P1, payload_len&RX_PW_MASK); // data, pipe 0 for ACK
|
||||||
rf24_config_register(RX_PW_P0, 0x00); // auto ACK
|
|
||||||
rf24_config_register(RX_PW_P1, payload_len&RX_PW_MASK); // data
|
|
||||||
rf24_config_register(RX_PW_P2, 0x00); // unused...
|
|
||||||
rf24_config_register(RX_PW_P3, 0x00);
|
|
||||||
rf24_config_register(RX_PW_P4, 0x00);
|
|
||||||
rf24_config_register(RX_PW_P5, 0x00);
|
|
||||||
|
|
||||||
// low transmission rate, 0dBm
|
// low transmission rate, 0dBm
|
||||||
rf24_config_register(RF_SETUP, (0<<RF_DR_HIGH)|(0x03<<RF_PWR));
|
rf24_config_register(RF_SETUP, (0<<RF_DR_HIGH)|(0x03<<RF_PWR));
|
||||||
@@ -53,17 +47,14 @@ void rf24_config(unsigned char channel, unsigned char payload_len){
|
|||||||
rf24_config_register(CONFIG, CONFIG_CRC);
|
rf24_config_register(CONFIG, CONFIG_CRC);
|
||||||
|
|
||||||
// auto ACK for pipe 0 and 1 (disable the rest of them)
|
// auto ACK for pipe 0 and 1 (disable the rest of them)
|
||||||
rf24_config_register(EN_AA, (1<<ENAA_P0)|(1<<ENAA_P1)|(0<<ENAA_P2)|(0<<ENAA_P3)|(0<<ENAA_P4)|(0<<ENAA_P5));
|
rf24_config_register(EN_AA, (1<<ENAA_P0)|(1<<ENAA_P1));
|
||||||
|
|
||||||
// rx address
|
// rx address
|
||||||
rf24_config_register(EN_RXADDR, (1<<ERX_P0)|(1<<ERX_P1)|(0<<ERX_P2)|(0<<ERX_P3)|(0<<ERX_P4)|(0<<ERX_P5));
|
rf24_config_register(EN_RXADDR, (1<<ERX_P0)|(1<<ERX_P1));
|
||||||
|
|
||||||
// auto retransmit, 1000us, 15 retransmits
|
// auto retransmit, 1000us, 15 retransmits
|
||||||
rf24_config_register(SETUP_RETR, (0x04<<ARD)|(0x0F<<ARC));
|
rf24_config_register(SETUP_RETR, (0x04<<ARD)|(0x0F<<ARC));
|
||||||
|
|
||||||
// fixed package length
|
|
||||||
rf24_config_register(DYNPD, 0x00);
|
|
||||||
|
|
||||||
rf24_rx();
|
rf24_rx();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -140,7 +131,7 @@ void rf24_get_data(unsigned char* data){
|
|||||||
rf24_serial_write(R_RX_PAYLOAD);
|
rf24_serial_write(R_RX_PAYLOAD);
|
||||||
unsigned char i = 0;
|
unsigned char i = 0;
|
||||||
|
|
||||||
for(i = 0; i < 4; i++){
|
for(i = 0; i < _payload_len; i++){
|
||||||
data[i] = rf24_serial_write(NOP);
|
data[i] = rf24_serial_write(NOP);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -187,10 +178,14 @@ unsigned char rf24_serial_write(unsigned char data){
|
|||||||
digital_write(_sck, LOW); // clock
|
digital_write(_sck, LOW); // clock
|
||||||
unsigned char i = 0, rx = 0;
|
unsigned char i = 0, rx = 0;
|
||||||
|
|
||||||
_delay_ms(40); // FIXME remove
|
#ifdef DEBUG
|
||||||
|
_delay_ms(40);
|
||||||
|
#endif
|
||||||
|
|
||||||
for(i = 0; i < 8; i++){
|
for(i = 0; i < 8; i++){
|
||||||
_delay_ms(5); // FIXME remove
|
#ifdef DEBUG
|
||||||
|
_delay_ms(5);
|
||||||
|
#endif
|
||||||
|
|
||||||
// write bit
|
// write bit
|
||||||
if(data&(1<<(7-i))){
|
if(data&(1<<(7-i))){
|
||||||
@@ -211,7 +206,9 @@ unsigned char rf24_serial_write(unsigned char data){
|
|||||||
digital_write(_sck, LOW);
|
digital_write(_sck, LOW);
|
||||||
}
|
}
|
||||||
|
|
||||||
_delay_ms(5); // FIXME remove
|
#ifdef DEBUG
|
||||||
|
_delay_ms(5);
|
||||||
|
#endif
|
||||||
digital_write(_mo, LOW);
|
digital_write(_mo, LOW);
|
||||||
|
|
||||||
return rx;
|
return rx;
|
||||||
|
|||||||
Reference in New Issue
Block a user