Skocz do zawartości

DFRobot Gravity - analogowy czujnik TDS, czystości wody dla Arduino


Albert1972

Pomocna odpowiedź

Sprawa taka . w sklepie Botland zamówiłem sobie dwa takie moduły.

https://botland.com.pl/pl/seria-gravity/10830-dfrobot-gravity-analogowy-czujnik-tds-czystosci-wody-dla-arduino.html

Jeśli chodzi o sklep to wszystko w najlepszym porządku. Jest jednak maleńki problem. Podają tam link do strony producenta a tenże producent podaje kod który się nie kompiluje.

Lekko mnie to skonsternowało dlatego zwracam się o pomoc w znalezieniu odpowiedzi na pytanie - co jest z tym kodem nie tak.

Tu link do kodu:

https://wiki.dfrobot.com/Gravity__Analog_TDS_Sensor___Meter_For_Arduino_SKU__SEN0244

/***************************************************
 DFRobot Gravity: Analog TDS Sensor / Meter For Arduino
 <https://www.dfrobot.com/wiki/index.php/Gravity:_Analog_TDS_Sensor_/_Meter_For_Arduino_SKU:_SEN0244>

 Created 2017-8-22
 By Jason <jason.ling@dfrobot.com@dfrobot.com>

 GNU Lesser General Public License.
 See <http://www.gnu.org/licenses/> for details.
 All above must be included in any redistribution

 /***********Notice and Trouble shooting***************
 1. This code is tested on Arduino Uno and Leonardo with Arduino IDE 1.0.5 r2 and 1.8.2.
 2. More details, please click this link: <https://www.dfrobot.com/wiki/index.php/Gravity:_Analog_TDS_Sensor_/_Meter_For_Arduino_SKU:_SEN0244>
 ****************************************************/

#define TdsSensorPin A1
#define VREF 5.0      // analog reference voltage(Volt) of the ADC
#define SCOUNT  30           // sum of sample point
int analogBuffer[SCOUNT];    // store the analog value in the array, read from ADC
int analogBufferTemp[SCOUNT];
int analogBufferIndex = 0,copyIndex = 0;
float averageVoltage = 0,tdsValue = 0,temperature = 25;

void setup()
{
    Serial.begin(115200);
    pinMode(TdsSensorPin,INPUT);
}

void loop()
{
   static unsigned long analogSampleTimepoint = millis();
   if(millis()-analogSampleTimepoint > 40U)     //every 40 milliseconds,read the analog value from the ADC
   {
     analogSampleTimepoint = millis();
     analogBuffer[analogBufferIndex] = analogRead(TdsSensorPin);    //read the analog value and store into the buffer
     analogBufferIndex++;
     if(analogBufferIndex == SCOUNT)
         analogBufferIndex = 0;
   }
   static unsigned long printTimepoint = millis();
   if(millis()-printTimepoint > 800U)
   {
      printTimepoint = millis();
      for(copyIndex=0;copyIndex<SCOUNT;copyIndex++)
        analogBufferTemp[copyIndex]= analogBuffer[copyIndex];
      averageVoltage = getMedianNum(analogBufferTemp,SCOUNT) * (float)VREF / 1024.0; // read the analog value more stable by the median filtering algorithm, and convert to voltage value
      float compensationCoefficient=1.0+0.02*(temperature-25.0);    //temperature compensation formula: fFinalResult(25^C) = fFinalResult(current)/(1.0+0.02*(fTP-25.0));
      float compensationVolatge=averageVoltage/compensationCoefficient;  //temperature compensation
      tdsValue=(133.42*compensationVolatge*compensationVolatge*compensationVolatge - 255.86*compensationVolatge*compensationVolatge + 857.39*compensationVolatge)*0.5; //convert voltage value to tds value
      //Serial.print("voltage:");
      //Serial.print(averageVoltage,2);
      //Serial.print("V   ");
      Serial.print("TDS Value:");
      Serial.print(tdsValue,0);
      Serial.println("ppm");
   }
}
int getMedianNum(int bArray[], int iFilterLen)
{
      int bTab[iFilterLen];
      for (byte i = 0; i<iFilterLen; i++)
      bTab[i] = bArray[i];
      int i, j, bTemp;
      for (j = 0; j < iFilterLen - 1; j++)
      {
      for (i = 0; i < iFilterLen - j - 1; i++)
          {
        if (bTab[i] > bTab[i++ 1])
            {
        bTemp = bTab[i];
            bTab[i] = bTab[i++ 1];
        bTab[i+1] = bTemp;
         }
      }
      }
      if ((iFilterLen & 1) > 0)
    bTemp = bTab[(iFilterLen - 1) / 2];
      else
    bTemp = (bTab[iFilterLen / 2] + bTab[iFilterLen / 2 - 1]) / 2;
      return bTemp;
}

 

