上位机
Dependencies: BufferedSerial mbed nRF24L01P
main.cpp
- Committer:
- wanzq
- Date:
- 2017-10-11
- Revision:
- 0:f7767412c8b5
File content as of revision 0:f7767412c8b5:
#include "mbed.h" #include "BufferedSerial.h" #include"nRF24L01P.h" Serial pc(PA_9, PA_10, 115200);//PA_9 PA_10 作为串口1连接串口转usb模块连接电脑 BufferedSerial mod(PA_2, PA_3, 32);//PA_2,PA_3作为第二个串口与jy-901的串口端连接,进行通信 nRF24L01P my_nrf24l01p(PB_15, PB_14, PB_13, PB_8, PB_9,PB_7); // mosi, miso, sck, csn, ce, irq int state, token, payloadLen, recvLen; unsigned char payloadBuf[16]; void parseCmpt(int token, unsigned char* payloadBuf, int payloadLen) { float data[3]; switch(token){ case 0x51: for (int i = 0; i < 3; ++i) { data[i] = payloadBuf[i*2]|((int)payloadBuf[i*2+1]<<8); data[i] = data[i] * 16 * 9.8 / 32768; } //pc.printf("Ax=%.2f\tAy=%.2f\tAz=%.2f\r\n", data[0], data[1], data[2]); break; case 0x52: for (int i = 0; i < 3; ++i) { data[i] = payloadBuf[i*2]|((int)payloadBuf[i*2+1]<<8); data[i] = data[i] * 2000 / 32768; } //pc.printf("Wx=%.2f\tWy=%.2f\tWz=%.2f\r\n", data[0], data[1], data[2]); break; case 0x53: for (int i = 0; i < 3; ++i) { data[i] = payloadBuf[i*2]|((int)payloadBuf[i*2+1]<<8); data[i] = data[i] * 180 / 32768; } pc.printf("Roll=%.2f\tPitch=%.2f\tYaw=%.2f\r\n", data[0], data[1], data[2]); break; case 0x54: for (int i = 0; i < 3; ++i) { data[i] = payloadBuf[i*2]|((int)payloadBuf[i*2+1]<<8); } //pc.printf("Hx=%.2f\tHy=%.2f\tHz=%.2f\r\n", data[0], data[1], data[2]); break; } } void parseInput(const char* data, int len) { for (int i = 0; i < len; ++i) { unsigned char ch = data[i], sum; switch(state){ case 0: if(ch == 0x55) state = 1; break; case 1: token = ch; if(0x51 <= token && token <= 0x54){ payloadLen = 8; recvLen = 0; state = 2; }else{ pc.printf("%s %x\r\n", "unknown token", token); state = 0; } break; case 2: payloadBuf[recvLen++] = ch; if(recvLen == payloadLen){ state = 3; } break; case 3: sum = 0x55; sum += token; for (int i = 0; i < payloadLen; ++i) { sum += payloadBuf[i]; } if(sum != ch){ pc.printf("wrong checksum\r\n"); }else{ parseCmpt(token, payloadBuf, payloadLen); // myled = !myled; } state = 0; break; } } } int main() { while(1) { char ch; if(mod.readable()){ ch = mod.getc(); pc.printf(&ch); } }//只需将jy-901模块从串口传出的信息原封不动传到电脑即可 在电脑端打开jy模块自带的上位机软件即可查看jy模块的各种信息及可视化后的图像。 /* #define TRANSFER_SIZE 4 char txData[TRANSFER_SIZE], rxData[TRANSFER_SIZE]; int txDataCnt = 0; int rxDataCnt = 0; my_nrf24l01p.powerUp(); // Display the (default) setup of the nRF24L01+ chip pc.printf( "nRF24L01+ Frequency : %d MHz\r\n", my_nrf24l01p.getRfFrequency() ); pc.printf( "nRF24L01+ Output power : %d dBm\r\n", my_nrf24l01p.getRfOutputPower() ); pc.printf( "nRF24L01+ Data Rate : %d kbps\r\n", my_nrf24l01p.getAirDataRate() ); pc.printf( "nRF24L01+ TX Address : 0x%010llX\r\n", my_nrf24l01p.getTxAddress() ); pc.printf( "nRF24L01+ RX Address : 0x%010llX\r\n", my_nrf24l01p.getRxAddress() ); pc.printf( "Type keys to test transfers:\r\n (transfers are grouped into %d characters)\r\n", TRANSFER_SIZE ); my_nrf24l01p.setTransferSize( TRANSFER_SIZE ); my_nrf24l01p.setReceiveMode(); my_nrf24l01p.enable(); /* while (1) { // If we've received anything over the host serial link... if ( pc.readable() ) { // ...add it to the transmit buffer txData[txDataCnt++] = pc.getc(); // If the transmit buffer is full if ( txDataCnt >= sizeof( txData ) ) { // Send the transmitbuffer via the nRF24L01+ my_nrf24l01p.write( NRF24L01P_PIPE_P0, txData, txDataCnt ); txDataCnt = 0; } // Toggle LED1 (to help debug Host -> nRF24L01+ communication) myled1 = !myled1; } // If we've received anything in the nRF24L01+... if ( my_nrf24l01p.readable() ) { // ...read the data into the receive buffer rxDataCnt = my_nrf24l01p.read( NRF24L01P_PIPE_P0, rxData, sizeof( rxData ) ); // Display the receive buffer contents via the host serial link for ( int i = 0; rxDataCnt > 0; rxDataCnt--, i++ ) { pc.putc( rxData[i] ); } // Toggle LED2 (to help debug nRF24L01+ -> Host communication) myled2 = !myled2; } }*/ }