使用 visual studio c++ 的 Arduino 串行换向
Arduino Serial commutation using visual studio c++
我一直在与 Gird-Eye 一起从事学校项目。
我使用 Arduino Uno 从 Grid-Eye 访问数据。
现在想用c++实现一个串口通信测试程序。
我这里用的是图书馆形式:
http://playground.arduino.cc/Interfacing/CPPWindows
这是 Arduino 代码:
int data[64];
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
for (int i = 0; i < 64; ++i) {
data[i] = i;
}
}
void loop() {
// put your main code here, to run repeatedly:
if (Serial.available() > 0) {
char c = Serial.read();
if (c == 'h') { Serial.write("Hello\r\n"); }
else if (c == 'i') {
for (int i = 0; i < 64; ++i)
Serial.println(data[i]);
}
}
}
这里是 main.cpp 代码:
int main() {
Serial* port = new Serial("COM5");
if (port->IsConnected()) cout << "Connection established!!!" << endl;
char data[256] = "";
int datalength = 256;
int readResult = 0;
for (int i = 0; i < 256; ++i) { data[i] = 0; }
string str;
char command[] = "i";
int msglen = strlen(command);
port->WriteData(command, msglen);
while (1) {
while (port->ReadData(data, 256) != -1) {
printf("%s", data);
}
}
system("pause");
return 0;
}
我用这个接口可以成功取值。
但是 window 附加值显示了额外的价值。
例如,程序应该这样结束。
....
61
62
63
但是我明白了
...
61
62
63
50
51
52
53
我不知道为什么会有额外的价值。
谁能告诉我为什么?
谢谢!!!
我认为您需要终止在每次循环迭代中放入数据缓冲区的字符串:
while ((n = port->ReadData(data, 256)) != -1) {
data[n] = 0;
printf("%s", data);
}
我一直在与 Gird-Eye 一起从事学校项目。 我使用 Arduino Uno 从 Grid-Eye 访问数据。 现在想用c++实现一个串口通信测试程序。 我这里用的是图书馆形式:
http://playground.arduino.cc/Interfacing/CPPWindows
这是 Arduino 代码:
int data[64];
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
for (int i = 0; i < 64; ++i) {
data[i] = i;
}
}
void loop() {
// put your main code here, to run repeatedly:
if (Serial.available() > 0) {
char c = Serial.read();
if (c == 'h') { Serial.write("Hello\r\n"); }
else if (c == 'i') {
for (int i = 0; i < 64; ++i)
Serial.println(data[i]);
}
}
}
这里是 main.cpp 代码:
int main() {
Serial* port = new Serial("COM5");
if (port->IsConnected()) cout << "Connection established!!!" << endl;
char data[256] = "";
int datalength = 256;
int readResult = 0;
for (int i = 0; i < 256; ++i) { data[i] = 0; }
string str;
char command[] = "i";
int msglen = strlen(command);
port->WriteData(command, msglen);
while (1) {
while (port->ReadData(data, 256) != -1) {
printf("%s", data);
}
}
system("pause");
return 0;
}
我用这个接口可以成功取值。 但是 window 附加值显示了额外的价值。 例如,程序应该这样结束。
....
61
62
63
但是我明白了
...
61
62
63
50
51
52
53
我不知道为什么会有额外的价值。 谁能告诉我为什么? 谢谢!!!
我认为您需要终止在每次循环迭代中放入数据缓冲区的字符串:
while ((n = port->ReadData(data, 256)) != -1) {
data[n] = 0;
printf("%s", data);
}