Я пытаюсь отправить данные из формы Windows VS в Arduino, но мои данные продолжают зеркально отображаться.Я не уверен, имеет ли это отношение к буферу.Если мое понимание правильное, оно не должно иметь ничего общего с буфером или с данными для чтения / записи кода, и это проблема синхронизации?Буфер похож на очередь системы.Поскольку это FIFO, порядок, в котором я инициализировался, он будет иметь тот же порядок.
Я нашел эту статью, но я не уверен, применима ли она.В этот пример о кольцевом буфере UART голова и хвост при объявлении имеют один и тот же элемент.Это относится к обычным буферам?Я предположил, что, поскольку это FIFO, голова и хвост не будут разделять один и тот же элемент.Эта статья о двойной буферизации , кажется, о чем я говорю, но я не думаю, что технически я использую 2 буфера?
Например,
String a = "1";
String b = "2";
String c = "3";
String d = "4";
String e = "5";
String f = "6";
String g = "7";
String h = "8";
String[] sendchar = new String [] {a, b, c, d, e, f, g, h};
Поэтому, когда я отправляю свои данные, поток буфера должен быть, справа будет первый элемент, а слева - последний;«h, g, f, e, d, c, b, a» a будет отправлено сначала, затем b и так далее.
В настоящее время, когда я отправляю данные, и они возвращаются, я получаю в обратном порядке, я отправлю «a, b, c, d, e, f, g, h», но получу «h», g, f, e, d, c, b, "возвращено".
Я получаю данные, читая их, а затем сохраняю в массив, дублирую, а затем получаю доступ к элементам вдублированный массив.Таким образом, порядок данных должен быть сохранен.
while (Serial.available() > 0 && newData == false)
{
rb = Serial.read();
if (rb != endMarker)
{
receivedChar[ndx] = rb;
copyarray[ndx] = receivedChar[ndx];
ndx++;
Как я получаю данные и отправляю их на Arduino
void loop()
{
recvWithEndMarkers();//get Data
Serial.flush();//Clear Input buffer
delay(10);//delay
testblink();//Test blink
//blink();
echo();//echo data back
Serial.flush();
delay(2000);
}
void echo()
{
for (int b = 0; b <= 7; b++)
{
Serial.write(copyarray[b]);// Send b'th element of array
delay(50);
Serial.write("\n");//newline character terminates read
}
void recvWithEndMarkers() {
static boolean recvInProgress = false;
static byte ndx = 0;
char endMarker = '}';
byte rb;
byte comp;
while (Serial.available() > 0 && newData == false)
{
rb = Serial.read();//read data from input buffer
if (rb != endMarker)//not end marker
{
receivedChar[ndx] = rb;//store data into array index
copyarray[ndx] = receivedChar[ndx];//copy data
ndx++;//next index
if (ndx >= numBytes)
{
ndx = numBytes - 1;
}
}
else//endmarker
{
receivedChar[ndx] = '}'; // terminate the string
recvInProgress = false;
ndx = 0;//reset ndx
}
}
}
На стороне VS
port = new SerialPort("COM3", 9600, Parity.None, 8, StopBits.One);
port.Open();
for (int a = 0; a <= 7; a++)
{
port.Write(sendchar[a]);
Thread.Sleep(50);
}
Thread.Sleep(50);
port.DiscardOutBuffer();
String[] recchar = new String[8];
while (port.BytesToRead != 0)
{
for (int a = 0; a <= 7; a++)
{
recchar[a] = port.ReadLine();
Thread.Sleep(50);
}
}
port.DiscardInBuffer();