Exemplo n.º 1
0
int main(void)
{
    uint32_t i;
    uint32_t len;
    DelayInit();
    GPIO_QuickInit(HW_GPIOE, 6, kGPIO_Mode_OPP);
    UART_QuickInit(UART0_RX_PD06_TX_PD07, 115200);
    UART_CallbackRxInstall(HW_UART0, UART_ISR);
    UART_ITDMAConfig(HW_UART0, kUART_IT_Rx, true);
    
    printf("NRF24L01 test\r\n");
    /* 初始化 NRF2401模块 的SPI接口及片选 */
    PORT_PinMuxConfig(HW_GPIOE, 1, kPinAlt2); 
    PORT_PinMuxConfig(HW_GPIOE, 2, kPinAlt2); 
    PORT_PinMuxConfig(HW_GPIOE, 3, kPinAlt2); 
    PORT_PinMuxConfig(HW_GPIOE, 4, kPinAlt2);
    /* 初始化2401所需的CE引脚 */
    GPIO_QuickInit(HW_GPIOE, 0 , kGPIO_Mode_OPP);
    /* 初始化2401模块*/
    SPI_QuickInit(SPI1_SCK_PE02_SOUT_PE01_SIN_PE03, kSPI_CPOL0_CPHA0, 1*1000*1000);
    nrf24l01_init(HW_SPI1, 0);
    
    //检测是否存在无线设备,并配置接收和发送地址
    if(nrf24l01_probe())
    {
        printf("no nrf24l01 device found!\r\n");
    }
    /* 进入Rx模式 */
    nrf24l01_set_rx_mode();
    while(1)
    {
        /* 如果收到串口数据则发送 */
        if(gpRevChar != NULL)
        {
            nrf24l01_set_tx_mode();
            nrf24l01_write_packet(gpRevChar, 1);
            nrf24l01_set_rx_mode();
            gpRevChar = NULL;
        }
        /* 如果收到2401 的数据 则传输到串口 */
        if(!nrf24l01_read_packet(NRF2401RXBuffer, &len))
        {
            i = 0;
            while(len--)
            {
                UART_WriteByte(HW_UART0, NRF2401RXBuffer[i++]);
            }
        }
    }
}
Exemplo n.º 2
0
int main()
{
	/* Semaphore creation */
	vSemaphoreCreateBinary(ahrs_task_semaphore);
	vSemaphoreCreateBinary(flight_control_task_semaphore);

	/* Peripheral initialization */
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);
	led_init();
	debug_port_init();
	usart3_init(57600);
	i2c1_init();
	spi1_init();
	timer1_init();
	pwm_timer4_init();
	pwm_timer5_init();
	pwm_capture_timer2_init();
	pwm_capture_timer3_init();
	pwm_capture_timer8_init();

	//Make sure all the peripheral is finished the initialization
	delay_ms(5);

	/* Device initialization */
	while(mpu6050_init());
	while(hmc5983_init());
	nrf24l01_init();
	motor_init();

	/* Task creation */
	//Attitude and Heading Reference System (AHRS) task
	xTaskCreate(ahrs_task, (portCHAR *)"AHRS task",
		4096, NULL, tskIDLE_PRIORITY + 3, NULL);

	xTaskCreate(flight_control_task, (portCHAR *)"Flight control task",
		4096, NULL, tskIDLE_PRIORITY + 2, NULL);

#ifndef DEBUG_PRINT
	//USART plot task
	xTaskCreate(usart_plot_task, (portCHAR *)"USART plot task",
		2048, NULL, tskIDLE_PRIORITY + 1, NULL);
