UD-GS01治具の試作プログラムです
Dependencies: mbed nRF24L01P SDFileSystem
Diff: Goto_UD-GS01.cpp
- Revision:
- 0:53b18a9251ab
- Child:
- 1:960cd07d2ae7
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Goto_UD-GS01.cpp Mon Dec 07 07:55:55 2020 +0000 @@ -0,0 +1,133 @@ + +//受信用と送信用を一つにする!ボタンで切り替え(元のプログラムは44で、44-2を貼り付ける) + +#include "mbed.h" +#include "nRF24L01P.h" +RawSerial pc(PA_2, PA_3,115200); //ここはpcとケーブルでつないだときにシリアル通信させてたところだから、ここから牛のUARTにつなぐだけで大丈夫なはず。→ここは元々ST基板のPC部分(パキッと折れそうな方)との通信用に使われてるから他のシリアルは無理らしい。 +RawSerial UDGS01(PA_0, PA_1, 115200); // UD-GS01とのシリアル通信用にUARTピンを新たに定義。 +Ticker interrput; + +#define TRANSFER_SIZE 32 +int out_flg = 0; +int rcv_flg = 0; +int snd_flg = 0; +char txData[TRANSFER_SIZE*2]; /*char型で一文字ずつ配列に入れていき、表示する。char型は一つ1バイトなので、32個ずつ溜まったら送るようにする。*/ +int txDataIdx = 0; +int txDataCnt=0; +char rxData[TRANSFER_SIZE*2]; /*char型で一文字ずつ配列に入れていき、表示する。char型は一つ1バイトなので、32個ずつ溜まったら送るようにする。*/ +int rxDataIdx = 0; +int rxDataCnt=0; +int i=0; +int which=0; + +nRF24L01P my_nrf24l01p(D11, D12, D13, D10, D9,D8); // mosi, miso, sck, csn, ce, irq +//nRF24L01P my_nrf24l01p(p5, p6, p7, p8, p9, p10); // mosi, miso, sck, csn, ce, irq + +void timer(){ /*タイマー割り込みによるSPEAKER out*/ + uint16_t ain; + + + if(rcv_flg) { + out_flg=1; + } + if(out_flg){ + if(which == 1){ + which = 0; + for(i=0; i>32; i++){ + pc.printf("%s", rxData[i]); + } + } + if(which == 2){ + which = 0; + for(i=32; i>63; i++){ + pc.printf("%s", rxData[i]); + } + }; + //ここにSDカードの書き込みを入れようかと! + rxDataIdx++; + } + +} + +void recieve(){ + if(UDGS01.readable()){ + + // ...read the data into the receive buffer + txData[txDataIdx] = UDGS01.getc(); //getcharだと、PCからのキーボード入力という標準コンソール?のやつだからだめらしい + txDataIdx++; + + + + if (txDataIdx == TRANSFER_SIZE) {//最初の32回 + snd_flg = 1; + } else if (txDataIdx >= TRANSFER_SIZE*2){//後の32回 + txDataIdx=0; + snd_flg = 2; + } + } +} + +int main() { + + int bufferidx=0; + + + my_nrf24l01p.powerUp(); + my_nrf24l01p.setRfFrequency(NRF24L01P_MIN_RF_FREQUENCY);//2400-2525 + my_nrf24l01p.setRfOutputPower(NRF24L01P_TX_PWR_MINUS_12_DB);//mAX 0 -6 -12 -18 + my_nrf24l01p.setAirDataRate(NRF24L01P_DATARATE_1_MBPS);//250k,1000,2000K + // 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 );//mAX 32 + my_nrf24l01p.setReceiveMode(); + my_nrf24l01p.enable(); + + wait_ms(100); + // my_nrf24l01p.write( NRF24L01P_PIPE_P0, (char*)rxData,1);//dummy + + interrput.attach_us(&timer, 100);//100 usec 10Khz + UDGS01.attach(recieve,Serial::RxIrq);//牛からのデータ受信したら割り込み発生してrecieveを呼び出す + + // my_nrf24l01p.flush_rx_fifo(); + while(1){ + + if ( my_nrf24l01p.readable(NRF24L01P_PIPE_P0) ) { //受信? + // ...read the data into the receive buffer + if (rxDataIdx < TRANSFER_SIZE){ + bufferidx = TRANSFER_SIZE; + which = 1; + } + else{ + bufferidx = 0; + which = 2; + } + + rxDataCnt = my_nrf24l01p.read( NRF24L01P_PIPE_P0, (char*)(rxData+bufferidx),TRANSFER_SIZE ); + //myled1 = !myled1; + //if (rcv_flg==0) + + + + rcv_flg = 1; + } + + if (snd_flg==1) {//最初のバッファ + snd_flg=0; + my_nrf24l01p.write( NRF24L01P_PIPE_P0, (char *)txData , TRANSFER_SIZE ); + pc.putc('1'); + } + else if (snd_flg==2) {//後半のバッファ + snd_flg=0; + my_nrf24l01p.write( NRF24L01P_PIPE_P0, (char*)(txData+TRANSFER_SIZE) , TRANSFER_SIZE ); + pc.putc('2'); + + } + + } //一番最初のwhileの} +}