Probleme mit Programmierung eines TDS-Sensor

Hallo,

ich versuche derzeit einen TDS-Sensor in mein Projekt zu integrieren.

Beim Aufrufen des Code wird dieser 1x vollständig durchlaufen und ein plausibles Ergebnis wird ausgegeben.

beim 2x Aufrufen der Funktion im Loop geht der Arduino zwar in die while-Schleife, durchläuft aber anschließend nicht die if-Schleife (if (millis() - analogSampleTimepoint > 40U) ). Entsprechend kommt auch kein Ergebnis zu Stande.

Ich habe das mit dem Serial-Monitor überprüft.

Ich finde den Fehler nicht? Könnt ihr mir helfen :slight_smile: ?

void tds() {
   static unsigned long tds_wartezeit = millis();
  while (millis()-tds_wartezeit <= 1000U) {
   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) * 5 / 1024.0; // read the analog value more stable by the median filtering algorithm, and convert to voltage value
      float compensationCoefficient = 1.0 + 0.02 * ((sensors.getTempCByIndex(0), 1) - 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");
      delay(1000);
    }
  }
}
    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;
    }

Nicht jeder weiß, was du mit TDS-Sensor meinst. Also poste einen Link deines Sensors.
Und mit einem Codefragment ist meist nicht viel anzustellen. Somit immer den kompletten Sketch posten. Evtl. gibt es Abhängigkeiten, die wir nicht sehen können.

1 Like

http://www.cqrobot.wiki/index.php/TDS_(Total_Dissolved_Solids)_Meter_Sensor_SKU:_CQRSENTDS01

Es handelt sich um diesen Sensor.

Ich bin gerade unterwegs. Den Code muss ich nachreichen.

Danke für die Hinweise :slightly_smiling_face:

Wird nicht zurück gesetzt, zumindest nicht in dem Code-Schnipsel. So gewollt?

Besser wäre ein kompilierfähiger Code.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.