1

FSR に接続された arduino ボードを実行しています。現在の圧力に関する情報を返す必要があります。このデータは COM5 経由で送信され、C# プログラムで解析する必要があります。センサーは 0 ~ 1023 の値を返します。

これは私のArduinoコードです(重要ではないかもしれません)

int FSR_Pin = A0; //analog pin 0

void setup(){
  Serial.begin(9600);
}

void loop(){
  int FSRReading = analogRead(FSR_Pin); 

  Serial.println(FSRReading);
  delay(250); //just here to slow down the output for easier reading
}

私の C# シリアル ポート リーダーは次のようになります。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO.Ports;
using System.Windows.Forms;


namespace Serial_Reader
{
    class Program
    {

        // Create the serial port with basic settings
         SerialPort port = new SerialPort("COM5",
          9600);



        static void Main(string[] args)
        {
            new Program();

        }

        Program()
    {

      Console.WriteLine("Incoming Data:");
      // Attach a method to be called when there
      // is data waiting in the port's buffer
      port.DataReceived += new 
        SerialDataReceivedEventHandler(port_DataReceived);

      // Begin communications
      port.Open();

      // Enter an application loop to keep this thread alive
      Application.Run();
    }

    private void port_DataReceived(object sender,
      SerialDataReceivedEventArgs e)
    {
      // Show all the incoming data in the port's buffer

      Console.WriteLine(port.ReadExisting());
    }

    }
}

この場合、センサーを押して放します

arduino のコンソール出力:

0
0
0
0
285
507
578
648
686
727
740
763
780
785
481
231
91
0
0
0
0
0

C# での同じシナリオ

0

0

0

0

55
3

61
1

6
46

666

676

68
4

69
5

6
34

480

78

12

0

0

0

0

シリアルポートの経験はまったくありませんが、ストリームが....「非同期」のように見えます...読み取る別のバイトがあるようですが、受信者はこれを認識しません。

これについて何ができますか?

4

1 に答える 1

3

行の終わりの前に発生する可能性があるため、 が発生するとすぐに印刷されるため、回答が切り捨てられます ( に553なるなど)。55\n3DataReceived

代わりにReadLine()、ループで使用する必要があります。

Console.WriteLine("Incoming Data:");

port.Open();

while (true)
{
    string line = port.ReadLine();

    if (line == null) // stream closed ?
        break;

    Console.WriteLine(line);
}

port.Close();

これにより、COM ポートからの着信ReadLine()を食べる必要があるため、二重改行の問題も解決するはずです。\n

于 2013-09-17T11:20:16.243 に答える