serialPort를 통해 Arduino UNO에 G 코드가 포함 된 텍스트 파일을 스트리밍하고 싶습니다.serialPort를 통해 Arduino UNO에 큰 파일을 스트리밍하는 C#
Arduino는 SerialEvent로 모든 바이트를 수신하여 buffer라는 char 배열에 추가합니다. 버퍼가 가득 차면 "!;" 시리얼 포트를 통해 C#. Arduino IDE의 Serial Montior 응용 프로그램에서 테스트 한 결과 제대로 작동합니다. 하지만 C#에서 보낼 수있는 텍스트를 입력 할 수 없습니다. :)
C# 프로그램은 줄 바른 방식으로 G 코드 파일을 읽은 다음 줄의 각 문자를 arduino로 보냅니다. 각 문자 뒤에 Arduino가 버퍼가 가득 찼다 고 나에게 알려주는지 확인하고 싶습니다. 그렇지 않으면 스트리밍을 계속하십시오.
어떻게 든 C#은 "!;" 스트리밍하는 동안 Arduino에서 읽는 모든 바이트를 가져옵니다. serialPort.Write() 함수가 포트를 차단한다는 느낌이 들었습니다.
이
은 아두 이노 코드입니다 :void serialEvent()
{
// wenn im Puffer noch platz ist
if (buffercount < MAX_BUF)
{
char c = (char)Serial.read();
buffer[buffercount++] = c;
}
else
{
Serial.print("!;");
}
}
serialEvent는 아두 이노 포트에 바이트를 수신 할 때마다 발생합니다. BytesToRead
이 결코 없기 때문에
private void startStreaming(string Text)
{
string[] stringSeparators;
string Text2Stream;
if (Text == "")
{
Text2Stream = File.ReadAllText(textBoxSelectFile.Text);
stringSeparators = new string[] { "\n" };
}
else
{
stringSeparators = new string[] { "\r\n" };
Text2Stream = Text;
}
string[] t2s = Text2Stream.Split(stringSeparators, StringSplitOptions.None);
foreach (string zeile in t2s)
{
if (zeile.Contains(")") || zeile.Contains("("))
{
continue;
}
// Code schicken
foreach (char c in zeile)
{
if (c == ' ') continue;
serialPort.Write(c.ToString());
if (serialPort.BytesToRead > 0)
{
if(serialPort.ReadExisting() == "!;")
{
**wait and do smth.**
}
}
}
serialPort.Write(";");
addTextToLog(zeile);
}
}
serialPort.ReadExisiting()
가 결코 발생하지 : Max_BUF는 64
의 값이 C# 코드입니다 있습니다. ";" 두 줄 끝에 대한 표시입니다. startStreaming
은 비동기 스레드에서 BackGroundWorker
으로 시작됩니다.
소리가 나지만 C# 응용 프로그램이 스트리밍을 계속하는 동안 아무 것도 수신되지 않습니다. 나는 당신의 대답이 맞을지도 모른다고 생각하지만 그것이 100 % 정확하다면 나는 호기심이 듭니다. 스트리밍을 계속하면 응답이 없습니다. – Mika
나는 당신의 언급 된 수면()으로 그것을 테스트 했는데도 도움이되지 않는다. (아마 arduino쪽에 뭔가 빠졌을 것인가? – Mika
만약 Arduino가 serialPort에 바이트를 수신 한 후에 smeth를 써야한다면 '일하는 것도. char c = (char) Serial.read(); 버퍼 [buffercount ++] = c; Serial.print ("L"); – Mika