我正在制作一个从风速计获得风速的项目。 我使用带底座护罩的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,有人可以帮帮我吧!
答案 0 :(得分:1)
for
循环中使用的条件不正确。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;
}