L432KCで通信モジュールとSDカード書き込みを動かすプログラムです。

Dependencies:   mbed nRF24L01P SDFileSystem

Revision:
0:0a9f4da8e642
Child:
1:fd3967c16fcf
diff -r 000000000000 -r 0a9f4da8e642 dummy-L432KC.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dummy-L432KC.cpp	Mon Dec 21 01:28:24 2020 +0000
@@ -0,0 +1,216 @@
+#include "mbed.h"
+#include "nRF24L01P.h"
+#include "SDFileSystem.h"
+
+//DigitalOut    nRF_csn(D3 /*PB_6*/ );  //これは、もしかしてこのコードでも定義しとかないとかな?と思って定義した通信モジュのピン定義だけど、
+//DigitalOut    nRF_ce(D6);             //ライブラリに定義があり、そことかぶるから不要と言われたので不要!
+//DigitalIn     IRQ(D9);
+//SPI           nRF_spi(A6, A5, A1);// mosi, miso, sck
+RawSerial  pc(PA_2, PA_15);  //432KCはpcとつながってるのはUART2らしい。UART使いたいならUART1。
+RawSerial  UDGS01(D1, D0);        // UD-GS01とのシリアル通信用にUARTピンを新たに定義。
+Ticker     interrput;
+
+SDFileSystem sd(D11, D12, D13, D10, "sd"); // mosi, miso, sclk, cs__このコードの場所はメインの上にしよう_SDFileSystemを新しくしたら、ヘッダ側(SDFileSystem.cppの122行辺り)で周波数を定義してたので,(10MHzぐらいに設定)周波数は削除した書き方に
+
+#define TRANSFER_SIZE   32
+int      out_flg = 0;
+int      rcv_flg = 0;
+int      snd_flg = 0;
+char   txData1[TRANSFER_SIZE];
+char   txData2[TRANSFER_SIZE];    /*char型で一文字ずつ配列に入れていき、表示する。char型は一つ1バイトなので、32個ずつ溜まったら送るようにする。*/
+int      txDataIdx = 0;                 
+int      txDataCnt=0;
+char   rxData1[TRANSFER_SIZE];
+char   rxData2[TRANSFER_SIZE];     /*char型で一文字ずつ配列に入れていき、表示する。char型は一つ1バイトなので、32個ずつ溜まったら送るようにする。*/
+
+int      rxDataIdx = 0;                 
+int      rxDataCnt=0;
+int      i=0;
+int      which=0;
+int      bufferidx=0;
+FILE     *fp;
+int      open_flg = 0;
+int      write_flg = 0;
+int      close_flg = 0;
+
+nRF24L01P my_nrf24l01p(A6, A5, A1, D3, D6, D9);    // mosi, miso, sck, csn, ce, irq
+
+
+//nRF24L01P my_nrf24l01p(p5, p6, p7, p8, p9, p10);    // mosi, miso, sck, csn, ce, irq
+
+void timer(){
+   uint16_t ain;
+   
+      
+      if(rcv_flg == 1) { 
+        
+        printf("%c", rxData2[rxDataIdx]);
+        rxDataIdx++;
+        
+        
+        if (rxDataIdx >= TRANSFER_SIZE){ 
+        write_flg = 1;
+        rxDataIdx=0;
+        rcv_flg = 0;
+        i++;
+         }
+        
+               
+      }
+      /*
+      if(i>5){
+          i = 0;
+          close_flg = 1;
+      }
+      */    
+
+}
+
+void recieve(){
+    if(UDGS01.readable()){
+             
+     // ...read the data into the receive buffer
+        txData1[txDataIdx] = UDGS01.getc();  //getcharだと、PCからのキーボード入力という標準コンソール?のやつだからだめらしい
+//        pc.printf("tx[%d] = %s", txDataIdx, &txData[txDataIdx]);
+        txDataIdx++;
+              
+        if (txDataIdx == TRANSFER_SIZE) {//最初の32回
+           memcpy(txData2, txData1, TRANSFER_SIZE);
+               
+               txDataIdx=0;
+               write_flg = 1;
+               snd_flg = 1;
+               
+        }
+               
+    }
+    
+}
+      
+int main() {
+  
+    pc.baud(115200);
+    UDGS01.baud(115200);
+   
+   wait(1);
+   
+   
+    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
+    printf( "nRF24L01+ Frequency    : %d MHz\r\n",  my_nrf24l01p.getRfFrequency() );
+    printf( "nRF24L01+ Output power : %d dBm\r\n",  my_nrf24l01p.getRfOutputPower() );
+    printf( "nRF24L01+ Data Rate    : %d kbps\r\n", my_nrf24l01p.getAirDataRate() );
+    printf( "nRF24L01+ TX Address   : 0x%010llX\r\n", my_nrf24l01p.getTxAddress() );
+//    pc.printf( "nRF24L01+ RX Address   : 0x%010llX\r\n", my_nrf24l01p.getRxAddress() );
+
+    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();
+    
+    
+   printf("Hellooooo\r\n");
+    wait_ms(10);
+   
+   if(open_flg == 0){
+        wait(1);
+        fp = fopen("/sd/testlog.txt", "a");             
+         
+         if (fp == NULL)
+        {
+            printf("open error!!\r\n");
+//            while(1);
+        }     
+         else{
+//            fwrite(rxData3, sizeof(char), TRANSFER_SIZE, fp);
+         fprintf(fp, "opened!!\r\n");
+         fclose(fp);
+         wait_ms(10);
+         open_flg = 1;
+            
+         }
+   }
+
+    interrput.attach(&timer, 0.001);//1 msec 10Khz
+    UDGS01.attach(recieve,Serial::RxIrq);//牛からのデータ受信したら割り込み発生してrecieveを呼び出す
+
+
+ //   my_nrf24l01p.flush_rx_fifo();
+ while(1){
+       
+       if ( my_nrf24l01p.readable(NRF24L01P_PIPE_P0) ) {    //受信可能であれば
+            
+         rxDataCnt = my_nrf24l01p.read( NRF24L01P_PIPE_P0, (char*)(rxData1),TRANSFER_SIZE );           
+         
+         if(rcv_flg == 0){   
+             memcpy(rxData2, rxData1, TRANSFER_SIZE);
+             wait_ms(1);
+             }
+
+//             memcpy(rxData3, rxData1, TRANSFER_SIZE);
+             
+         if(open_flg == 1){
+             fp = fopen("/sd/recieve_log.txt", "a");
+           if (fp == NULL)
+           {
+            printf("open error!!\r\n");
+//            while(1);
+           }else{
+             open_flg = 2;
+           }
+         }
+         
+         if(write_flg == 1){
+//            fprintf(fp, "check\r\n");
+            fwrite(rxData2, sizeof(char), TRANSFER_SIZE, fp);
+           wait_ms(1);       
+            
+            fclose(fp);
+            wait_ms(1);
+//            close_flg = 0;
+            write_flg = 0;
+            open_flg = 1;
+         }
+         
+       rcv_flg = 1;
+//       wait(1);
+      }
+
+       if (snd_flg==1) {//送信用 送信側もログをSDカードに書き込むようにする。
+          snd_flg=0;
+               
+          if(open_flg == 1){
+             fp = fopen("/sd/transfer_log.txt", "a");
+             if (fp == NULL)
+              {
+                printf("open error!!\r\n");
+//            while(1);
+              }else{
+                open_flg = 2;
+             }
+         }
+         
+         if(write_flg == 1){
+//            fprintf(fp, "check\r\n");
+            fwrite(txData2, sizeof(char), TRANSFER_SIZE, fp);
+            wait_ms(1);       
+            
+            fclose(fp);
+            wait_ms(1);
+//            close_flg = 0;
+            write_flg = 0;
+            open_flg = 1;
+         }
+
+         my_nrf24l01p.write( NRF24L01P_PIPE_P0, (char *)txData2 , TRANSFER_SIZE  );             
+         printf("1\r\n");
+         wait_ms(1);
+     }    
+
+         
+         
+ } //一番最初のwhileの}
+}
\ No newline at end of file