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

Arduino loop stops after for loop in called function

我正在尝试制造一种无线电控制的汽车,它可以对音乐的频率做出反应。 Loop 正常工作,它给了我正确的频率。函数 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]);
    }
}

您超出了 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,这对于数组来说太大了。