gpt4 book ai didi

arduino - 如何在Arduino上传输字符串?

转载 作者:行者123 更新时间:2023-12-02 14:09:24 26 4
gpt4 key购买 nike

我想要 2 个 Arduino Leonardo 进行通信,例如发送一个字符串,因此我必须使用 Serial1 通过引脚 0 (RX) 和 1 (TX) 上的 RS232 进行通信。

我需要在该引脚中写入二进制数据,问题是如何使用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 对象(Wiring/C++)。该函数使用 C 字符串:Serial.write(char*)。要将其转换为 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:

}

在串行监视器中,我们将收到的唯一消息是:Using toCharArray。此时执行停止。现在,如果我们纠正问题并使用 malloc() 为缓冲区分配内存,并在完成后使用 free()...

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这是一些新文本释放内存不漏水!

关于arduino - 如何在Arduino上传输字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16290981/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com