Exemplo n.º 1
0
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);					
	}
}
Exemplo n.º 2
0
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);
}