2016-03-15 4 views
0

Я делаю проект, чтобы получить скорость ветра от анемометра. Я использую Arduino с базовым экраном и моим анемометром (08492 на sparkfun) Я уже сделал код, но он не работал, у меня есть некоторые ошибки, которые я не могу понять, если кто-то может помочь мне отладить его, он будет очень круто: DDebug arduino code

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 
    } 

Наконец, у меня есть большая проблема, в datashett он говорит, что я могу преобразовать 1 импульс в 1.492MPH но ложно, это 2 импульса для 1.492MPH так я может использовать что-то другое, чем PulseIn, может быть, FreqMeasure или AttachInterrupt, может кто-то помочь мне PLS!

+1

Каких ошибок вы получаете? –

+0

Фактически это: 'long unsigned int mesure_frequence()' redeclared как другой вид символа –

+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; 
} 
+0

Хорошо спасибо, я понял, что вы имеете в виду, но я до сих пор не понимаю, что такое функция, что не так? почему он делает ту же ошибку? –

+0

@AnisBouAllegue Извините за просмотр. Обновлено. – MikeCAT

+0

@AnisBouAllegue Что не так написано в сообщении об ошибке. – MikeCAT