繁体   English   中英

调试Arduino代码

[英]Debug arduino code

我正在做一个从风速计获取风速的项目。 我将Arduino与基本护罩和风速计一起使用(风帆上的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,但它是错误的,它是1.492MPH的2个脉冲,因此我可能使用PulseIn以外的其他功能,例如FreqMeasure或AttachInterrupt,有人可以帮忙吗我请!

  • 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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM