1

コンソールから標準入力を取得して、プレーンASCIIとしてArduinoUnoに送信しようとしています。

\r\n次のコードを使用して、入力を取得し、そこから削除します。

String Input = Console.Read().ToString().Replace("\r",string.Empty).Replace("\n",string.Empty);

を実行するdoConsole.WriteLine(Input);と、正しい「72」が出力されますが、実行するとserialPort.Write(Input);、Arduinoは「55」を返します。これはすべてに対して実行されます。

私は何が間違っているのですか?

C#側(ホスト/ PC)の私のコード:

String Input = Console.Read().ToString().Replace("\r", string.Empty).Replace("\n",string.Empty);

//Console.WriteLine(Input);
//serialPort.Write(Input);

char[] InputChar = Input.ToCharArray();
serialPort.Write(InputChar,0,1);

//byte[] InputByte = Encoding.ASCII.GetBytes(Input);
//Console.WriteLine(Input);
//serialPort.WriteLine(Input);

Thread.Sleep(25);  //Wait 0.025 second.


//***************************************************************//
// Read anything from the serial port.                           //
//***************************************************************//

numBytes = serialPort.BytesToRead;
for (int i = 0; i < numBytes; i++)
    rxPacket[i] = (byte)serialPort.ReadByte();

result = new char[numBytes];
for (int i = 0; i < numBytes; i++)
    result[i] = (char)rxPacket[i];

Console.Write("Read this from Arduino:");
Console.WriteLine(result);

Console.WriteLine("press Enter to continue");
Console.ReadKey();                                   //Read nothing.

そして私のArduinoスケッチ:

const int ledPin = 13; // The pin that the LED is attached to.
int incomingByte;      // A variable to read incoming serial data into.

void setup() {
    // Initialize serial communication:
    Serial.begin(9600);
    // Initialize the LED pin as an output:
    pinMode(ledPin, OUTPUT);
}

void loop() {
    // see if there's incoming serial data:
    if (Serial.available() > 0) {
        // Read the oldest byte in the serial buffer:
        incomingByte = Serial.read();
        // If it's a capital H (ASCII 72), turn on the LED:
        if (incomingByte == 'H') {
            digitalWrite(ledPin, HIGH);
            Serial.print(incomingByte);
        }
        // If it's an L (ASCII 76), turn off the LED:
        else if (incomingByte == 'L') {
            digitalWrite(ledPin, LOW);
            Serial.print(incomingByte);
        }
        else{
            Serial.print(incomingByte);
       }
    }
}

編集:コードを次のように変更しました。まだ運がない。私は同じ返事を受け取っています。

String Input = Console.Read().ToString().Replace("\r",string.Empty).Replace("\n",string.Empty);
Console.Write(Input,0,1);
//serialPort.Write(Input);
byte[] inputByte = Encoding.ASCII.GetBytes(Input);
serialPort.Write(inputByte,0,1);
4

2 に答える 2

2

さて、調べてみました...結局のところ、ASCIIコード55= 7

7は72の最初の桁です。

うーん、おそらくここでArduinoに10進数を送信すると、Arduinoが7最初に表示されます。バイトを変換してバイトとして送信することをお勧めします(バイトには0..255しか含めることができません)が、これは単一のASCIIコードです。

Arduinoが考えるかもしれませんが、これとは関係がないかもしれません。それ以外の

int incomingByte;  // ints are made of 2 bytes an int isn't an incomming byte

試す

Byte incomingByte;
于 2012-10-21T22:31:37.480 に答える
0

だから私はそれをうまく動かすことができました

基本的に、それをバイトに変換するのに時間がかかりました。

これは私が最終的に得たコードです

 String Input = Console.Read().ToString().Replace("\r", string.Empty).Replace("\n",string.Empty);
        Console.Write(Input,0,1);
        byte[] inputByte = new byte[1];
        inputByte[0] = Convert.ToByte(Input);
        serialPort.Write(inputByte, 0, 1);
        //byte[] inputByte = Encoding.ASCII.GetBytes(Input);
        //serialPort.Write(inputByte,0,2);
        //String num = inputByte.ToString();
        //serialPort.WriteLine(num);
       //Console.WriteLine(Input);
        //serialPort.Write(InputByte,0,1);
        Thread.Sleep(25);  //Wait 0.025 second.


        //***************************************************************//
        // Read anything from the serial port.                           //
        //***************************************************************//

        numBytes = serialPort.BytesToRead;
        for (int i = 0; i < numBytes; i++)
            rxPacket[i] = (byte)serialPort.ReadByte();

        result = new char[numBytes];
        for (int i = 0; i < numBytes; i++)
            result[i] = (char)rxPacket[i];

        Console.Write("Read this from Arduino:");
        Console.WriteLine(result);


        Console.WriteLine("press Enter to continue");
        Console.ReadKey();                                   //Read nothing.

Seems to work Perfectly now. 
于 2012-10-21T23:08:43.273 に答える