无法查看Arduino micro的Serial.print()

时间:2014-02-03 16:28:25

标签: arduino

大家都知道为什么Serial.print()不能用于Arduino micro?

我试过这段代码

void setup() {

  Serial.begin(9600); // initialization
  while (!Serial){}
   ;  

  Serial.println("Begin");
}

但串行显示器上没有显示任何内容。

提前致谢!

3 个答案:

答案 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!
}

希望这有助于某人!