大家都知道为什么Serial.print()不能用于Arduino micro?
我试过这段代码
void setup() {
Serial.begin(9600); // initialization
while (!Serial){}
;
Serial.println("Begin");
}
但串行显示器上没有显示任何内容。
提前致谢!
答案 0 :(得分:3)
我猜你的意思是:
void setup() {
Serial.begin(9600);
while (!Serial);
Serial.println("Begin");
}
实际上你想要的是:
void setup() {
Serial.begin(9600);
Serial.println("Begin");
}
因为我认为!Serial
不是定义的行为,因为Serial
是串行通信的实例。调用not
类上的Serial
运算符可能会编译并运行,但无论是真还是假,它都将返回相同的内容。如果它返回false,那么你最终会阻止你的arduino在该语句之后做任何其他事情。
虽然,基本上,当您设置串行通信时,您可以放心地假设它已准备好进行通信。有时,您可能需要延迟一点(从我自己的经验大约3秒),主机为每个基于atmega32uX的arduinos设置设备,这是Micro和Leonardo的情况。如果你没有添加3秒的延迟,Arduino将打印Begin
语句,但你不会看到它,因为计算机没有重新启动设备之前它被打印出来。
为了更好地理解我的意思,请尝试以下代码:
void setup() {
Serial.begin(9600);
Serial.println(10);
delay(1000);
Serial.println(9);
delay(1000);
Serial.println(8);
delay(1000);
Serial.println(7);
delay(1000);
Serial.println(6);
delay(1000);
Serial.println(5);
delay(1000);
Serial.println(4);
delay(1000);
Serial.println(3);
delay(1000);
Serial.println(2);
delay(1000);
Serial.println(1);
delay(1000);
Serial.println("Begin");
}
如果您提前打开串行显示器非常,则只会看到从7
开始的输出。
HTH
答案 1 :(得分:1)
对于使用Atmega32u4微控制器的Leandro,Micro和任何其他电路板,在连接到控制器后,您需要确保将RTS和DTR设置为高电平。以下是我使用的一些C#代码:
_port.Handshake = Handshake.None;
_port.Open();
_port.RtsEnable = true;
_port.DtrEnable = true;
答案 2 :(得分:0)
我有类似的问题。我正在侦听串口并等到Arduino发送了一个字符串Arduino is ready!
。只有在那之后我才能通过串口发送数据(在我的情况下通过USB)。
解决此问题的方法是在与Serial交换消息之前等待几秒钟。但在我的用例中,我需要它尽快沟通。所以我做的是:
String READY_MSG = "Arduino is ready!";
bool isConnected = false;
void setup() {
Serial.begin(9600);
}
void loop(){
while(!Serial){
// Do nothing... Wait for serial connection
isConnected = false;
}
// If we were not connected, it means we need to greet with READY_MSG
if(!isConnected ){
isConnected = true;
Serial.print(READY_MSG);
}
// We can safely communicate now!
}
希望这有助于某人!