Monitor20210726_ver1 add_im920

Dependencies:   mbed SB1602E TextLCD MSCFILESytem FatFileSystemCpp

Committer:
MPPT51
Date:
Mon Jul 26 05:53:49 2021 +0000
Revision:
3:fc42787d68a6
Parent:
2:14b832fdd69f
210726_commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MPPT51 3:fc42787d68a6 1
MPPT51 3:fc42787d68a6 2 //20210722モニタリングシステム kikkawa //積算発電積算消費
MPPT51 3:fc42787d68a6 3
MPPT51 3:fc42787d68a6 4 #include "mbed.h" // 必須
MPPT51 3:fc42787d68a6 5 #include "stdio.h" // ファイル操作
MPPT51 3:fc42787d68a6 6 #include "SB1602E.h" // デカ文字LCD
MPPT51 3:fc42787d68a6 7 #include "TextLCD.h" // 4*20LCD
MPPT51 3:fc42787d68a6 8 #include "MSCFileSystem.h" // USBメモリ
MPPT51 3:fc42787d68a6 9 #include <string> // 文字列操作
MPPT51 1:93775378e5d9 10
MPPT51 3:fc42787d68a6 11 /* タイマの設定 */
MPPT51 3:fc42787d68a6 12 Timer tm1; // タイマー時間の初期化(処理時間計測に使用)
MPPT51 3:fc42787d68a6 13 Timer time0t5s; // main関数での処理に使用
MPPT51 3:fc42787d68a6 14 Timer time0t2s; // main関数での処理に使用
MPPT51 3:fc42787d68a6 15
MPPT51 3:fc42787d68a6 16 //Ticker tick; // 繰り返しタイマ割り込みの初期化
MPPT51 3:fc42787d68a6 17 TextLCD lcd1(p15,p16,p17,p18,p19,p20); // 4行LCDのポート設定(RS,E,DB4,DB5,DB6,DB7)
MPPT51 3:fc42787d68a6 18 SB1602E lcd2(p28,p27); // デカ文字LCDのポート設定(SDA,SCL)
MPPT51 3:fc42787d68a6 19 Serial pc(USBTX,USBRX); // USBシリアルポートの設定
MPPT51 3:fc42787d68a6 20 Serial im920(p13, p14); // p13(tx),p14(rx)をIM920とのシリアル通信ポートに設定
MPPT51 3:fc42787d68a6 21 CAN can(p30, p29); // CANのポート設定
MPPT51 0:78ab42fa3942 22
MPPT51 3:fc42787d68a6 23 DigitalOut led1(LED1); // LPC1768ボード上1番目のLEDの設定
MPPT51 3:fc42787d68a6 24 DigitalOut led2(LED2); // LPC1768ボード上2番目のLEDの設定
MPPT51 3:fc42787d68a6 25 DigitalOut led3(LED3); // LPC1768ボード上3番目のLEDの設定
MPPT51 3:fc42787d68a6 26 DigitalOut led4(LED4); // LPC1768ボード上4番目のLEDの設定
MPPT51 3:fc42787d68a6 27
MPPT51 3:fc42787d68a6 28 /* 変数の宣言 */
MPPT51 3:fc42787d68a6 29 bool LED = 1; // 1のときLPC1768ボード上のLED(1~4)の点灯・点滅処理を実行. 0のとき点灯・点滅させない
MPPT51 3:fc42787d68a6 30 int MPPTerror=0; // MPPT1のエラー信号を格納する変数
MPPT51 3:fc42787d68a6 31 int MPPTerror_2=0; // MPPT2のエラー信号を格納する変数
MPPT51 3:fc42787d68a6 32 int direc=0; // 進行方向(direction)を格納する変数
MPPT51 3:fc42787d68a6 33 float Vmot=0, Cmot=0, Pmot=0; // 消費電圧、電流、電力を格納する変数
MPPT51 3:fc42787d68a6 34 float Vsol=0, Csol=0, Psol=0; // 発電電圧・電流・電力を格納する変数
MPPT51 3:fc42787d68a6 35 float Vbat=0, Cbat=0, Pbat=0; // バッテリ電圧・電流・電力を格納する変数
MPPT51 3:fc42787d68a6 36 float VcelMax=0,VcelAve=0,VcelMin=0; // セル最大・平均・最小電圧を格納する変数
MPPT51 3:fc42787d68a6 37 float speed=0; // 走行速度を格納する変数
MPPT51 3:fc42787d68a6 38 signed char duty=0; // スロットル開度を格納する変数
MPPT51 3:fc42787d68a6 39
MPPT51 3:fc42787d68a6 40 int cntTera = 0;
MPPT51 3:fc42787d68a6 41
MPPT51 3:fc42787d68a6 42 /* ユーザ定義関数の宣言 */
MPPT51 3:fc42787d68a6 43 void init(void); //初期化を行う関数を宣言
MPPT51 3:fc42787d68a6 44 void printTera(void); // Teraterm表示を行う関数を宣言
MPPT51 3:fc42787d68a6 45
MPPT51 3:fc42787d68a6 46
MPPT51 3:fc42787d68a6 47 /* IM920(テレメトリ)の設定 */
MPPT51 3:fc42787d68a6 48 int cntIM920 = 0;
MPPT51 3:fc42787d68a6 49 void printIM920(void); // PC(teraterm), IM920(テレメトリシステム), LCDへのprintf処理を行う関数
MPPT51 0:78ab42fa3942 50
MPPT51 3:fc42787d68a6 51 /* LCDの設定 */
MPPT51 3:fc42787d68a6 52 int cntLCD=0;
MPPT51 3:fc42787d68a6 53 void printLCD(void); // LCDにデータ表示する関数
MPPT51 3:fc42787d68a6 54
MPPT51 3:fc42787d68a6 55 /* CAN通信の設定 */
MPPT51 3:fc42787d68a6 56 char cntCAN = 0; // CAN受信でカウントアップする変数
MPPT51 3:fc42787d68a6 57 void readCAN(void);
MPPT51 3:fc42787d68a6 58 CANMessage bufCANmot(0x10); // CAN受信用バッファの初期化(バッファ(buf): データを一時的に格納するためのメモリー領域)
MPPT51 3:fc42787d68a6 59 CANMessage bufCANsol(0x20); // CAN受信用バッファの初期化(バッファ(buf): データを一時的に格納するためのメモリー領域)
MPPT51 3:fc42787d68a6 60 CANMessage bufCANbat(0x30); // CAN受信用バッファの初期化(バッファ(buf): データを一時的に格納するためのメモリー領域)
MPPT51 3:fc42787d68a6 61
MPPT51 3:fc42787d68a6 62
MPPT51 3:fc42787d68a6 63 /* USBメモリ(MSC:マスストレージクラス)の設定 */
MPPT51 3:fc42787d68a6 64 MSCFileSystem msc("usb"); // Mount flash drive under the name "usb"
MPPT51 3:fc42787d68a6 65 char *str1 = "/usb/log"; // 保存先("usb")とファイル名の一部(log)を指定
MPPT51 3:fc42787d68a6 66 char *str2 = ".csv"; // ファイルの拡張子を指定
MPPT51 3:fc42787d68a6 67 char fileName[30]; // ファイル名を格納する配列
MPPT51 3:fc42787d68a6 68 char oxMSC; // 接続有無("o"か"x")を格納する変数(1文字用)
MPPT51 3:fc42787d68a6 69 int cntMSC=0; // 処理を行うごとにカウントアップする変数
MPPT51 3:fc42787d68a6 70 void initMSC(void); // MSC(USB Mass Storage Class)の初期設定関数
MPPT51 3:fc42787d68a6 71 void saveMSC(void); // MSCへデータを書き込む関数
MPPT51 3:fc42787d68a6 72 FILE *fp2; // ファイル構造体の定義
MPPT51 3:fc42787d68a6 73
MPPT51 3:fc42787d68a6 74 void initMSC(){ // USBメモリの初期設定関数
MPPT51 3:fc42787d68a6 75 FILE *fp1; // ファイル構造体を定義
MPPT51 3:fc42787d68a6 76 int fileNumber = 0; // csvファイル命名に使用する変数を宣言
MPPT51 3:fc42787d68a6 77
MPPT51 3:fc42787d68a6 78 fp1 = fopen( "/usb/fileNumber.txt", "r" ); // USBメモリ内の"fileNumber.txt"を読み取りモードで開く
MPPT51 3:fc42787d68a6 79 if( fp1 == NULL ){ // アクセスできなかったとき, ...error( "Could not open main0\n\r" );を入れても良い
MPPT51 3:fc42787d68a6 80 pc.printf("USB init error\n\r" ); // teratermに"USB ini error"を表示
MPPT51 3:fc42787d68a6 81 oxMSC = 'x'; // MSCが接続されていないため"x"を格納(1文字なのでシングルクォーテーション)
MPPT51 1:93775378e5d9 82 }
MPPT51 3:fc42787d68a6 83 else { // アクセスできたとき ...sbhost_lpc17xx.cppでの処理につながる
MPPT51 3:fc42787d68a6 84 oxMSC = 'o'; // 1文字だからシングルクォーテーションで囲む
MPPT51 3:fc42787d68a6 85 fscanf( fp1,"%d",&fileNumber ); // "fileNumber.txt"の数字を読み取り,変数"fileNumber"に格納する
MPPT51 3:fc42787d68a6 86 fclose( fp1 ); // "fileNumber.txt"を閉じる
MPPT51 3:fc42787d68a6 87
MPPT51 3:fc42787d68a6 88 fp1 = fopen( "/usb/fileNumber.txt", "w" ); // "fileNumber.txt"を書き込みモードで開く //exit(1);でBlueLightsOfDeath
MPPT51 3:fc42787d68a6 89 fprintf( fp1,"%d\n", fileNumber+1 ); // 読み込んだ数値に+1してfileNumber.txtに書き込み
MPPT51 3:fc42787d68a6 90 fclose(fp1);
MPPT51 3:fc42787d68a6 91
MPPT51 3:fc42787d68a6 92 sprintf(fileName,"%s%d%s\n", str1, fileNumber, str2); // 文字列の結合(データログ用ファイル名の作成)
MPPT51 3:fc42787d68a6 93 pc.printf( "\n\rUSB fileName: %s\n\r", fileName ); // 作成したファイル名をteratermに表示
MPPT51 3:fc42787d68a6 94
MPPT51 3:fc42787d68a6 95 fp2 = fopen( fileName, "w" ); // ファイルの新規作成後書き込み, ファイルがある場合上書き
MPPT51 3:fc42787d68a6 96 if(fp2 != NULL){ // NULLじゃないとき(ファイルを開けた時)
MPPT51 3:fc42787d68a6 97 fprintf( fp2,"Speed(km/h),dutyCycle,Vmot(V),Cmot(A),Pmot(W),Vsol(V),Csol(A),Psol(W),Vbat(V),Cbat(A),Pbat(W),VcelMax(V),VcelAve(V),VcelMin(V)\n" ); //ファイル書き込み
MPPT51 3:fc42787d68a6 98 fclose(fp2); // csvファイル1行目にデータ項目を入力してファイルを閉じる
MPPT51 3:fc42787d68a6 99 }
MPPT51 0:78ab42fa3942 100 }
MPPT51 0:78ab42fa3942 101 }
MPPT51 3:fc42787d68a6 102
MPPT51 3:fc42787d68a6 103 void saveMSC(){ // 処理時間50ms以上(MBED Timerで計測,データ量による)
MPPT51 3:fc42787d68a6 104 ++cntMSC; // MSCカウンタをインクリメント
MPPT51 3:fc42787d68a6 105 if( cntMSC >= 255){ cntMSC = 0; } // 255になったらリセット
MPPT51 3:fc42787d68a6 106 if( LED ){ led3 = !led3; } // led3を点滅させる処理. !はNOTの意味
MPPT51 3:fc42787d68a6 107 if( oxMSC == 'o' ){
MPPT51 3:fc42787d68a6 108 fp2 = fopen( fileName, "a"); // ファイルを上書きモードで開く(ファイルがなければ新規作成)
MPPT51 3:fc42787d68a6 109 if ( fp2 == NULL ){ // ファイルを開けなかったとき,
MPPT51 3:fc42787d68a6 110 oxMSC = 'x'; // MSCが接続されていないため"x"を格納(1文字なのでシングルクォーテーション)
MPPT51 3:fc42787d68a6 111 //pc.printf("2%cxxxxxxxxxxxxxxxxxxxxxxxx\n", oxMSC);
MPPT51 3:fc42787d68a6 112 }else { // USBメモリ内のファイルを開くことができたとき,
MPPT51 3:fc42787d68a6 113 fprintf( fp2,"%5.1f,%3d,%5.1f,%5.1f,%6.1f,%5.1f,%5.1f,%6.1f,%5.1f,%5.1f,%6.1f,%5.3f,%5.3f,%5.3f\n",
MPPT51 3:fc42787d68a6 114 speed, duty, Vmot, Cmot, Pmot, Vsol, Csol, Psol, Vbat, Cbat, Pbat, VcelMax, VcelAve, VcelMin );
MPPT51 3:fc42787d68a6 115 fclose(fp2); // データを書き込んだ後,ファイルを閉じる
MPPT51 3:fc42787d68a6 116 pc.printf("MSC: %d\n", cntMSC); //
MPPT51 3:fc42787d68a6 117 }
MPPT51 3:fc42787d68a6 118 }
MPPT51 3:fc42787d68a6 119 }
MPPT51 3:fc42787d68a6 120
MPPT51 3:fc42787d68a6 121 void readCAN(){ // CANデータを受信したときに実行される関数(特定ID選択:https://os.mbed.com/questions/74230/about-ID-selectable-CAN-receive/, filter関数でも)
MPPT51 3:fc42787d68a6 122 ++cntCAN; // CANカウンタをインクリメント
MPPT51 3:fc42787d68a6 123 if( cntCAN >= 255 ){ cntCAN = 0; } // 255を超えたらリセット
MPPT51 3:fc42787d68a6 124 if( LED ){ led2 = !led2; } // led2を点滅させる処理. !はNOTの意味
MPPT51 3:fc42787d68a6 125
MPPT51 3:fc42787d68a6 126 if( can.read( bufCANmot ) ){ // モタコンからデータが来たとき,
MPPT51 3:fc42787d68a6 127 Vmot = ( (float)( (bufCANmot.data[0]*100) + bufCANmot.data[1]) ) / 10; // 15 43を1500 43にして足すと「1543」となり、÷10すると154.3 [V]
MPPT51 3:fc42787d68a6 128 Cmot = ( (float)( ((signed char)bufCANmot.data[2]*100) + (signed char)bufCANmot.data[3] ) ) / 100;
MPPT51 3:fc42787d68a6 129 // 5 54を500 54にして足すと5「554」となり、÷100すると5.54 [A]
MPPT51 3:fc42787d68a6 130 Pmot = Vmot * Cmot;
MPPT51 3:fc42787d68a6 131 speed = ( (float)( (bufCANmot.data[4]*100) + bufCANmot.data[5]) ) / 10; //「856」を85.6[km/h]にするため,÷10する
MPPT51 3:fc42787d68a6 132 duty = (signed char)bufCANmot.data[6]; // アクセル開度は0~100表示のため,そのまま
MPPT51 3:fc42787d68a6 133 direc = (int)bufCANmot.data[7];
MPPT51 3:fc42787d68a6 134 }
MPPT51 3:fc42787d68a6 135 if( can.read( bufCANsol ) ){ // MPPTからデータがきたとき,
MPPT51 3:fc42787d68a6 136 Vsol = ( (float)( (bufCANsol.data[0]*100) + bufCANsol.data[1]) ) / 10;
MPPT51 3:fc42787d68a6 137 Csol = ( (float)( (signed int)((signed char)bufCANsol.data[2]*100) + (signed char)bufCANsol.data[3] ) + ((signed char)bufCANsol.data[6]*100) + (signed char)bufCANsol.data[7] ) / 100;
MPPT51 3:fc42787d68a6 138 MPPTerror = bufCANsol.data[4];
MPPT51 3:fc42787d68a6 139 MPPTerror_2 = bufCANsol.data[5];
MPPT51 3:fc42787d68a6 140 Psol = Vsol * Csol;
MPPT51 3:fc42787d68a6 141 }
MPPT51 3:fc42787d68a6 142 if( can.read( bufCANbat ) ){ // BMSからデータが来たとき,
MPPT51 3:fc42787d68a6 143 Vbat = ( (float)( (bufCANbat.data[0]*100) + bufCANbat.data[1]) ) / 10;
MPPT51 3:fc42787d68a6 144 Cbat = ( (float)( (signed int)((signed char)bufCANbat.data[2]*100) + (signed char)bufCANbat.data[3] ) ) / 100;
MPPT51 3:fc42787d68a6 145 Pbat = Vbat * Cbat;
MPPT51 3:fc42787d68a6 146 VcelMin = ( (float)( (bufCANbat.data[4]*100) + bufCANbat.data[5] ) ) / 100;
MPPT51 3:fc42787d68a6 147 VcelMax = ( (float)( (bufCANbat.data[6]*100) + bufCANbat.data[7] ) ) / 100;
MPPT51 3:fc42787d68a6 148 VcelAve = Vbat / 27; // バッテリ電圧をセルの直列数(20200807現在、27直列)で割って平均電圧を算出する
MPPT51 3:fc42787d68a6 149 }
MPPT51 1:93775378e5d9 150 }
MPPT51 3:fc42787d68a6 151
MPPT51 3:fc42787d68a6 152 void printLCD(){ // LCDにデータを表示する関数
MPPT51 3:fc42787d68a6 153 ++cntLCD; // IM920カウンタをインクリメント
MPPT51 3:fc42787d68a6 154 if( cntLCD >= 255){ cntLCD = 0; } // 255以上でリセット
MPPT51 3:fc42787d68a6 155
MPPT51 3:fc42787d68a6 156 lcd1.locate(0, 0); // 4行LCDの1行目1番目に表示位置を指定し,
MPPT51 3:fc42787d68a6 157 lcd1.printf("%5.3fv %5.3fv %5.3fv", VcelMax, VcelAve, VcelMin); // バッテリセルの最大・平均・最小の電圧を表示
MPPT51 3:fc42787d68a6 158 lcd1.locate(0, 1); // 4行LCDの2行目1番目に表示位置を指定し,
MPPT51 3:fc42787d68a6 159 lcd1.printf("B:%5.1fv%5.1fA%5.0fw", Vbat, Cbat, Pbat); // バッテリ電圧・電流・電力を表示
MPPT51 3:fc42787d68a6 160 lcd1.locate(0, 2); // 4行LCDの3行目1番目に表示位置を指定し,
MPPT51 3:fc42787d68a6 161 lcd1.printf("M:%5.1fv%5.1fA d:%d", Vmot, Cmot, direc); // モータ電圧・電流, 進行方向を表示
MPPT51 3:fc42787d68a6 162 lcd1.locate(0, 3); // 4行LCDの4行目1番目に表示位置を指定し,
MPPT51 3:fc42787d68a6 163 if( MPPTerror || MPPTerror_2 ){ // MPPTからエラー信号を受け取っていたとき,
MPPT51 3:fc42787d68a6 164 if( MPPTerror ){ // MPPT1がエラーなら
MPPT51 3:fc42787d68a6 165 lcd1.printf("S:X%3.1fv%5.1fA", Vsol, Csol); // 先頭に"X"を入れて発電電圧・電流を表示
MPPT51 3:fc42787d68a6 166 }else{ // MPPT2がエラーなら
MPPT51 3:fc42787d68a6 167 lcd1.printf("S:XX%3.1fv%5.1fA", Vsol, Csol); // 先頭に"XX"を入れて発電電圧・電流を表示
MPPT51 3:fc42787d68a6 168 }
MPPT51 3:fc42787d68a6 169 }else{ // MPPTからエラー信号を受け取っていないとき
MPPT51 3:fc42787d68a6 170 lcd1.printf("S:%5.1fv%5.1fA", Vsol, Csol); // 発電電力・電流を表示
MPPT51 3:fc42787d68a6 171 }
MPPT51 3:fc42787d68a6 172 lcd1.locate(15, 3); // 4行LCDの4行目16番目に表示位置を指定し,
MPPT51 3:fc42787d68a6 173 lcd1.printf("USB:%c", oxMSC); // USBの接続状態を表示("o"か"x")
MPPT51 3:fc42787d68a6 174 lcd2.printf( 0, "%5.1fkm/h %5.1fv\r", speed, Vmot ); // デカ文字LCDの1行目1番目に表示(速度,システム電圧)
MPPT51 3:fc42787d68a6 175 lcd2.printf( 1, "%5.0fw %4.0fw %3d\r", Pmot, Psol, duty ); // デカ文字LCDの1行目2番目に表示(消費電力,発電電力,スロットル開度)
MPPT51 3:fc42787d68a6 176 pc.printf("LCD:%d\n",cntLCD); // 無線送信処理を行ったことをPC(teraterm)へ知らせる
MPPT51 0:78ab42fa3942 177 }
MPPT51 3:fc42787d68a6 178
MPPT51 3:fc42787d68a6 179 void printIM920(){ // 処理時間16ms~(MBED Timerで計測)
MPPT51 3:fc42787d68a6 180 ++cntIM920; // IM920カウンタをインクリメント
MPPT51 3:fc42787d68a6 181 if( cntIM920 >= 255 ){ cntIM920 = 0; } // 255以上でリセット
MPPT51 3:fc42787d68a6 182 im920.printf("TXDA%.1f,%.3f,%.3f,%.3f,%.1f,%.1f,%.1f,%.1f,%d,%d\r",
MPPT51 3:fc42787d68a6 183 Vmot, VcelMax, VcelAve, VcelMin, Cbat, Cmot, Csol, speed, duty, cntIM920);
MPPT51 3:fc42787d68a6 184 // TXDAに続く文字が無線送信される. データ間を","で区切る. 最後に"\r"必須
MPPT51 3:fc42787d68a6 185 pc.printf("IM920:%d\n",cntIM920); // 無線送信処理を行ったことをPC(teraterm)へ知らせる
MPPT51 3:fc42787d68a6 186 }
MPPT51 3:fc42787d68a6 187
MPPT51 3:fc42787d68a6 188 void printTera(){
MPPT51 3:fc42787d68a6 189 ++cntTera; // Teratermカウンタをインクリメント
MPPT51 3:fc42787d68a6 190 if( cntTera >= 255){ cntTera = 0; } // 255以上でリセット
MPPT51 3:fc42787d68a6 191 //pc.printf("Tera:%d\n",cntTera); // 無線送信処理を行ったことをPC(teraterm)へ知らせる
MPPT51 3:fc42787d68a6 192 pc.printf("SP:%.1f DT:%d Vm:%.1f Im:%.2f Pm:%.1f Vs:%.1f Is: %.2f Ps:%.1f\n\r", speed, duty, Vmot, Cmot, Pmot, Vsol, Csol, Psol );
MPPT51 3:fc42787d68a6 193 pc.printf("Vb:%.1f Cb:%.2f Pb:%.1f max:%.3f avg:%.3f min:%.3f\n\r", Vbat, Cbat, Pbat, VcelMax, VcelAve, VcelMin );
MPPT51 3:fc42787d68a6 194 }
MPPT51 3:fc42787d68a6 195
MPPT51 3:fc42787d68a6 196 void init(){ // 初期化(初期設定)を行う関数
MPPT51 3:fc42787d68a6 197 pc.baud(115200); // pcとのシリアル通信ボーレートを115200bpsに設定(数字が大きい方が通信速度高い)
MPPT51 3:fc42787d68a6 198 pc.printf("main() start\n");
MPPT51 3:fc42787d68a6 199
MPPT51 3:fc42787d68a6 200 im920.baud(19200); // IM920とのシリアル通信ボーレートを19200bpsに設定(19200はIM920の初期値)
MPPT51 3:fc42787d68a6 201 initMSC(); // USBマスストレージクラス(USBメモリ)を初期化する関数を実行
MPPT51 3:fc42787d68a6 202 }
MPPT51 3:fc42787d68a6 203
MPPT51 0:78ab42fa3942 204 int main() {
MPPT51 3:fc42787d68a6 205 init(); // 初期化関数を実行
MPPT51 3:fc42787d68a6 206
MPPT51 3:fc42787d68a6 207 MPPTerror_2 = 1;
MPPT51 3:fc42787d68a6 208 Vmot=113.4;
MPPT51 3:fc42787d68a6 209 Cmot=5.5;
MPPT51 3:fc42787d68a6 210 Pbat=129.3;
MPPT51 0:78ab42fa3942 211
MPPT51 3:fc42787d68a6 212 tm1.start();
MPPT51 3:fc42787d68a6 213 time0t5s.start(); //https://os.mbed.com/media/uploads/yueee_yt/text_h24csee.pdf(p.21)
MPPT51 3:fc42787d68a6 214 time0t2s.start(); //https://os.mbed.com/media/uploads/yueee_yt/text_h24csee.pdf(p.21)
MPPT51 3:fc42787d68a6 215
MPPT51 0:78ab42fa3942 216 while(1) {
MPPT51 3:fc42787d68a6 217 if( time0t5s.read() < 0.5 ){
MPPT51 3:fc42787d68a6 218 if( time0t2s.read() >= 0.2 ){
MPPT51 3:fc42787d68a6 219 time0t2s.reset(); // time0t2sをリスタートさせる
MPPT51 3:fc42787d68a6 220 readCAN(); // CANデータを読み込む関数を実行
MPPT51 3:fc42787d68a6 221 printLCD(); // LCDの表示を更新する関数を実行
MPPT51 3:fc42787d68a6 222 printTera(); // Teratermに表示する関数を実行
MPPT51 1:93775378e5d9 223 }
MPPT51 3:fc42787d68a6 224 }
MPPT51 3:fc42787d68a6 225 if( time0t5s.read() >= 0.5 ){ // 0.5秒毎に実行する処理
MPPT51 3:fc42787d68a6 226 time0t5s.reset(); // time0t5sをリスタートさせる
MPPT51 3:fc42787d68a6 227 if( LED ){ led4 = !led4; } // led4を点滅させる(!はNOT)
MPPT51 3:fc42787d68a6 228 pc.printf("TheTime: %d(us)\n", tm1.read_us()); // 処理時間確認用プログラム(1/2)
MPPT51 3:fc42787d68a6 229 tm1.reset(); // 処理時間確認用プログラム(2/2)
MPPT51 3:fc42787d68a6 230 saveMSC(); // MSCにデータを保存する関数を実行
MPPT51 3:fc42787d68a6 231 printIM920(); // IM920に無線送信させる関数を実行
MPPT51 2:14b832fdd69f 232 }
MPPT51 3:fc42787d68a6 233
MPPT51 0:78ab42fa3942 234 }
MPPT51 0:78ab42fa3942 235 }