sc_string sMCIfaceRF_getData() {
	uint8_t pipe = 0;
	if (nrf24l01_readready(&pipe)) {
		LCDWriteIntXY(0,1,pipe,1);
		if (pipe==0) {
			//clear buffer
			for(uint8_t i=0; i<NRF24L01_PAYLOAD; i++) bufferin[i] = 0;
			
			//read buffer
			nrf24l01_read(pipe,bufferin);
			return bufferin;
		}
	}
	return "";
}
sc_boolean sMCIfaceRF_getCheck() {
	uint8_t pipe = 0;
	if (nrf24l01_readready(&pipe)) {
		if (pipe==5) {
			//clear buffer
			for(uint8_t i=0; i<NRF24L01_PAYLOAD; i++) bufferin[i] = 0;
			
			//read buffer
			nrf24l01_read(pipe,bufferin);
			
			for(uint8_t i=0; i<NRF24L01_PAYLOAD; i++) if (bufferin[i]!=1) return false;
			return true;
		}
	}
	return false;
}
Example #3
0
int main(void) {

#ifdef DEBUGPRINT
	uart_init(UART_BAUD_SELECT_DOUBLE_SPEED(57600, F_CPU));
#endif

	char* node_address = "OWRF1";
	node_address[4] += NODENUM;

	OWInit(5);

	nrf24l01_init();
	nrf24l01_settxaddr((uint8_t*) node_address);
	nrf24l01_setrxaddr(0, (uint8_t*) node_address);
	nrf24l01_setrxaddr(1, (uint8_t*) "OWRF0");

	sei();

	for (;;) {
		uint8_t pipe;
		if (nrf24l01_readready(&pipe)) {
			int len = owrf_read(transfer_buf);
			if (len != -1) {
#ifdef DEBUGPRINT
				debugPrint("channel=%d command=%X datalen=%d\r\n", transfer_buf[0], transfer_buf[1], transfer_buf[2]);
				for (int i = 0; i < transfer_buf[2]; i++) {
					debugPrint(">%02X", transfer_buf[i+3]);
				}
				debugPrint("\r\n");
#endif
				if (transfer_buf[0] == NODENUM) {
					len = doSlave(transfer_buf + 1) + 3;
#ifdef DEBUGPRINT
					debugPrint("retval=%X datalen=%d\r\n", transfer_buf[1], transfer_buf[2]);
					for (int i = 0; i < transfer_buf[2]; i++) {
						debugPrint("<%02X", transfer_buf[i+3]);
					}
					debugPrint("\r\n");
#endif
					_delay_ms(5);
					owrf_write(transfer_buf, len);
				}
			}
		}
	}
}
Example #4
0
//main here
int main(void) {
	uint8_t i = 0;
	char *wheel = "|/-\\";

	//sending buffer addresses
	uint8_t sendpipe = 0;
	uint8_t addrtx0[NRF24L01_ADDRSIZE] = NRF24L01_ADDRP0;

#if defined(TX)
	long *ptr = 0;
	double qw = 1.0f;
	double qx = 0.0f;
	double qy = 0.0f;
	double qz = 0.0f;
	double roll = 0.0f;
	double pitch = 0.0f;
	double yaw = 0.0f;

	//nrf24l01 variables
	uint8_t bufferout[NRF24L01_PAYLOAD];
#elif defined(RX)
	uint8_t bufferin[NRF24L01_PAYLOAD];
#endif

	//init uart
	uart_init(UART_BAUD_SELECT(UART_BAUD_RATE, F_CPU));
	mpu6050_init();
	nrf24l01_init();
	sei();

	uart_puts("\r\nUART initialized... \r\n");
	_delay_ms(50);
	uart_puts("nrf24l01+ initialized... \r\n");

	//init nrf24l01
	_delay_ms(50);
#if defined(TX)
	mpu6050_dmpInitialize();
	mpu6050_dmpEnable();
	_delay_ms(10);
	uart_puts("mpu6050 initialized... \r\n");
#endif

	//init interrupt
	uart_puts("interrupts enabled... \r\n");

	for(i=0; i<100; i++) {
		uart_putc(wheel[i%4]);
		_delay_ms(10);
		uart_putc('\b');
	}
	uart_puts("\r\n");

#if defined(TX)
	uart_puts("starting as tx...\r\n");
#elif defined(RX)
	uart_puts("starting as rx...\r\n");
#endif

	//setup buffer
#if defined(TX)
	for(i=0; i<sizeof(bufferout); i++)
		bufferout[i] = ' ';
#elif defined(RX)
	for(i=0; i<sizeof(bufferin); i++)
		bufferin[i] = 0;
#endif

#if NRF24L01_PRINTENABLE == 1
	nrf24l01_printinfo(uart_puts, uart_putc);
#endif

	//main loop
	nrf24l01_settxaddr(addrtx0);

#if defined(TX)
	for(;;) {
		//tx
		char pipebuffer[5];
		itoa(sendpipe, pipebuffer, 10);

		if(mpu6050_getQuaternionWait(&qw, &qx, &qy, &qz))
			mpu6050_getRollPitchYaw(qw, qx, qy, qz, &roll, &pitch, &yaw);

		_delay_ms(10);

		//quaternion
		ptr = (long *)(&qw);
		for (i=0; i<4; i++)
			*(bufferout+i) = *ptr>>(i*8);

		ptr = (long *)(&qx);
		for (i=0; i<4; i++)
			*(bufferout+i+4) = *ptr>>(i*8);

		ptr = (long *)(&qy);
		for (i=0; i<4; i++)
			*(bufferout+i+8) = *ptr>>(i*8);

		ptr = (long *)(&qz);
		for (i=0; i<4; i++)
			*(bufferout+i+12) = *ptr>>(i*8);

		// roll pitch yaw
		ptr = (long *)(&roll);
		for (i=0; i<4; i++)
			*(bufferout+i+16) = *ptr>>(i*8);

		ptr = (long *)(&pitch);
		for (i=0; i<4; i++)
			*(bufferout+i+20) = *ptr>>(i*8);

		ptr = (long *)(&yaw);
		for (i=0; i<4; i++)
			*(bufferout+i+24) = *ptr>>(i*8);

		nrf24l01_write(bufferout);
	}
#elif defined(RX)
	for(;;) {
		//rx
		uint8_t pipe = 0;
		if(nrf24l01_readready(&pipe)) { //if data is ready
			//read buffer
			nrf24l01_read(bufferin);

			for (i=0; i < 4*7; i++)
				uart_putc(*(bufferin+i));
			uart_putc('\n');
		}
		_delay_ms(10);
	}
#endif
}