Hallo,
Ik probeer een Nextion display aan de gang te krijgen met temperatuur, pH en geleidbaarheidswaarden van een aquarium, en dat lukt vrij redelijk.
De temperatuur geeft ie prima weer.
Dus ik dacht op dezelfde manier de pH te doen, maar dat pikt ie niet.
void get_temp() {
sensors.requestTemperatures();
float t = sensors.getTempCByIndex(0);
// Check if any reads failed and exit early (to try again).
if (isnan(t)) {
return;
}
// Update temperature in Celsius
static char temperatureCTemp[6];
dtostrf(t, 6, 1, temperatureCTemp);
tTempC.setText(temperatureCTemp);
}
Dit is het stukje wat ik voor de temperatuur (een digitale DS18B20 sensor) gebruik. En dat wordt prima weergegeven.
In de laatste 3 regels wordt de float in een char-array gezet, waarna hij met setText naar het display gestuurd wordt.
Op eenzelfde manier dacht ik de pH te doen.
void get_pH()
{
float sensorValue;
// int m;
// long sensorSum;
int buf[10]; //buffer for read analog
for (int i = 0; i < 10; i++) //Get 10 sample value from the sensor for smooth the value
{
buf[i] = analogRead(A0); //Connect the PH Sensor to A0 port
delay(10);
}
for (int i = 0; i < 9; i++) //sort the analog from small to large
{
for (int j = i + 1; j < 10; j++)
{
if (buf[i] > buf[j])
{
int temp = buf[i];
buf[i] = buf[j];
buf[j] = temp;
}
}
}
avgValue = 0;
for (int i = 2; i < 8; i++) //take the average value of 6 center sample
avgValue += buf[i];
sensorValue = avgValue / 6;
float pHfloat = (5.70 - 1000 * (sensorValue - 365) * Vref / 59.16 / 1023, 1);
// Serial.print("pH = ");
// Serial.println(pHfloat);
static char pH[4];
dtostrf(pHfloat, 4, 1, pH);
tpH.setText(pH);
delay(2000);
}
Waarin in de laatste 4 regels die float pHfloat naar een char-array wordt omgezet.
In de berekening van de pHfloat staat als laatste argument achter 1023 (,1) het aantal decimalen.
Op het display komt in dit geval 1.0 te staan.
Verander ik dat aantal decimalen in 2 komt er op het display 2.0 te staan. En bij 3, 3.0 enzovoorts.
Maar dus niet de pH, die ik zoek. En die in een extern programma, zonder die dtostrf-functie, wel goed wordt weergegeven.
- Kan iemand mij duidelijk maken hoe zo'n float - string conversie precies werkt? Er wordt immers een functie gebruikt waarin ik ook iets van string zie staan. De relatie tussen die float, string, char is mij niet goed duidelijk. En de engelstalige info helpt mij niet genoeg om het echt door te hebben
- Gaat er in die pH berekening iets fout, waardoor alleen die 1.0, 2.0 etc. worden getoond?
- Heeft dit misschien ook nog te maken met het feit dat de temperatuur een digitaal signaal is en de pH meter een analoog signaal? LIjkt me niet, want bij beiden komt er een float getal uit?
Bij voorbaat dank alvast voor het meedenken.
Groet,
Johan