我写了这个草图,将代码发送到speakjet声音处理器。它将存储128到254之间的任意数量的三位数整数。我将它们输入串行监视器并在每个整数后输入。它存储在一个数组中,输入900后,存储在数组中的值将被发送到speakjet并返回到串行监视器。我遇到的问题是数组每次都会为索引0返回值3。我不知道为什么会这样。
这是代码。
int in=0;
int code;
int phrase[] {};
int x=0;
String stack="";
void setup() {
Serial.begin(9600);
Serial1.begin(9600);
Serial.println("Ready");
}
void loop() {
while (Serial.available()>0) {
int inbyte = Serial.read();
if (in<=2);
{
stack += (char)inbyte;
in++;
//Serial.println(stack);
//Serial.println(in);
}
if (in==3) {
if (stack == "900") {
for(int i=0;i<x;i++) {
Serial1.write(phrase[i]);
Serial.println(i);
Serial.println(phrase[i]);
Serial.println();
}
stack="";
x = 0;
in = 0;
Serial.println("Ready");
} else {
phrase[x]=0;
int code = stack.toInt();
if (code < 128) {
code = 253;
}
phrase[x]=code;
Serial.println(x);
Serial.println(phrase[x]);
x++;
in=0;
Serial.write(code);
Serial.println();
stack = "";
}
}
}
}
感谢您提供任何建议或帮助解决此事。
布鲁尔。
答案 0 :(得分:0)
好吧,首先,我注意到在重新格式化你的代码时你得到了一个拼写错误:
if (in<=2); // <-- if the condition is true, it does nothing
{
// this block of code always gets executed
stack += (char)inbyte;
in++;
}
然后我发现您可以在阵列中存储任何内容真的很令人惊讶:
int phrase[] {};
因为没有内存来存储东西。
我猜这两个错误本身就可以解释你的程序的一些未定义的行为。鉴于那些基本的东西是完全错误的,我没有分析你的算法本身的有效性,因为它已经晚了,我即将入睡; - )