在arduino中,serial.print和serial.printIn有啥区别

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在arduino中,serial.print和serial.printIn有啥区别相关的知识,希望对你有一定的参考价值。

Serial.print 发送的是字符,如果你发送97,发过去的其实是9的ascii码(00111001)和7的ascii码(00110111)。
Serial.write 发送的字节,是一个0-255的数字,如果你发97, 发过去的其实是97的二进制(01100001),对应ascii表中的“a".追问

看清问题好吗?

参考技术A Serial.print不会换行 Serial.println会换行= = 参考技术B ln是换行,没有ln就是不换行。

如何在Arduino上传输字符串?

我想让2个Arduinos Leonardo进行通信,例如发送一个字符串,所以我必须使用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);给了我错误

“Qazxswpoi”

答案

您正在使用String对象(Wiring / C ++)。该函数使用C字符串:Serial.write(char *)。要将其转换为C字符串,请使用toCharArray()方法。

no matching function for call to 'HardwareSerial::write(String&)'

如果我们没有为malloc的C字符串分配内存,我们就会出错。以下代码将崩溃。

char* cString = (char*) malloc(sizeof(char)*(outMessage.length() + 1);
outMessage.stoCharArray(cString, outMessage.length() + 1);
Serial1.write(cString);

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

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

另一答案

使用toCharArry(),write()使用char *,而不是string,这就是我的意思:

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: 

}

以上是关于在arduino中,serial.print和serial.printIn有啥区别的主要内容,如果未能解决你的问题,请参考以下文章

arduino 在外面的函数使用 Serial.print();

Arduino Serial.print()串口打印函数

Arduino中的串口通信!!Serial.print()是否带有打印的功能??

Arduino中出现错误说是'Serial1' was not declared in this scope.

如何在Arduino上传输字符串?

将指针与C ++中的字节进行比较(Arduino)