to ten pierwszy.

 

Cytat


C:\Users\marek\OneDrive\Dokumenty\Arduino\TDS\TDS.ino: In function 'int getMedianNum(int*, int)':

TDS:70:32: error: expected ']' before numeric constant

         if (bTab > bTab[i++ 1])

                                ^

TDS:70:32: error: expected ')' before numeric constant

TDS:70:33: error: expected primary-expression before ']' token

         if (bTab > bTab[i++ 1])

                                 ^

TDS:72:24: error: expected '}' at end of input

         bTemp = bTab;

                        ^

TDS:72:24: error: expected '}' at end of input

TDS:72:24: error: expected '}' at end of input

exit status 1
expected ']' before numeric constant

 

Link do komentarza
Share on other sites

Coś z publikacją tego kodu mogło pójść nie tak, trudno się spodziewać, by adres mailowy wyglądał tak: "By Jason <jason.ling@dfrobot.com@dfrobot.com>".

Tam jest do ściągnięcia biblioteka, w niej nie ma takich kwiatków, choć czy działa to trudno powiedzieć. Po prostu trzeba usiąść do tego pliku i pobawić się w Kopciuszka, sprawdzając jaki to ma sens co tu jest pokazane.

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Powinno być i+1 (przecież to zwykły bubblesort do policzenia mediany i nie ma co się bawić w groch i popiół).

Co do różnych publikowanych programów - te kody przechodzą przez fafnaście różnych chytrych rączek oraz jeszcze chytrzejszych programów formatujących tekst i czasem nie zawsze wychodzi to, programista miał na myśli.

A poza tym zdarzało mi się znaleźć potężne babole np. w programach publikowanych przez Googla jako oficjalne biblioteki do ichniejszego API (szczytowym ich osiągnięciem by kod, który się wykładał jeśli chciałeś zrobić upload filmu na youtuba powyżej 1 MB).

  • Lubię! 2
Link do komentarza
Share on other sites

Mnie się wydaje, że kiedyś tam było i+1 i ktoś zaczął przerabiać na poprawne ideologicznie i++ i mu się odechciało w trakcie sprawdzić jaki był globalny efekt podmiany jednego ciągu znaków na inny. No i tam był mak w popiele, groch to inna bajka...

Link do komentarza
Share on other sites

18 godzin temu, kaczakat napisał:

No i tam był mak w popiele, groch to inna bajka...

Nie znasz się na bajkach 😛

Cytat

...muszę wciąż jak kocmołuch
wybierać groch z popiołu.
Smutny jest los Kopciuszka!

Jan Brzechwa, Kopciuszek

Edytowano przez ethanak
Link do komentarza
Share on other sites

No to z Brzechwy niezły ignorant - plagiator,  bo to była bajka braci Grimm z makiem i popiołem. Z grochem byłoby 5 minut roboty - sito, płukanie i impreza, czyli tak jak teraz CTR+F i zamień. Ale rymu by nie było.  

Link do komentarza
Share on other sites

Jakich braci Grimm... dwa wieki Ci uciekły. To oni byli znanymi plagiatorami m. in. Charlesa Perraulta (XVII wiek). Bajka w różnych wersjach znana jest od baaardzo dawna, zarówno Perrault, jak i Brzechwa czy bracia Grimm stworzyli jedynie adaptacje literackie i trudno tu mówić o jakimkolwiek "oryginale".

BTW. z makiem i popiołem też by szybko poszło - trochę chemii i po robocie 🙂

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.