// UART受信時 private void onUpdateUartRx(object sender, KoshiEventArgs e) { string data = e.data; char c; for (int i = 0; i < data.Length; i++) { //Serial.println("RECV "); c = (char)data[i]; switch (rxState) { /* 電文開始待ち状態 */ case STATE_READY: /* 電文開始コードが来たら電文受信中状態へ */ if (c == '#') { //Serial.println("STX "); rxState = STATE_RECEIVING; rxPtr = 0; } break; /* 電文受信中状態 */ case STATE_RECEIVING: /* もしも電文開始コードが来たら受信中のデータを破棄 */ if (c == '#') { //Serial.println("STX "); rxPtr = 0; } /* 電文終了コードが来たら、受信した電文のコマンドを実行 */ else if (c == '$') { //Serial.println("ETX "); rxBuff[rxPtr] = '\0'; SerialComGyro_callback(rxBuff); rxState = STATE_READY; } /* 1文字受信 */ else { rxBuff[rxPtr] = c; rxPtr++; if (rxPtr >= 5000) { rxState = STATE_READY; } } break; default: rxState = STATE_READY; break; } } }
// デバイス切断時 private void onDisconnect(object sender, KoshiEventArgs e) { // ロギング中なら停止 if (logCsv.isOpen) { logCsv.stop(); this.BeginInvoke((Action)(() => { buttonLog.Text = "ログ開始"; })); } }
// デバイス接続時 private void onConnect(object sender, KoshiEventArgs e) { // パラメータ読み出しコマンド送信 koshiClient.uartWrite("#l$"); // グラフのクリア this.BeginInvoke((Action)(() => { chart1.Series[0].Points.Clear(); chart1.Series[1].Points.Clear(); chart2.Series[0].Points.Clear(); chart2.Series[1].Points.Clear(); chart3.Series[0].Points.Clear(); chart3.Series[1].Points.Clear(); chart3.Series[2].Points.Clear(); chart3.Series[3].Points.Clear(); chart3.Series[4].Points.Clear(); })); }