网上很多资料包括ardunio的官网的例子都是使用softwareserial类定义串口并使用available接口等待数据的到来,但实际我在使用过程中发现是不好使的,我用杜邦线把18,19引脚连接到一起,这样就可以实现自发数据自接收,根据官网代码如下:
SoftwareSerial mySerial(19, 18); // RX, TX
void setup() {
// Open serial communications and wait for port to open:
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for native USB port only
}
Serial.println("Goodnight moon!");
// set the data rate for the SoftwareSerial port
mySerial.begin(9600);
mySerial.println("Hello, world?");
}
void loop() { // run over and over
if (mySerial.available()) {
Serial.write(mySerial.read());
}
if (Serial.available()) {
mySerial.write(Serial.read());
}
}
mySerial.available()的这个条件语句是永远都进不去的。换了其他引脚也不好使。
但是换种写法就没有问题了,把mySerial换成Serial1就可以了。
void setup()
{
Serial.begin(9600);
Serial1.begin(9600);
Serial1.println("Serial1.available");
}
void loop() // run over and over
{
//delay(1000);
if (Serial1.available()) {
Serial.write(Serial1.read());
//Serial.println("111");
}
// 从串口0转发到串口1(Arduino to WRTnode):
if (Serial.available()) {
Serial1.write(Serial.read());
//Serial.println("222");
}
}
在setup中的println的数据在loop的Serial1.available()条件语句中是为true的,有个问题就是read接口是一个字符一个字符返回。