调试arduino代码

时间:2016-03-15 07:56:10

标签: debugging arduino frequency arduino-uno arduino-ide

我正在制作一个从风速计获得风速的项目。 我使用带底座护罩的Arduino和我的风速计(sparkfun上的08492) 我已经做了一个代码,但它没有用,我有一些我无法理解的错误,如果有人可以帮我调试它会非常酷:D

long mesure_frequence;
int anemo = 4;
unsigned long periode = 0;
unsigned long etat_bas = 0;
unsigned long etat_haut = 0;
unsigned long freq = 0;

void setup()
{
    pinMode(anemo, INPUT);
    Serial.begin(9600);
}

void loop()
{
    unsigned char i;
    unsigned char tempo_minutes=10;
    unsigned long frequence;
    float vitesse_vent[3];
    float vitesse_moyenne;

    for(i=0; i>2; i++) /*boucle for pour récuperer 3 valeur*/
    {
        frequence=mesure_frequence;
        vitesse_vent[i]=frequence*1.492; //1Hz = 1,492KMh
        vitesse_moyenne=(vitesse_vent[0]+vitesse_vent[1]+vitesse_vent[2])/3;
    }

    /*envoyer en i2c*/
    for(i=1; i>tempo_minutes; i++)
    { 
        delay(60000);
    } 

    {
    Serial.print (vitesse_moyenne);
    }
}

int unsigned long mesure_frequence(void);

    unsigned long periode = 0;
    unsigned long etat_bas = 0;
    unsigned long etat_haut = 0;
    unsigned long freq = 0;

    etat_bas = pulseIn(anemo, LOW); //mesure de l'état bas du signal en microsecondes
    if (etat_bas==0)
    {
        etat_haut=0;
    }
    else
    {
        etat_haut = pulseIn(anemo, HIGH);  //mesure de l'état haut du signal en microsecondes
    }

    periode=etat_bas+etat_haut;  //calcul de la période du signal en microsecondes
    if (periode==0)
    {
        freq=0;
    }
    else
    {
        freq=1000000/periode;  //calcul de la fréquence du signal en secondes
    }

最后,我有一个最大的问题,在数据中它表示我可以将1个脉冲转换为1.492MPH但是它是假的,它是2个脉冲用于1.492MPH所以我可能使用除PulseIn之外的东西,可能是FreqMeasure或AttachInterrupt,有人可以帮帮我吧!

1 个答案:

答案 0 :(得分:1)

  • for循环中使用的条件不正确。
  • 您不应使用未初始化的非静态局部变量。
  • 您可能希望调用 functon mesure_frequence`而不是将指针添加到函数中。
  • mesure_frequence的第一行定义是错误的:
    • 返回类型int unsigned long无效。
    • 功能的实现必须介于{}之间。
  • 您声明了一个变量mesure_frequence,然后定义了一个具有相同名称的函数,这是非法的。
  • 函数mesure_frequence必须返回一些值。

可能的解决方法:

int anemo = 4;
unsigned long periode = 0;
unsigned long etat_bas = 0;
unsigned long etat_haut = 0;
unsigned long freq = 0;

void setup()
{
    pinMode(anemo, INPUT);
    Serial.begin(9600);
}

void loop()
{
    unsigned char i;
    unsigned char tempo_minutes=10;
    unsigned long frequence;
    float vitesse_vent[3];
    float vitesse_moyenne;

    for(i=0; i<3; i++) /*boucle for pour récuperer 3 valeur*/
    {
        frequence=mesure_frequence();
        vitesse_vent[i]=frequence*1.492; //1Hz = 1,492KMh
    }
    vitesse_moyenne=(vitesse_vent[0]+vitesse_vent[1]+vitesse_vent[2])/3;

    /*envoyer en i2c*/
    for(i=0; i<tempo_minutes; i++)
    { 
        delay(60000);
    } 

    {
    Serial.print (vitesse_moyenne);
    }
}

unsigned long mesure_frequence(void) {

    unsigned long periode = 0;
    unsigned long etat_bas = 0;
    unsigned long etat_haut = 0;
    unsigned long freq = 0;

    etat_bas = pulseIn(anemo, LOW); //mesure de l'état bas du signal en microsecondes
    if (etat_bas==0)
    {
        etat_haut=0;
    }
    else
    {
        etat_haut = pulseIn(anemo, HIGH);  //mesure de l'état haut du signal en microsecondes
    }

    periode=etat_bas+etat_haut;  //calcul de la période du signal en microsecondes
    if (periode==0)
    {
        freq=0;
    }
    else
    {
        freq=1000000/periode;  //calcul de la fréquence du signal en secondes
    }
    return freq;
}