Arduino循环在被调用函数中的for循环后停止

时间:2018-01-11 20:48:28

标签: arduino arduino-uno

我正在尝试制作一款对音乐频率做出反应的无线电控制汽车。循环工作正常,它给了我正确的频率。函数berekenGrootte也有效。这给了我频率的大小(最大频率 - 最小频率)。但是一旦我想使用函数verdeel()将频率大小除以10以使汽车移动更顺畅它会做一到两次然后我的序列中不再有任何反馈监控。我是否使用了太多Serial.print或者我是否需要在第二个函数中的for循环后重新启动循环?

#include <FreqMeasure.h>

void setup()
{
    Serial.begin(57600);
    pinMode(3, OUTPUT);
    pinMode(5, OUTPUT);
    pinMode(2, OUTPUT);
    pinMode(4, OUTPUT);
    FreqMeasure.begin();
}

double sum = 0;
int count = 0;
float lowest = 50;
float highest = 0;
float grootte = 50;
float b[9][1];

void loop()
{
    if (FreqMeasure.available()) {
        // average several reading together
        sum = sum + FreqMeasure.read();
        count = count + 1;
        if (count > 30) {
            float frequency = FreqMeasure.countToFrequency(sum / count);
            Serial.println(frequency);
            sum = 0;
            count = 0;
            if (frequency < lowest) {
                lowest = frequency;
                Serial.print("new lowest: ");
                Serial.println(lowest);
                berekenGrootte();
            }
            else if (frequency > highest) {
                highest = frequency;
                Serial.print("new highest: ");
                Serial.println(highest);
                berekenGrootte();
            }
            /*if(frequency > 1000){
                digitalWrite(3,HIGH);
                delay(1000);
                digitalWrite(3,LOW);
            }
            else{
                digitalWrite(5,HIGH);
                delay(1000);
                digitalWrite(5,LOW);
            }*/
        }
    }
}
void berekenGrootte()
{
    grootte = highest - lowest;
    Serial.print("new grootte: ");
    Serial.println(grootte);
    verdeel();
}
void verdeel()
{
    float plength = grootte / 10;
    b[0][0] = lowest;
    b[0][1] = lowest + plength;
    Serial.print("low: ");
    Serial.println(b[0][0]);
    Serial.print("high: ");
    Serial.println(b[0][1]);
    float startvalue = lowest + plength;
    for (int i = 1; i < 10; i++) {
        b[i][0] = startvalue;
        b[i][1] = startvalue + plength;
        startvalue = startvalue + plength;
        Serial.print(i);
        Serial.print(" low: ");
        Serial.println(b[i][0]);
        Serial.print(i);
        Serial.print(" high: ");
        Serial.println(b[i][1]);
    }
}

1 个答案:

答案 0 :(得分:2)

你超越了b阵列的界限。

float b[9][1];

阵列只有9 * 1.

void verdeel()
{
    float plength = grootte / 10;
    b[0][0] = lowest;
    b[0][1] = lowest + plength;

所以没有元素b [0] [1]。第二个数字最多只能为0,因为该数组在该维度中的大小为1。大小为1的数组作为数组是没用的。

在这个函数结尾的循环中,你有同样的问题:

 for (int i = 1; i < 10; i++) {
        b[i][0] = startvalue;
        b[i][1] = startvalue + plength;

这个for循环允许我转到9,这对于数组来说太大了。