sc_boolean sMCIfaceRF_sendReq(const sc_integer cmd, const sc_integer id) { unsigned char num; unsigned char mod; //clear buffer for(uint8_t i=0; i<sizeof(bufferout); i++) bufferout[i] = 0; //Lenh cho data: 1-xong mon an, 2-huy mon bufferout[0]=cmd+'0'; //Doi cmd tu so sang chu so //So thu tu mon an bufferout[1]=id+'0'; //Set Address for Data nrf24l01_settxaddr(nrf24l01_addrtx); uint8_t writeret = nrf24l01_write(bufferout); _delay_ms(1); if(writeret == 1) { return true; } else { return false; } }
sc_boolean sMCIfaceRF_sendCheck() { //set all buffer for(uint8_t i=0; i<NRF24L01_PAYLOAD; i++) bufferout[i] = 1; //Set Address for check nrf24l01_settxaddr(nrf24l01_addr5); uint8_t writeret = nrf24l01_write(bufferout); _delay_ms(1); if(writeret == 1) { return true; } else { return false; } }
sc_boolean sMCIfaceRF_sendData(const sc_integer cmd, const sc_integer id, const sc_integer dish_id, const sc_integer amount) { unsigned char num; unsigned char mod; //clear buffer for(uint8_t i=0; i<sizeof(bufferout); i++) bufferout[i] = 0; //Lenh cho data: 1-goi mon, 2-huy mon, 3-thanh toan, 4-goi boi ban bufferout[0]=cmd+'0'; //Doi cmd tu so sang chu so //Chuyen doi ma ban an hoac nha bep num=id; for (int i=1;i>=0;i--) { mod=num % 10; num/=10; bufferout[i+1]=mod+'0'; } //Chuyen doi ma mon an num=dish_id; for (int i=2;i>=0;i--) { mod=num % 10; num/=10; bufferout[3+i]=mod+'0'; } //Chuyen doi so luong mon an num=amount; for (int i=1;i>=0;i--) { mod=num % 10; num/=10; bufferout[6+i]=mod+'0'; } //Set Address for Data nrf24l01_settxaddr(nrf24l01_addrtx); uint8_t writeret = nrf24l01_write(bufferout); _delay_ms(1); if(writeret == 1) { return true; } else { return false; } }
sc_boolean sMCIfaceRF_sendMsg(const sc_string msg) { //clear buffer for(uint8_t i=0; i<NRF24L01_PAYLOAD; i++) { if (i<strlen(msg)) bufferout[i]=msg[i]; else bufferout[i] = 0; } //Set Address for Data nrf24l01_settxaddr(nrf24l01_addrtx); uint8_t writeret = nrf24l01_write(bufferout); _delay_ms(1); if(writeret == 1) { return true; } else { return false; } }
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(); } }
//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 }
//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)