私は現在マスタがC#プログラムであり、スレーブがArduino Unoであるマスタ/スレーブで作業しています。 Arduinoはいくつかの価値観を読んでおり、期待通りに働いていますが、私はC#側でいくつかの問題を抱えています。私は、次のように構造化された3バイトのデータを返すADコンバータ(AD7680)から3バイトを読み込んでいます。C#とArduino Master/SlaveはADから3バイト読み取る
0000 | 16ビット数| 0000
私のC#プログラムは、期待値であるdoubleで戻り値を読み取っています。しかし、私は最後の4つの0を取り除き、必要な2バイトの番号を得る方法を見つけられませんでした。
データを失うことなく適切な値を得るための最良の方法は何ですか?私は 'BitConverter'を試みましたが、それは私が期待しているものではなく、どのように進むべきかわかりません。私は現在、残念ながらコードを添付することはできませんが、必要に応じて何かを参照することができます。
読んでいただきありがとうございます!
EDIT:これは、C#側の機能である:
public double result(byte[] command)
{
try
{
byte[] buffer = command;
arduinoBoard.Open();
arduinoBoard.Write(buffer, 0, 3);
int intReturnASCII = 0;
char charReturnValue = (Char)intReturnASCII;
Thread.Sleep(200);
int count = arduinoBoard.BytesToRead;
double returnResult = 0;
string returnMessage = "";
while (count > 0)
{
intReturnASCII = arduinoBoard.ReadByte();
//string str = char.ConvertFromUtf32(intReturnASCII);
returnMessage = returnMessage + Convert.ToChar(intReturnASCII);
count--;
}
returnResult = double.Parse(returnMessage, System.Globalization.CultureInfo.InvariantCulture);
arduinoBoard.Close();
return returnResult;
}
catch (Exception e)
{
return 0;
}
}
そしてそれと通信Arduinoの機能はこの1つである:
unsigned long ReturnPressure(){
long lBuffer = 0;
byte rtnVal[3];
digitalWrite(SLAVESELECT , LOW);
delayMicroseconds(1);
rtnVal[0] = SPI.transfer(0x00);
delayMicroseconds(1);
rtnVal[1] = SPI.transfer(0x00);
delayMicroseconds(1);
rtnVal[2] = SPI.transfer(0x00);
delayMicroseconds(1);
digitalWrite(SLAVESELECT, HIGH);
// assemble into long type
lBuffer = lBuffer | rtnVal[0];
lBuffer = lBuffer << 8;
lBuffer = lBuffer | rtnVal[1];
lBuffer = lBuffer << 8;
lBuffer = lBuffer | rtnVal[2];
return lBuffer;
}
あなたのC#コードでarduinoからデータを受け取る方法を示してください...シリアルですか? – Fruchtzwerg
ダブルで?それを二重でどのように読むことができますか?バイト配列を使用して3バイトを格納し、32ビットintに入れ、最後に値をシフトします。そして、最も重要なのは、「あなたのC#コードでarduinoからデータを受け取る方法を表示してください」 – frarugi87
@Fruchtzwergそれはシリアル通信ですはい...私は質問されたコードでメインの質問を編集しました。私はC#側でdoubleを使用しています。その理由は、その関数が別のセンサーから読み込まれている他のパラメータに対してArduinoを呼び出しているため、読み込んだ数値が必要なためです。私はそれにも新しい機能を作り出すことができましたが、私はこれを単純化するように努力していました。ご支援ありがとうございます! – user2783511