2014-02-18 26 views
0

我有这个Arduino代码我想运行,它侦听通过从我写的一些C++代码串行输入进来。这些信息正在写入连接,但我在Arduino方面看到了一些非常奇怪的行为。Arduino项目需要打印语句工作

如果我不把打印语句放在(特别是非printRGB()语句)中,我看不到任何输出到串行控制台。只要我加入他们,他们开始再次出现。这是怎么回事?

#define LED_PIN 13 
#define R_PIN 3 
#define G_PIN 5 
#define B_PIN 6 
#define frameBegin ((char) 255) 

char colors[] = { 
    0,0,0}; 

void setup() { 
    Serial.begin(9600); 
    pinMode(LED_PIN, OUTPUT); 
    pinMode(R_PIN, OUTPUT); 
    pinMode(G_PIN, OUTPUT); 
    pinMode(B_PIN, OUTPUT); 
    // establishContact(); 
    Serial.println("blah"); 
} 

void loop() { 
    if (Serial.available() > 0) { 
    char inByte = Serial.read(); 
    toggleLED(); 
    // Got a new frame 
    //Serial.println('S'); 
    if (inByte == frameBegin) { 
     //Serial.println('B'); 
     //write bass 
     boolean allThree = true; 
     for (int i=0; i < 3; i++) { 
     char rgb = Serial.read(); 
     if (rgb == frameBegin) { 
      //Serial.println('F'); 
      allThree = false; 
      break; 
     } 
     else { 
      colors[i] = rgb; 
     } 
     } 
     if (allThree) { 
     //printRGB(); 
     analogWrite(R_PIN, colors[0]); 
     analogWrite(G_PIN, colors[1]); 
     analogWrite(B_PIN, colors[2]); 
     } 
    } 
    } 
} 

void printRGB() { 
    Serial.print("rgb: "); 
    Serial.print((uint8_t) colors[0]); 
    Serial.print(" "); 
    Serial.print((uint8_t) colors[1]); 
    Serial.print(" "); 
    Serial.println((uint8_t) colors[2]); 
} 
+1

如果你不打印序列号,你期望读什么? 你自己的命令不会出现,因为它们不是由arduino写的,串口监视器不会给你一个你写的东西的日志。 – Lesto

+0

请参阅printRGB()。在我得到一个特定的字节表示一个“帧”的开始并且我得到我期望的值的数量之后调用它。 – amruthv

+0

如果你删除它,你将看不到任何东西,因为它永远不会被调用。我不明白什么是错的。为什么您期望在SerialConsole上读取一些内容,删除在串行上写入该值的代码? – Lesto

回答

0

这有点奇怪,因为计时和转换。首先:你等待一个字节,并放入“inByte”。 我们知道Serial.read()不能返回-1,因为我们确信至少有一个字节。 非常重要:请注意-1在int中,转换为字节(uint8_t)为255(也是你的(char)255表示-1,请参阅2的补码来理解为什么)

然后你做一些代码,速度很快,但是您可以取消注释Serial.print()会减慢速度。

然后你读取3个字节而不确定是否有3个字节被接收;与serial.print()你添加了一个延迟,lucily,让你阅读这个字节,但没有print()你的代码是如此之快(9600波特率意味着960byte/s !!这真的很慢),没有字节到达并且你总是从Serial.read(巫婆的意思是“没有什么可读”)得到一个-1,然后将它转换为char(仍为-1),但随后将其打印为(uint8_t),因此它被赋值并且值为255

在我的arduino uno上测试过,IDE 1.5.4