/* Send data using the nRF radio */ void radioTask(void *pvParameters) { (void) pvParameters; uint8_t rfData[NRF24_PAYLOAD_LEN]; uint8_t rcvData[NRF24_PAYLOAD_LEN]; uint8_t pktCounter = 0; uint8_t blinkCounter = 0; const portTickType blinkDelay = 250 / portTICK_RATE_MS; const portTickType sendDelay = 5000 / portTICK_RATE_MS; rfData[0] = 0xB1; rfData[1] = 0x3A; rfData[2] = 0x23; while(1) { if(nrf24_dataReady()) { nrf24_getData(rcvData); // Format message for debugging char debugRcvString[3*6] = {0}; for (uint8_t i=0; i < NRF24_PAYLOAD_LEN; i++) { sprintf(debugRcvString+(3*i), "%02X ", rcvData[i]); } printf("Received: %s\n", debugRcvString); } rfData[3] = pktCounter++; nrf24_send(rfData); while(nrf24_isSending()); char debugSendString[3*6] = {0}; for (uint8_t i = 0; i < NRF24_PAYLOAD_LEN; i++) { sprintf(debugSendString+(3*i), "%02X ", rfData[i]); } printf("Sent: %s\n", debugSendString); if(nrf24_lastMessageStatus()) { //there was a send problem }else{ //transmission was ok } for(blinkCounter = 1 + nrf24_retransmissionCount(); blinkCounter > 0; --blinkCounter) { PORTC |= _BV(PORTC3); vTaskDelay(blinkDelay); PORTC &= ~_BV(PORTC3); vTaskDelay(blinkDelay); } nrf24_powerUpRx(); vTaskDelay(sendDelay); } }
/*---------------------------------------------------------------------------*/ static PT_THREAD(nrf24_thread(struct pt *pt)) { PT_BEGIN(pt); /* init hardware pins */ nrf24_init(); /* Channel #2 , payload length: 8 */ nrf24_config(2,8); /* Set the device addresses */ nrf24_tx_address(tx_address); nrf24_rx_address(rx_address); uint32_t counter; uint16_t temp; int16_t realval; while(1) { PT_WAIT_UNTIL(pt,nrf24_dataReady()); dbg(PSTR("> -------------------------------------\r\n")); nrf24_getData(data_array); temp = (data_array[0]<<8)+data_array[1]; realval = temp * 10; realval /= 11; realval -= 500; dbg(PSTR("> RAW Temp: %u\r\n"),temp); dbg(PSTR("> Temp: %u\r\n"),realval); temp = (data_array[2]<<8)+data_array[3]; dbg(PSTR("> Batt: %u\r\n"),temp); counter = (data_array[4]<<24)+(data_array[5]<<16)+(data_array[6]<<8)+data_array[7]; dbg(PSTR("> Counter: %u\r\n"),counter); } PT_END(pt); }
int main(int argc, char **argv){ uint8_t data_array[4]; uint8_t tx_address[5] = { 0xE7, 0xE7, 0xE7, 0xE7, 0xE7 }; uint8_t rx_address[5] = { 0xD7, 0xD7, 0xD7, 0xD7, 0xD7 }; if (!bcm2835_init()) return 1; mysql_connect(); /* init hardware pins */ nrf24_init(); /* Channel #2 , payload length: 4 */ nrf24_config(2, 4); /* Set the device addresses */ nrf24_tx_address(tx_address); nrf24_rx_address(rx_address); printf("Configured\n"); while (1){ if (nrf24_dataReady()) { nrf24_getData(data_array); printf("> %d %d %d %d \n", data_array[0], data_array[1], data_array[2], data_array[3]); if (argc>1) { if (argv[1][0]=='1') { writeCpm( data_array[0], data_array[1], data_array[2], data_array[3]); } } } } mysql_disconnect(); bcm2835_close(); return 0; }
static void nrf24_test(void) { uint8_t rx_address[5] = {0xA7,0x95,0xF1,0x36,0x07}; uint8_t tx_address[5] = {0xA7,0x95,0xF1,0x36,0x06}; //uint8_t tx_address[5] = {0x17,0x97,0xA7,0xA7,0xD7}; uint8_t addr[10] = {0x1}; uint8_t val = 0x17; uint8_t reg; uint8_t data_array[6]; uint32_t counter = 0; spi_delay(1000000); /* init hardware pins */ nrf24_init(); if (spi_init() < 0) { printf("ERRRRROR SPI!\n"); } /* Returned value is not correct on the first read, who knows why... */ nrf24_readRegister(CONFIG, ®, 1); nrf24_readRegister(CONFIG, ®, 1); printf("CONFIG (before configured) = %x\n", reg); nrf24_readRegister(EN_AA, ®, 1); printf("EN_AA = %x\n", reg); nrf24_readRegister(RF_SETUP, ®, 1); printf("RF_SETUP = %x\n", reg); nrf24_readRegister(SETUP_AW, ®, 1); printf("SETUP_AW = %x\n", reg); nrf24_readRegister(SETUP_RETR, ®, 1); printf("SETUP_RETR = %x\n", reg); nrf24_readRegister(FIFO_STATUS, ®, 1); printf("FIFO_STATUS = %x\n", reg); nrf24_readRegister(RF_CH, ®, 1); printf("RF_CH = %x\n", reg); nrf24_writeRegister(RF_CH, &val, 1); nrf24_readRegister(RF_CH, ®, 1); printf("RF_CH = %x\n", reg); val = 2; nrf24_writeRegister(RF_CH, &val, 1); nrf24_readRegister(RF_CH, ®, 1); printf("RF_CH = %x\n", reg); #if 1 nrf24_readRegister(RX_ADDR_P0, addr, 5); printf("RX_ADDR_P0: %x %x %x %x %x\n", addr[0], addr[1], addr[2], addr[3], addr[4]); nrf24_writeRegister(RX_ADDR_P0, tx_address,5); spi_delay(1000000); nrf24_readRegister(RX_ADDR_P0, addr, 5); printf("RX_ADDR_P0: %x %x %x %x %x\n", addr[0], addr[1], addr[2], addr[3], addr[4]); spi_delay(1000000); nrf24_readRegister(RF_CH, ®, 1); nrf24_readRegister(TX_ADDR, addr, 5); printf("TX_ADDR: %x %x %x %x %x\n", addr[0], addr[1], addr[2], addr[3], addr[4]); nrf24_writeRegister(TX_ADDR, tx_address,5); nrf24_readRegister(TX_ADDR, addr, 5); printf("TX_ADDR: %x %x %x %x %x\n", addr[0], addr[1], addr[2], addr[3], addr[4]); spi_delay(1000000); nrf24_readRegister(RX_ADDR_P1, addr, 5); printf("RX_ADDR_P1: %x %x %x %x %x\n", addr[0], addr[1], addr[2], addr[3], addr[4]); nrf24_writeRegister(RX_ADDR_P1, rx_address,5); nrf24_readRegister(RX_ADDR_P1, addr, 5); printf("RX_ADDR_P1: %x %x %x %x %x\n", addr[0], addr[1], addr[2], addr[3], addr[4]); #endif /* Channel #2 , payload length: 4 */ nrf24_config(16,6); nrf24_readRegister(FIFO_STATUS,®,1); printf("!> 1 FIFO_STATUS = %2X\n", reg); spi_delay(1000000); nrf24_readRegister(CONFIG, ®, 1); nrf24_readRegister(CONFIG, ®, 1); printf("CONFIG (after configured) = %x\n", reg); nrf24_readRegister(EN_AA, ®, 1); printf("EN_AA = %x\n", reg); nrf24_readRegister(RF_SETUP, ®, 1); printf("RF_SETUP = %x\n", reg); nrf24_readRegister(TX_ADDR, addr, 5); printf("TX addr is: %x %x %x %x %x\n", addr[0], addr[1], addr[2], addr[3], addr[4]); //spi_delay(1000000); nrf24_readRegister(RX_ADDR_P0, addr, 5); printf("RX addr is: %x %x %x %x %x\n", addr[0], addr[1], addr[2], addr[3], addr[4]); //spi_delay(1000000); nrf24_readRegister(RX_ADDR_P1, addr, 5); printf("RX_ADDR_P1 addr is: %x %x %x %x %x\n", addr[0], addr[1], addr[2], addr[3], addr[4]); nrf24_readRegister(FIFO_STATUS,®,1); printf("!!!!!!> 2 FIFO_STATUS = %2X\n", reg); /* Set the device addresses */ //nrf24_tx_address(rx_address); //nrf24_rx_address(rx_address); //nrf24_ce_digitalWrite(HIGH); //reg = nrf24_getStatus(); //printf("STATUS = %2X\n", reg); nrf24_readRegister(FIFO_STATUS,®,1); printf("!!!!!!> 3 FIFO_STATUS = %2X\n", reg); while(1) { if(nrf24_dataReady()) { counter = 0; //reg = nrf24_getStatus(); //printf("STATUS = %x\n", reg); nrf24_getData(data_array); printf("> "); printf("%2X ",data_array[0]); printf("%2X ",data_array[1]); printf("%2X ",data_array[2]); printf("%2X ",data_array[3]); printf("%2X ",data_array[4]); printf("%2X\r\n",data_array[5]); //spi_delay(1000); } else if (counter > 100000) { reg = nrf24_getStatus(); printf("(counter > 100000) STATUS = %2X\n", reg); nrf24_readRegister(FIFO_STATUS,®,1); printf("(counter > 100000) FIFO_STATUS = %2X\n", reg); } counter++; } }