Arduino整数数组总是为索引0返回值3

时间:2014-02-01 01:31:12

标签: arrays arduino

我写了这个草图,将代码发送到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 = "";
            }
        }
    }
}

感谢您提供任何建议或帮助解决此事。

布鲁尔。

1 个答案:

答案 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[] {}; 

因为没有内存来存储东西。

我猜这两个错误本身就可以解释你的程序的一些未定义的行为。鉴于那些基本的东西是完全错误的,我没有分析你的算法本身的有效性,因为它已经晚了,我即将入睡; - )