#endif

	/* Start schedule */
	vTaskStartScheduler();

	return 0;
}
Exemplo n.º 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);
				}
			}
		}
	}
}
Exemplo n.º 4
0
void rf24test()
{
    uint8_t test_pipe = 0;
    byte* payload = "qwerasd1qwerasd2qwerasd3qwerasd4";
    byte* rx_pld = "11111111111111111111111111111111";
    uint8_t payload_len = strlen(payload);
    memset(rx_pld, '\0', payload_len);
	nrf24l01_conf_t writer;
    nrf24l01_init_config(&writer);
	writer.ce_port= &PORTD;
	writer.ce_pin = PD6;
	writer.ss_port = &PORTC;
	writer.ss_pin = PC4;
    writer.pipe_addr_len = 0;
    usart_write_string_line("Initializing..");
	
	DBG_VALUE("Writer: Init: ", nrf24l01_init(&writer, &DDRD, &DDRC));
	DBG_VALUE("Writer: Speed: ", nrf24l01_get_speed(&writer));
	DBG_VALUE("Writer: Channel: ", nrf24l01_get_channel(&writer));
	DBG_VALUE("Writer: Status: ", nrf24l01_get_status(&writer));
    nrf24l01_set_retries(&writer, 4, 2);
    nrf24l01_set_power_amplifier(&writer, NRF24L01_PA_MAX);
    nrf24l01_enable_dynamic_payload_on_pipe(&writer, test_pipe, NRF24L01_ENABLE);
    nrf24l01_print_addresses(&writer);
	
    usart_write_string_line("Preparing for write:");
    nrf24l01_prepare_for_write_to_addr(&writer, (byte*) "2Node", payload_len,NRF24L01_DISABLE);
    nrf24l01_print_status(&writer);

    
    while(1)
    {
        nrf24l01_set_retries(&writer, 1, 1);
        usart_write_string_line("Writing:");
        nrf24l01_write(&writer, payload, payload_len - 5);
        nrf24l01_print_status(&writer);
        
        usart_write_string_line("Ending writing:");
        nrf24l01_end_writing_keep_irq(&writer);
        nrf24l01_print_status(&writer);
        usart_read_byte();
    }
}
Exemplo n.º 5
0
Arquivo: main.c Projeto: eerimoq/simba
int main()
{
    struct nrf24l01_driver_t nrf24l01;
    struct pin_driver_t pin[3];
    uint8_t state[32];

    sys_start();

    nrf24l01_init(&nrf24l01,
                  &spi_device[0],
                  &pin_d10_dev,
                  &pin_d6_dev,
                  &exti_device[1],
                  SERVER_ADDRESS);
    nrf24l01_start(&nrf24l01);

    /* Initialize led pins. */
    pin_init(&pin[0], &pin_d7_dev, PIN_OUTPUT);
    pin_init(&pin[1], &pin_d8_dev, PIN_OUTPUT);
    pin_init(&pin[2], &pin_d9_dev, PIN_OUTPUT);

    pin_write(&pin[0], 0);
    pin_write(&pin[1], 0);
    pin_write(&pin[2], 0);

    while (1) {
        /* Read state from client. */
        nrf24l01_read(&nrf24l01, state, sizeof(state));
        std_printf(FSTR("state = 0x%x\r\n"), (int)state[0]);

        /* Upadte LED. */
        pin_write(&pin[0], (state[0] >> 0) & 0x1);
        pin_write(&pin[1], (state[0] >> 1) & 0x1);
        pin_write(&pin[2], (state[0] >> 2) & 0x1);
    }

    return (0);
}
Exemplo n.º 6
0
void sMCIfaceRF_init() {
	nrf24l01_init();
}
Exemplo n.º 7
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
}
Exemplo n.º 8
0
//main here
int main(void) {
	uint8_t txrxrole = 0; // 1 transmitter 0 receiver
	uint8_t i = 0;

	//nrf24l01 variables
	uint8_t bufferout[NRF24L01_PAYLOAD];
	uint8_t bufferin[NRF24L01_PAYLOAD];

	#if DEBUGENABLED == 1
	//init uart
	USART_Init(103);
	#endif
	//LCD init
	lcd_init();
	lcd_gotoxy1(0);
	
	//init nrf24l01
	nrf24l01_init();

	//init interrupt
	sei();

	txrxrole = ROLERX;         /////////////////////////////////////////////////

	#if DEBUGENABLED == 1
	if(txrxrole == ROLETX)
	uart_putc('T');
	else if(txrxrole == ROLERX)
	uart_putc('R');
	#endif

	//setup buffer
	for(i=0; i<sizeof(bufferout); i++)
	bufferout[i] = i+'a';
	for(i=0; i<sizeof(bufferin); i++)
	bufferin[i] = 0;

	//sending buffer addresses
	uint8_t sendpipe = 0;
	uint8_t addrtx0[NRF24L01_ADDRSIZE] = NRF24L01_ADDRP0;
	uint8_t addrtx1[NRF24L01_ADDRSIZE] = NRF24L01_ADDRP1;
	uint8_t addrtx2[NRF24L01_ADDRSIZE] = NRF24L01_ADDRP2;
	uint8_t addrtx3[NRF24L01_ADDRSIZE] = NRF24L01_ADDRP3;
	uint8_t addrtx4[NRF24L01_ADDRSIZE] = NRF24L01_ADDRP4;
	uint8_t addrtx5[NRF24L01_ADDRSIZE] = NRF24L01_ADDRP5;

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

	//main loop
	for(;;)
	{
		if(txrxrole == ROLETX)
		{//Tx
			#if DEBUGENABLED == 1
			char pipebuffer[5];
			uart_puts("sending data, on pipe ");
			itoa(sendpipe, pipebuffer, 10);
			uart_puts(pipebuffer);
			uart_puts("... ");
			#endif

				if(sendpipe == 0){
				//set tx address for pipe 0
				nrf24l01_settxaddr(addrtx0);
				} else if(sendpipe == 1) {
				//set tx address for pipe 1
				nrf24l01_settxaddr(addrtx1);
				} else if(sendpipe == 2) {
				//set tx address for pipe 2
				nrf24l01_settxaddr(addrtx2);
				} else if(sendpipe == 3) {
				//set tx address for pipe 3
				nrf24l01_settxaddr(addrtx3);
				} else if(sendpipe == 4) {
				//set tx address for pipe 4
				nrf24l01_settxaddr(addrtx4);
				} else if(sendpipe == 5) {
				//set tx address for pipe 5
				nrf24l01_settxaddr(addrtx5);
			}

			//write buffer
			uint8_t writeret = nrf24l01_write(bufferout);

			#if DEBUGENABLED == 1
			if(writeret == 1)
			uart_puts("ok\r\n");
			else
			uart_puts("failed\r\n");
			#endif

			sendpipe++;
			sendpipe%=6;
			
			#if DEBUGENABLED == 0
		}
		#endif
		#if DEBUGENABLED == 1
		_delay_ms(1000);
		#endif
	}
	
	else if(txrxrole == ROLERX)