【发布时间】:2014-02-18 16:11:34
【问题描述】:
我有这个 Arduino 代码,我想运行它来侦听我正在编写的一些 c++ 代码通过串行输入的输入。此信息正在写入连接,但我在 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]);
}
【问题讨论】:
-
如果您不将任何内容打印到连载中,您希望阅读什么内容?您自己的命令不会出现,因为它们不是由 arduino 编写的,并且串行监视器不会给您提供您所写内容的日志。
-
参见 printRGB()。在我得到一个表示“帧”开始的特定字节并且我得到我期望的值的数量之后调用它。
-
如果你删除它,你将看不到任何东西,因为它永远不会被调用。我不明白这有什么问题。为什么您希望在 SerialConsole 上读取一些内容,删除在串行上写入该值的代码?
-
糟糕,对不起!在从 repo 中提取代码之前粘贴代码:D。现在更新 - 查看 serial.println("b") serial.println("s") 等。始终保留 printRGB(),没有 println("B"/"S") RGB 值永远不会打印.
标签: c++ serial-port arduino led