ILF / Mbed 2 deprecated mbed_ILF

Dependencies:   mbed SDFileSystem

Revision:
10:b34306f7add6
Parent:
9:1d75106ccfa2
Child:
13:e138a91ed2cb
--- a/ILF3_rev1.cpp	Tue Apr 26 08:34:58 2022 +0000
+++ b/ILF3_rev1.cpp	Wed Apr 27 06:29:56 2022 +0000
@@ -223,6 +223,7 @@
 Timeout oneshot2;
 Timeout oneshot3;
 Timeout oneshot4;
+Timeout oneshot5;//CAL番号未送信タイムアウト用
 
 /*** SD-CARD ***/
 SDFileSystem sd(P0_9, P0_8, P0_7, P0_6, "sd"); //SDFileSystem name(mosi, miso, sck, cs, mount);
@@ -231,9 +232,9 @@
 I2C i2c(P0_10,P0_11); //(PinName sda, PinName scl) I2Cを定義
 
 /*** UART ver3 ***/
-//Serial uart(P0_15,P0_16,19200);
-//Serial pc(USBTX,USBRX,9600); //mbed⇔PCデバック用
-Serial pc(P0_15,P0_16,19200);  //ILF3⇔PCデバック用
+//RawSerial uart(P0_15,P0_16,19200);
+//RawSerial pc(USBTX,USBRX,9600); //mbed⇔PCデバック用
+RawSerial pc(P0_15,P0_16,19200);//ILF3⇔PCデバック用
 
 /*** interruput ***/
 //InterruptIn seq_yobi(P0_19);
@@ -548,6 +549,7 @@
 void    read_syoudo(char* c);//EEPROMから照度データ(PwmDuty)を読み込んでセットする
 void    seq_serialsend(/*int noc*/);//シーケンサへのシリアル出力
 void    seq_serialrecive(/*int noc*/);//シーケンサへのシリアル入力
+void    seq_timeout();//シーケンサからCAL番号が一定時間出力されなければ前回のCAL番号で測定
 
 
 /*******************************************************************************
@@ -567,7 +569,7 @@
 char    ch_num ;//選択中の測定チャネル(0~3)
 int     cat;//検査カテゴリNo.
 float   fdata[4][4];//ファイル出力用
-char    seq_name[3];//
+char    seq_name[3];//CAL番号一時格納用配列
 
 
 //structure
@@ -588,7 +590,7 @@
     short   low_limit_ocp_v;    // 過充電防止検査の下限規格[V] ver3
     short   up_limit_ocp_v;     // 過充電防止検査の上限規格[V] ver3
     float   wait_voc;           // リセット立上りからVOC測定までの待機時間[s] 1bit 1s 換算 ver3
-} ;
+};
 
 
 //parameter
@@ -736,7 +738,7 @@
 
     wait(0.1);
     
-    //seq_serialsend( meas_num );   //自動モード中のシーケンサ通信
+    seq_serialsend( meas_num );   //自動モード中のシーケンサ通信
 
     //測定終了ver3
     //seq_busy = 0;//DegitalOut busy
@@ -2717,9 +2719,6 @@
 
     Jyushin = i2c.read ((addr_gu + 0x01), crdata, 3, true);
 
-    //シーケンサからシリアル受信割り込みイネーブル(デバック用)
-    pc.attach(seq_serialrecive,Serial::RxIrq);
-
     while(1) {
         //スタートスイッチで測定開始
         if ( sw_start == 0 ) {
@@ -2780,9 +2779,6 @@
         }//if
         wait(0.1);
     }//While
-    
-    //シーケンサからシリアル受信割り込みディスイネーブル(デバック用)
-    //pc.attach(NULL,Serial::RxIrq);
 
 }
 
@@ -2996,7 +2992,6 @@
 *********************************/
 void meas_sub()
 {
-    int     sdata;//シリアル通信STX格納(デバック用)
     auto_int_hyouji();
 
     gu_cursor(0,2);
@@ -3004,18 +2999,18 @@
     gu_fontsize(2);
     
     
+    //STX受信待ち抜け割込みイネーブル
+    oneshot5.attach(seq_timeout, 5);
+    pc.attach(seq_serialrecive, RxIrq);
     //シーケンサからSTX受信するまでループ
     while(1){
-        if ( seq_name[0] == 'A' ){
+        if ( seq_name[3] == 'B' ){
             break;
-        }
-        /*
-        sdata = pc.getc();
-        if(sdata == 0x02){
-            break;
-        } 
-        */       
     }
+    }//while
+    seq_name[0] = 0;//CAL名受渡後STX初期化
+    seq_name[3] = 0;//CAL名受渡後EXT初期化
+    oneshot5.detach();
 
     read_regnum();//CAL登録No.読込
 
@@ -3025,7 +3020,7 @@
 
     hantei( number_of_channels );//判定LED
     
-    seq_serialsend();   //デバック用シーケンサ通信関数呼出
+    seq_serialsend();//デバック用シーケンサ通信関数呼出
     
     
     wait(0.5);
@@ -3716,10 +3711,7 @@
 
         if( err_f[i] == 1) {
             led_red[i] = 1;
-        } /*else {
-            led_green[i] = 1;
-        }*/
-        else if(seq_name[0] == 'A') {
+        } else {
             led_green[i] = 1;
         }
 
@@ -5099,25 +5091,19 @@
     シーケンサ通信
 
 ****************************************/
-
+//一定時間CAL名未送信
+void seq_timeout(){
+    seq_name[0] = 'A';
+    seq_name[3] = 'B';
+}
+
+//CAL名受信
 void seq_serialrecive(){
-    
     seq_name[0] = pc.getc();
-    led_green[0] = 1;
-    wait(0.5);
-    led_green[0] = 0;
-    
-    /*
-    while(seq_name[2] == 0x03){
-        seq_name[0] = pc.getc();
-        seq_name[1] = pc.getc();
-        seq_name[2] = pc.getc();
-        }
-    */    
-    
 }
 
 
+//測定データ送信
 void seq_serialsend(/*int noc*/) //デバック時int nocコメントアウト
 {
     char    STX     = 2;