현성 김 / Mbed 2 deprecated 181202_Castone_design_master

Dependencies:   mbed nRF24L01P

Committer:
hyunsungkim
Date:
Sat Dec 01 17:40:15 2018 +0000
Branch:
RF24_library_test_tx
Revision:
17:6ae73e8943ce
Parent:
16:7a78838b3b8a
Child:
18:2342aa54dc9b
??? ????? ???? ?? ??

Who changed what in which revision?

UserRevisionLine numberNew contents of line
hyunsungkim 0:2dade6db4d3a 1 #include "mbed.h"
hyunsungkim 8:78294b936c70 2 #include "nRF24L01P.h"
hyunsungkim 3:690740ab3394 3 #include "beep.h"
hyunsungkim 3:690740ab3394 4
hyunsungkim 3:690740ab3394 5 #define nrf_CE D2
hyunsungkim 3:690740ab3394 6 #define nrf_CSN A3
hyunsungkim 3:690740ab3394 7 #define spi_SCK D13
hyunsungkim 3:690740ab3394 8 #define spi_MOSI D11
hyunsungkim 3:690740ab3394 9 #define spi_MISO D12
hyunsungkim 8:78294b936c70 10 #define spi_IRQ D4
hyunsungkim 8:78294b936c70 11
hyunsungkim 14:a4402559cd6e 12 #define TRANSFER_SIZE 15
hyunsungkim 16:7a78838b3b8a 13 #define MAX_BUFFER_SIZE 255
hyunsungkim 16:7a78838b3b8a 14 #define BUFFER_SIZE MAX_BUFFER_SIZE
hyunsungkim 16:7a78838b3b8a 15
hyunsungkim 16:7a78838b3b8a 16 #define DATA_PROTOCOL_BEGIN '$'
hyunsungkim 16:7a78838b3b8a 17 #define DATA_PROTOCOL_TOKEN ','
hyunsungkim 16:7a78838b3b8a 18 #define DATA_PROTOCOL_END '*'
hyunsungkim 8:78294b936c70 19
hyunsungkim 8:78294b936c70 20 nRF24L01P nrf(spi_MOSI, spi_MISO, spi_SCK, nrf_CSN, nrf_CE, spi_IRQ); // mosi, miso, sck, csn, ce, irq
hyunsungkim 8:78294b936c70 21
hyunsungkim 0:2dade6db4d3a 22 Serial pc(USBTX, USBRX);
hyunsungkim 0:2dade6db4d3a 23 PwmOut buzzer(D5);
hyunsungkim 0:2dade6db4d3a 24
hyunsungkim 8:78294b936c70 25 void beepStart();
hyunsungkim 8:78294b936c70 26 void endBeep();
hyunsungkim 15:217b3e5a2275 27 void initNRF();
hyunsungkim 11:1b56bb8ccd04 28 void dumpRFInfo();
hyunsungkim 10:02d3ca034103 29 void getPayload(int id, unsigned int count, int lspeed, int rspeed, char* txData);
hyunsungkim 16:7a78838b3b8a 30 int readSerialUntil(char *buffer, unsigned int buf_len, char terminator);
hyunsungkim 16:7a78838b3b8a 31 char* inspectData(char *buffer, int buf_len);
hyunsungkim 6:42ecdff5956a 32
hyunsungkim 16:7a78838b3b8a 33 int main()
hyunsungkim 16:7a78838b3b8a 34 {
hyunsungkim 12:cf6cbf1d1ebf 35 int inByteCnt = 0;
hyunsungkim 16:7a78838b3b8a 36 char buffer[BUFFER_SIZE];
hyunsungkim 8:78294b936c70 37 beepStart();
hyunsungkim 0:2dade6db4d3a 38 pc.baud(115200);
hyunsungkim 15:217b3e5a2275 39 printf("I'm Master\r\n");
hyunsungkim 15:217b3e5a2275 40 initNRF();
hyunsungkim 11:1b56bb8ccd04 41 dumpRFInfo();
hyunsungkim 17:6ae73e8943ce 42
hyunsungkim 16:7a78838b3b8a 43 memset(buffer, NULL, BUFFER_SIZE);
hyunsungkim 16:7a78838b3b8a 44
hyunsungkim 10:02d3ca034103 45 while(1) {
hyunsungkim 16:7a78838b3b8a 46 int result = readSerialUntil(buffer, BUFFER_SIZE, DATA_PROTOCOL_END);
hyunsungkim 16:7a78838b3b8a 47 if(result>0) {
hyunsungkim 16:7a78838b3b8a 48 char *data = inspectData(buffer, BUFFER_SIZE);
hyunsungkim 17:6ae73e8943ce 49 if(*data == DATA_PROTOCOL_BEGIN) {
hyunsungkim 17:6ae73e8943ce 50 printf("Data: %s\r\n", data);
hyunsungkim 17:6ae73e8943ce 51 free(data);
hyunsungkim 17:6ae73e8943ce 52 }
hyunsungkim 16:7a78838b3b8a 53 }
hyunsungkim 16:7a78838b3b8a 54 /*
hyunsungkim 15:217b3e5a2275 55 while(pc.readable()) {
hyunsungkim 15:217b3e5a2275 56 char inByte = pc.getc();
hyunsungkim 15:217b3e5a2275 57 if(inByteCnt > TRANSFER_SIZE+2) {
hyunsungkim 15:217b3e5a2275 58 printf("Data size overflow!\r\n");
hyunsungkim 15:217b3e5a2275 59 inByteCnt = 0;
hyunsungkim 15:217b3e5a2275 60 break;
hyunsungkim 15:217b3e5a2275 61 } else if(inByte == '\0') {
hyunsungkim 16:7a78838b3b8a 62 buffer[inByteCnt] = '\0';
hyunsungkim 16:7a78838b3b8a 63 printf("Command: %s\r\n", buffer);
hyunsungkim 16:7a78838b3b8a 64 nrf.write(NRF24L01P_PIPE_P0, buffer, TRANSFER_SIZE);
hyunsungkim 15:217b3e5a2275 65 inByteCnt=0;
hyunsungkim 15:217b3e5a2275 66 } else {
hyunsungkim 16:7a78838b3b8a 67 buffer[inByteCnt++] = inByte;
hyunsungkim 16:7a78838b3b8a 68 }
hyunsungkim 16:7a78838b3b8a 69 }*/
hyunsungkim 16:7a78838b3b8a 70 }
hyunsungkim 16:7a78838b3b8a 71 }
hyunsungkim 16:7a78838b3b8a 72
hyunsungkim 16:7a78838b3b8a 73 char* inspectData(char *buffer, int buf_len)
hyunsungkim 16:7a78838b3b8a 74 {
hyunsungkim 16:7a78838b3b8a 75 int start, end;
hyunsungkim 16:7a78838b3b8a 76 for(int i=0; buffer[i-1]!=DATA_PROTOCOL_BEGIN; i++) {
hyunsungkim 16:7a78838b3b8a 77 start = i;
hyunsungkim 16:7a78838b3b8a 78 if(i==buf_len) return 0;
hyunsungkim 16:7a78838b3b8a 79 }
hyunsungkim 16:7a78838b3b8a 80 for(int i=start+1; buffer[i-1]!=DATA_PROTOCOL_END; i++) {
hyunsungkim 16:7a78838b3b8a 81 end = i;
hyunsungkim 16:7a78838b3b8a 82 if(i==buf_len) return 0;
hyunsungkim 16:7a78838b3b8a 83 }
hyunsungkim 16:7a78838b3b8a 84 int data_len = end-start+1;
hyunsungkim 17:6ae73e8943ce 85
hyunsungkim 16:7a78838b3b8a 86 char *str = (char*)malloc(sizeof(char)*(data_len+1));
hyunsungkim 16:7a78838b3b8a 87 memset(str, NULL, data_len+1);
hyunsungkim 17:6ae73e8943ce 88 for(int i=0; i<data_len; i++) {
hyunsungkim 16:7a78838b3b8a 89 *(str+i) = buffer[start+i];
hyunsungkim 16:7a78838b3b8a 90 }
hyunsungkim 16:7a78838b3b8a 91 return str;
hyunsungkim 16:7a78838b3b8a 92 }
hyunsungkim 16:7a78838b3b8a 93
hyunsungkim 16:7a78838b3b8a 94 int readSerialUntil(char *buffer, unsigned int buf_len, char term)
hyunsungkim 16:7a78838b3b8a 95 {
hyunsungkim 16:7a78838b3b8a 96 int n=0;
hyunsungkim 16:7a78838b3b8a 97 char *str = (char*)malloc(sizeof(char)*buf_len);
hyunsungkim 16:7a78838b3b8a 98 memset(str, NULL, buf_len);
hyunsungkim 16:7a78838b3b8a 99 Timer t;
hyunsungkim 16:7a78838b3b8a 100 t.start();
hyunsungkim 16:7a78838b3b8a 101 int begin = t.read_ms();
hyunsungkim 16:7a78838b3b8a 102 while(t.read_ms()-begin < 100) {
hyunsungkim 16:7a78838b3b8a 103 if(pc.readable()) {
hyunsungkim 16:7a78838b3b8a 104 char inByte=pc.getc();
hyunsungkim 16:7a78838b3b8a 105 *(str+n)=inByte;
hyunsungkim 16:7a78838b3b8a 106 n++;
hyunsungkim 16:7a78838b3b8a 107 if(inByte == term) {
hyunsungkim 16:7a78838b3b8a 108 strcpy(buffer, str);
hyunsungkim 16:7a78838b3b8a 109 free(str);
hyunsungkim 16:7a78838b3b8a 110 return n;
hyunsungkim 16:7a78838b3b8a 111 }
hyunsungkim 16:7a78838b3b8a 112 if(n>buf_len) {
hyunsungkim 16:7a78838b3b8a 113 free(str);
hyunsungkim 16:7a78838b3b8a 114 return -1;
hyunsungkim 10:02d3ca034103 115 }
hyunsungkim 10:02d3ca034103 116 }
hyunsungkim 10:02d3ca034103 117 }
hyunsungkim 16:7a78838b3b8a 118 free(str);
hyunsungkim 16:7a78838b3b8a 119 return 0;
hyunsungkim 10:02d3ca034103 120 }
hyunsungkim 10:02d3ca034103 121
hyunsungkim 10:02d3ca034103 122 void dumpRFInfo()
hyunsungkim 10:02d3ca034103 123 {
hyunsungkim 10:02d3ca034103 124 printf( "nRF24L01+ Frequency : %d MHz\r\n", nrf.getRfFrequency() );
hyunsungkim 10:02d3ca034103 125 printf( "nRF24L01+ Output power : %d dBm\r\n", nrf.getRfOutputPower() );
hyunsungkim 10:02d3ca034103 126 printf( "nRF24L01+ Data Rate : %d kbps\r\n", nrf.getAirDataRate() );
hyunsungkim 10:02d3ca034103 127 printf( "nRF24L01+ TX Address : 0x%010llX\r\n", nrf.getTxAddress() );
hyunsungkim 10:02d3ca034103 128 printf( "nRF24L01+ RX Address : 0x%010llX\r\n", nrf.getRxAddress() );
hyunsungkim 10:02d3ca034103 129 }
hyunsungkim 10:02d3ca034103 130
hyunsungkim 15:217b3e5a2275 131 void initNRF()
hyunsungkim 10:02d3ca034103 132 {
hyunsungkim 15:217b3e5a2275 133 nrf.setTxAddress(0xDEADBEEF0F);
hyunsungkim 15:217b3e5a2275 134 nrf.powerUp();
hyunsungkim 15:217b3e5a2275 135 nrf.setTransferSize( TRANSFER_SIZE );
hyunsungkim 15:217b3e5a2275 136 nrf.setTransmitMode();
hyunsungkim 15:217b3e5a2275 137 nrf.enable();
hyunsungkim 15:217b3e5a2275 138
hyunsungkim 8:78294b936c70 139 }
hyunsungkim 8:78294b936c70 140
hyunsungkim 10:02d3ca034103 141 void getPayload(int id, unsigned int count, int lspeed, int rspeed, char* txData)
hyunsungkim 10:02d3ca034103 142 {
hyunsungkim 14:a4402559cd6e 143 *(txData+0) = '$';
hyunsungkim 14:a4402559cd6e 144 *(txData+1) = id/10+'0';
hyunsungkim 14:a4402559cd6e 145 *(txData+2) = id%10+'0';
hyunsungkim 14:a4402559cd6e 146 *(txData+3) = count/10000+'0';
hyunsungkim 14:a4402559cd6e 147 *(txData+4) = count/1000%10+'0';
hyunsungkim 14:a4402559cd6e 148 *(txData+5) = count/100%10+'0';
hyunsungkim 14:a4402559cd6e 149 *(txData+6) = count/10%10+'0';
hyunsungkim 14:a4402559cd6e 150 *(txData+7) = count%10+'0';
hyunsungkim 14:a4402559cd6e 151 *(txData+8) = lspeed>0?'+':'-';
hyunsungkim 14:a4402559cd6e 152 *(txData+9) = abs(lspeed)/10+'0';
hyunsungkim 14:a4402559cd6e 153 *(txData+10) = abs(lspeed)%10+'0';
hyunsungkim 14:a4402559cd6e 154 *(txData+11) = rspeed>0?'+':'-';
hyunsungkim 14:a4402559cd6e 155 *(txData+12) = abs(rspeed)/10+'0';
hyunsungkim 14:a4402559cd6e 156 *(txData+13) = abs(rspeed)%10+'0';
hyunsungkim 14:a4402559cd6e 157 *(txData+14) = '\0';
hyunsungkim 13:f0f9a5586e45 158 }
hyunsungkim 13:f0f9a5586e45 159
hyunsungkim 13:f0f9a5586e45 160 /*
hyunsungkim 13:f0f9a5586e45 161 xxyyyyyabbcddn
hyunsungkim 13:f0f9a5586e45 162
hyunsungkim 14:a4402559cd6e 163 14 chars
hyunsungkim 14:a4402559cd6e 164
hyunsungkim 13:f0f9a5586e45 165 xx: robot_id
hyunsungkim 13:f0f9a5586e45 166 yyyyy: packet_id
hyunsungkim 13:f0f9a5586e45 167 a: sign of lspeed
hyunsungkim 13:f0f9a5586e45 168 bb: lspeed
hyunsungkim 13:f0f9a5586e45 169 c: sign of rspeed
hyunsungkim 13:f0f9a5586e45 170 dd: rspeed
hyunsungkim 14:a4402559cd6e 171 n: NULL 0
hyunsungkim 13:f0f9a5586e45 172
hyunsungkim 14:a4402559cd6e 173 0100001+30+30
hyunsungkim 13:f0f9a5586e45 174 */