void ping_client(void) { util_init(); // Start up nRF905_init(); // Set address of this device uint8_t addrRx[] = RXADDR; nRF905_setRXAddress(addrRx); // Interrupts on sei(); // LED indicator DDRC |= _BV(DDC5); PORTC |= _BV(PORTC5); // Put into receive mode nRF905_receive(); uint8_t counter = 0; while(1) { // Make data char data[NRF905_MAX_PAYLOAD] = {0}; sprintf_P(data, PSTR("test %hhu"), counter); counter++; unsigned long startTime = millis(); // Set address of device to send to uint8_t addr[] = TXADDR; nRF905_setTXAddress(addr); // Set payload data nRF905_setData(data, sizeof(data)); // Send payload (send fails if other transmissions are going on, keep trying until success) while(!nRF905_send()); // Put into receive mode nRF905_receive(); // Make buffer for reply uint8_t buffer[NRF905_MAX_PAYLOAD]; bool success; // Wait for reply with timeout unsigned long sendStartTime = millis(); while(1) { success = nRF905_getData(buffer, sizeof(buffer)); if(success)// Got data break; // Timeout if(millis() - sendStartTime > TIMEOUT) break; } // If success toggle LED and send ping time over UART if(success) { unsigned int totalTime = millis() - startTime; PORTC ^= _BV(PORTC5); printf_P(PSTR("Ping time: %ums\n"), totalTime); // Print out ping contents printf_P(PSTR("Data from server: ")); for(uint8_t i=0;i<sizeof(buffer);i++) uart_put_nb(buffer[i]); puts_P(PSTR("")); } else puts_P(PSTR("Ping timed out")); _delay_ms(100); } }
void nRF905_init() { #ifdef ARDUINO pinMode(TRX_EN, OUTPUT); pinMode(PWR_MODE, OUTPUT); pinMode(TX_EN, OUTPUT); pinMode(CD, INPUT); #if !NRF905_AM_SW pinMode(AM, INPUT); #endif #if !NRF905_DR_SW pinMode(DR, INPUT); #endif pinMode(CSN, OUTPUT); digitalWrite(CSN, HIGH); SPI.begin(); SPI.setClockDivider(SPI_CLOCK_DIV2); #else TRX_EN_DDR |= (1<<TRX_EN_BIT); PWR_MODE_DDR |= (1<<PWR_MODE_BIT); TX_EN_DDR |= (1<<TX_EN_BIT); CD_DDR &= ~(1<<CD_BIT); #if !NRF905_AM_SW AM_DDR &= ~(1<<AM_BIT); #endif #if !NRF905_DR_SW DR_DDR &= ~(1<<DR_BIT); #endif spi_init(); #endif // Set default values config.reg1 = 0x00; config.reg2 = (0xC7 | NRF905_CLK_FREQ); config.payloadSize = NRF905_MAX_PAYLOAD; #if NRF905_INTERRUPTS memset((byte*)rxBuffer, 0, sizeof(rxBuffer)); gotData = false; // Set interrupts REG_EXTERNAL_INT_CTL |= BIT_EXTERNAL_INT_CTL; NRF905_INT_ON(); #endif // Startup nRF905_powerUp(); receiveMode(); enableStandbyMode(); // config(); // 4 byte TX and RX addresses setConfigRegister(NRF905_CMD_W_CONFIG | NRF905_REG_ADDR_WIDTH, 0b01000100); // Default config nRF905_setFrequency(NRF905_BAND_433, 433200000); nRF905_setAutoRetransmit(NRF905_AUTO_RETRAN_DISABLE); nRF905_setLowRxPower(NRF905_LOW_RX_DISABLE); nRF905_setTransmitPower(NRF905_PWR_10); nRF905_setCRCMode(NRF905_CRC_MODE_16); nRF905_setCRC(NRF905_CRC_ENABLE); nRF905_setClockOut(NRF905_OUTCLK_DISABLE); nRF905_setClockOutFreq(NRF905_OUTCLK_500KHZ); nRF905_setPayloadSize(NRF905_MAX_PAYLOAD); nRF905_setTXAddress(0xE7E7E7E7); nRF905_setRXAddress(0xE7E7E7E7); }