Elektroda.pl
Elektroda.pl
X
Elektroda.pl
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Arduino, błąd przy wczytywaniu bibliotek.

24 Lut 2017 21:12 789 7
  • Poziom 8  
    Witam, robię projekt stacji pogodowej. Po kompilacji programu wyskoczyły takie błędy:
    Code:
    UWAGA: Błędny folder .github w bibliotece 'DHT sensor library'
    
    C:\Users\Marcin\Documents\Arduino\libraries\Arduino-HMC5883L-master\HMC5883L.cpp:220:11: warning: extra tokens at end of #endif directive [enabled by default]

         #endif;

               ^

    C:\Users\Marcin\Documents\Arduino\libraries\Arduino-HMC5883L-master\HMC5883L.cpp:245:11: warning: extra tokens at end of #endif directive [enabled by default]

         #endif;

               ^

    C:\Users\Marcin\Documents\Arduino\libraries\Arduino-HMC5883L-master\HMC5883L.cpp:272:11: warning: extra tokens at end of #endif directive [enabled by default]

         #endif;

               ^

    Co może być przyczyną tych błędów?
  • Poziom 8  
    Jestem początkującym użytkownikiem Arduino i nadal nie wiem o co chodzi z tymi błędami.
  • Poziom 15  
    Kod: c
    Zaloguj się, aby zobaczyć kod

    Zapewne zatrzymuje się na tej pętli .
  • Poziom 8  
    Co zrobić aby aby ta pętla działała?

    Dodano po 7 [minuty]:

    Kod z zaznaczonymi liniami z błędami:
    Code:
    #include <Wire.h>
    
    #include <i2c.h>
    #include <i2c_BMP280.h>
    #include <WS2812B.h>
    #include <BH1750.h>
    #include <DHT.h>
    #include <LiquidCrystal.h>
    #include <TimerOne.h>
    #include <HMC5883L.h>



    // do czujnika zanieczyszczeń powietrza
    #define MIN_VOLTAGE     600 // mv - próg dolnego zakresu napięcia dla braku pyłu
    #define VREF           5000 // mv - napięcie referencyjne komparatora
    #define PIN_LED           9 // numer pinu ILED
    #define PIN_ANALOG        0 // numer pinu AOUT
    #define MAX_ITERS        10 // liczba pomiarow do sredniej
     
    int ADC_VALUE; // odczytana wartosc A0
    int ITER; // numer pomiaru
    float VOLTAGE; // wartosc napiecia
    float DUST; // wynik
    float AVG_DUST; // sredni wynik

    //int kierwiatr;
    int rotation;

    // wyswietlacz lcd.
      LiquidCrystal lcd(3, 4, 5, 6, 7, 8); // piny wyświetlacza LCD



    // do obliczania RPM wiatru
      unsigned int counter = 0;

      void docount()  // counts from the speed sensor
    {
      counter++;  // increase +1 the counter value
    }

      void timerIsr()
    {
      Timer1.detachInterrupt();  //stop the timer
      Serial.print(" Wind Speed: ");
      int rotation = (counter / 10);  // 20 liczba otworow w enkoderze
      Serial.println(rotation,DEC);  // wyswietlanie obrotow
      Serial.println(" meters per seconds");
      counter = 0; //  reset counter to zero
      Timer1.attachInterrupt( timerIsr );  //enable the timer
    }


    //czujnik wilgotnosci dht11 lub 22
      #define DHTPIN 10 //dht pin
      #define DHTTYPE DHT11   // DHT 11
      DHT dht(DHTPIN, DHTTYPE); //dht


    // czujniki opadow i wilg. ziemi
      int opady = 0;
      int wilgotnoscgleby = 0;


    // czujnik swiatla bh1750
      BH1750  lightMeter;


    //czuj. cisnienia atmosferycznego
      BMP280 bmp280;


    // czujnik magnetyczny jako kompas
      HMC5883L compass;


     

    void setup(void)
    {

     
      analogReference(INTERNAL);
     
      Serial.begin(9600);
     
      pinMode(PIN_LED, OUTPUT);
      digitalWrite(PIN_LED, LOW);

    // ustawienia wyswietlacza
      lcd.begin(16, 2);
      lcd.clear();


    // rozpoczecie pomiaru czujnika dht
      dht.begin();


    // czujnik swiatla
      lightMeter.begin();


    // czujnik ciscienia wyswietlanie na wyswietlaczu
      lcd.print("Probe BMP280: ");
      if (bmp280.initialize()) lcd.print("Sensor found");
      else
    {
      lcd.print("Sensor missing");
      while (1) {}
    }
      bmp280.setEnabled(0);
      bmp280.triggerMeasurement();

     
    // czujnik magnetyczny kierunku wiatru
      // Inicjalizacja HMC5883L
      Serial.println("Initialize HMC5883L");
      while (!compass.begin())
      {
        Serial.println("Could not find a valid HMC5883L sensor, check wiring!");
      }
      // Set measurement range
      compass.setRange(HMC5883L_RANGE_1_3GA);
      // Set measurement mode
      compass.setMeasurementMode(HMC5883L_CONTINOUS);
      // Set data rate
      compass.setDataRate(HMC5883L_DATARATE_30HZ);
      // Set number of samples averaged
      compass.setSamples(HMC5883L_SAMPLES_8);
      // Set calibration offset. See HMC5883L_calibration.ino
      compass.setOffset(0, 0);
     
    }



     
    float computeDust()
    {
      // Blyskamy IR, czekamy 280ms, odczytujemy napiecie ADC
      digitalWrite(PIN_LED, HIGH);
      delayMicroseconds(280);
      ADC_VALUE = analogRead(PIN_ANALOG);
      digitalWrite(PIN_LED, LOW);
     
      // Przeliczamy na mV.
      VOLTAGE = (VREF / 1024.0) * ADC_VALUE;
     
      // Obliczamy zanieczyszczenie jesli zmierzone napiecie ponad prog
     
      if (VOLTAGE > MIN_VOLTAGE)
      {
        return (VOLTAGE - MIN_VOLTAGE) * 0.2;
      }
     
      return 0;
    }



     
    void loop(void)
    {
     
       AVG_DUST = 0;
       ITER = 0;
     
       while (ITER < MAX_ITERS)
       {
         DUST = computeDust();
         // Do sredniej liczmy tylko prawidlowe pomiary
         if (DUST > 0)
         {
           AVG_DUST += DUST;
           ITER++;
           //delay(50);
         }     
       }
       
       AVG_DUST /= MAX_ITERS;
       
       Serial.print("D = ");
       Serial.print(AVG_DUST);
       Serial.println(" ug/m3");   
     
       //delay(500);


    // enkoder oblicza predkosc wiatru
      Timer1.initialize(1000000); // set timer for 1sec
      attachInterrupt(0, docount, RISING);  // 0 to pin w atmedze, następnie polecenie jaki ma wykonac gdy na tym pinie pojawi sie zbocze rosnace
      Timer1.attachInterrupt( timerIsr ); // enable the timer


    // czujnik dht pomiaru wilgotnosci
      float h = dht.readHumidity(); //wilgotność powietrza


    // czujnik opadow pin analogowy A2 i mapowanie zakresów
      opady = analogRead(A2); //opady
      opady = map(opady, 1023, 900, 0, 100);


    // czuj. wilg. gleby do A1 i mapowanie zakresu
      wilgotnoscgleby = analogRead(A1); // wilg gleby
      wilgotnoscgleby = map(wilgotnoscgleby, 1023, 900, 0, 100);


    // czujnik swiatla wys na lcd
      uint16_t lux = lightMeter.readLightLevel();


    // czujnik cisnienia i temp bmp280
      bmp280.awaitMeasurement();

      float temperature; // odczytanie temp
      bmp280.getTemperature(temperature);

      //lcd.setCursor(0, 1); // wyswietlanie temp na lcd
      //lcd.print(temperature);                                                            LINIA 220 BŁĄD

      float pascal; // cisnienie w pascalach
      bmp280.getPressure(pascal);

      //lcd.setCursor(6, 1);
      //lcd.print(pascal);

      static float meters, metersold; // oblicznie wysokosci i wzglednej wys
      bmp280.getAltitude(meters);
      metersold = (metersold * 10 + meters) / 11;

      bmp280.triggerMeasurement(); // koniec pomiarow


    // czujnik magnetyczny pomiar pola magnetycznego
      Vector norm = compass.readNormalize();

      // Calculate heading
      float heading = atan2(norm.YAxis, norm.XAxis);

      // Set declination angle on your location and fix heading
      // You can find your declination on: http://magnetic-declination.com/
      // (+) Positive or (-) for negative
      // For Bytom / Poland declination angle is 4'26E (positive)
     // Formula: (deg + (min / 60.0)) / (180 / M_PI);                             LINIA245 BŁĄD
      float declinationAngle = (4.0 + (26.0 / 60.0)) / (180 / M_PI);
      heading += declinationAngle;

      // Correct for heading < 0deg and heading > 360deg
      if (heading < 0)
      {
        heading += 2 * PI;
      }

      if (heading > 2 * PI)
      {
        heading -= 2 * PI;
      }

      // Convert to degrees
      float headingDegrees = heading * 180 / M_PI;

      if (headingDegrees > 340) // && (headingDegrees < 20))
      {
        lcd.setCursor(0, 1);
        lcd.print("N");
      }

      if (headingDegrees < 20) // && (headingDegrees < 20))
      {
        lcd.setCursor(0, 1);
        lcd.print("N");                                                                         LINIA 272 BŁĄD
      }

      if ((headingDegrees > 19) && (headingDegrees < 79))
      {
        lcd.setCursor(0, 1);
        lcd.print("NE");
      }

      if ((headingDegrees > 80) && (headingDegrees < 125))
      {
        lcd.setCursor(0, 1);
        lcd.print("E");
      }

      if ((headingDegrees > 125) && (headingDegrees < 159))
      {
        lcd.setCursor(0, 1);
        lcd.print("SE");
      }

      if ((headingDegrees > 160) && (headingDegrees < 200))
      {
        lcd.setCursor(0, 1);
        lcd.print("S");
      }

      if ((headingDegrees > 199) && (headingDegrees < 249))
      {
        lcd.setCursor(0, 1);
        lcd.print("SW");
      }

      if ((headingDegrees > 250) && (headingDegrees < 290))
      {
        //kierwiatr = "W";
        lcd.setCursor(0, 1);
        lcd.print("W");
      }

      if ((headingDegrees > 289) && (headingDegrees < 339))
      {
        //kierwiatr = "NW";
        lcd.setCursor(0, 1);
        lcd.print("NW");
      }


     // czesc kodu wysylajaca informacje do modulu bluetooth, telefonu
      Serial.print("*T" + String(temperature) + "*");
      Serial.print("*P" + String(pascal) + "*");
      Serial.print("*L" + String(lux) + "*");
      Serial.print("*D" + String(AVG_DUST) + "*");
      Serial.print("*O" + String(opady) + "*");
      Serial.print("*W" + String(h) + "*");
      Serial.print("*G" + String(wilgotnoscgleby) + "*");
      Serial.print("*R" + String(rotation) + "*");
      //Serial.print("*W" + String(kierwiatr) + "*");
      Serial.print("*S" + String(headingDegrees) + "*");

    }
  • Specjalista - Mikrokontrolery
    armin089 napisał:
    Co zrobić aby aby ta pętla działała?

    Nauczyć się podstaw programowania w ogóle, podstaw programowania w C++, zrozumieć program i stosowne go zmodyfikować.
    Np. to, co napisałeś w 40 linijkach po komentarzu // Convert to degrees, możesz napisać w trzech liniach kodu. Kiedy każdy taki fragment skrócisz 10-krotnie, program będzie łatwiejszy do ogarnięcia.