我想2个Arduinos莱昂纳多进行通信,发送一个字符串为实例,因此我必须使用Serial1
经由RS232引脚0(RX)和1(TX)进行通信。
我需要在销写的二进制数据,问题是我如何使用发送字符串Serial1.write
。 Serial1.print
工作没有错误,但我认为它不会做我想做的。 任何建议?
void setup() {
Serial.begin(9600);
Serial1.begin(9600);
while (!Serial); // while not open, do nothing. Needed for Leonardo only
}
void loop() {
String outMessage = ""; // String to hold input
while (Serial.available() > 0) { // check if at least one char is available
char inChar = Serial.read();
outMessage.concat(inChar); // add Chars to outMessage (concatenate)
}
if (outMessage != "") {
Serial.println("Sent: " + outMessage); // see in Serial Monitor
Serial1.write(outMessage); // Send to the other Arduino
}
}
这条线Serial1.write(outMessage);
是给我的错误
“ no matching function for call to 'HardwareSerial::write(String&)'
”
您使用的是String对象(接线/ C ++)。 该函数是用C字符串:Serial.write(字符*)。 为了把它变成一个C字符串,您使用toCharArray()方法。
char* cString = (char*) malloc(sizeof(char)*(outMessage.length() + 1);
outMessage.stoCharArray(cString, outMessage.length() + 1);
Serial1.write(cString);
如果我们不使用malloc分配内存为我们的C字符串,我们会得到一个错误。 下面的代码将崩溃。
void setup() {
Serial.begin(9600);
String myString = "This is some new text";
char* buf;
Serial.println("Using toCharArray");
myString.toCharArray(buf, myString.length()+1); // **CRASH** buf is not allocated!
Serial.println(buf);
}
void loop() {
// put your main code here, to run repeatedly:
}
在串行监视器,我们将得到的唯一信息是:使用toCharArray。 在这一点上停止执行。 现在,如果我们纠正问题,使用malloc()来分配内存为我们的缓冲区,还可以使用免费的()完成时....
void setup() {
Serial.begin(9600);
String myString = "This is some new text";
char* buf = (char*) malloc(sizeof(char)*myString.length()+1);
Serial.println("Using toCharArray");
myString.toCharArray(buf, myString.length()+1);
Serial.println(buf);
Serial.println("Freeing the memory");
free(buf);
Serial.println("No leaking!");
}
void loop() {
// put your main code here, to run repeatedly:
}
我们在串行监视器看到的输出是:使用toCharArray这是一些新的文本释放内存不漏液!
使用toCharArry(),write()方法使用字符*,不串,这里就是我的意思是:
void setup() {
Serial.begin(9600);
Serial1.begin(9600);
while (!Serial);
}
void loop() {
String outMessage = "";
while (Serial.available() > 0) {
char inChar = Serial.read();
outMessage.concat(inChar);
}
if (outMessage != "") {
Serial.println("Sent: " + outMessage);
char* CharString; //
outMessage.toCharArray(cString, outMessage.length()) // My Changes Are Here
Serial1.write(CharString); //
}
}