Stap 4: Het foton Program
In deze stap zal er beschreven hoe het programma werkt.
Eerst zal de meetwaarden worden gegenereerd met de FSR. Een voorwaarde bestaat zodanig dat wanneer de schakelaar is ingedrukt dat bepaalde meting waarde de nulmeting zullen. Deze waarde zal worden afgetrokken van de rest van de waarden die zijn gegenereerd. De waterstand zal worden berekend met een polynomiale functie die het waterpeil als functie van de meetwaarden heel goed beschrijft. Wanneer het waterniveau een bepaald niveau boven wordt een voorwaarde geïmpliceerd om te laten de LED knipperen door het instellen van het dialoogvenster pin High and Low met een bepaalde vertraging. Aangezien de polynomiale functie niet de functie goed op alle waarden wordt beschreven, is de voorwaarde dat de waarde van de meting lager zijn dan een bepaalde waarde moet ook impliciet.
Hieronder vindt u de code die wordt gebruikt om te bepalen van de waterstand, worden opmerkingen toegevoegd voor de duidelijkheid.
Code:
Definiëren welke pinnen zullen worden gebruikt als welk type van pin
intmeasurementPin = A0;
intlampPin = D0;
intknopPin = D5;
De beginwaarden instellen op nul
intanalogValue = 0;
zweven measurementValue = 0,0;
zweven measurementValue2 = 0,0;
float offset = 0,0;
zweven waterpeil = 0,0;
Timer parameters definiëren
Timer measurementTimer(10000,pubMeas);
Timer serialTimer(500,serialMeas);
VOID Setup {}
Start de timers
measurementTimer.start();
serialTimer.start();
Opgeven welke pinnen als wat
pinMode (measurementPin, INPUT);
pinMode (lampPin, OUTPUT);
pinMode (knopPin, INPUT_PULLUP);
Start de seriële communicatie
Serial.begin(9600);
}
Start van de lus, hier de waarden voortdurend zal worden gegenereerd
void loop {}
Lees de measurmentvalue van de analogpin (A0)
measurementValue = analogRead(measurementPin);
measurementvalue2 is de waarde van de meet na het definiëren van de zeromeasurement(offset)
measurementValue2 = measurementValue - gecompenseerd;
"definiëren waterniveau weer als nul (niet nodig???)"
waterpeil = 0,0;
((float) measurementPin)
Wanneer KnopPin wordt gedrukt ofset is de huidige measurementvalue, dit is de zeromeasurement
Als (digitalRead(knopPin)==LOW) {}
offset = measurementValue;
}
Als measurementvalue hoger dan 1000 is is de buis niet geïnstalleerd, zodat deze waterpassen zal niet zinvol
if(measurementValue<1000.0) {}
Als de zeromeasurement niet is voldaan het waterpeil zullen nog steeds 0cm.
Als (offset > 0,01) {}
Alleen gebruik maken van de formule voor het berekenen van waterpeil wanneer en de buis is insalled en de zeromeasurement
(meting die behoren tot de installatie van de buis) is voldaan
waterpeil = 0.0003 * measurementValue2 * measurementValue2-0.0017 * measurementValue2 +2.745;
}
"definiëren waterniveau weer als nul (niet nodig???)"
else {}
waterpeil = 0,0;
}
}
delay(1);
Wanneer het waterniveau > 75,0 de LED knippert, als u wijzigen de voorwaarden wilt voor het knipperen van het licht kan je dat in de regel eronder.
if(waterlevel>75.0) {}
En wanneer measurementValue < 1000.0, anders zal de LED knipperen voordat de zeromeasurement verschuldigde te gebruiken
van een polynomiale functie geen die het waterpeil op een goede manier boven bepaalde measurementValues definiëren
if(measurementValue<1000.0) {}
Laat het LED knipperen
digitalWrite (lampPin, hoge); Hiermee stelt u de LED op
delay(200); wacht op 200mS
digitalWrite (lampPin, laag); de LED vertrekt
delay(200); wacht op 200mS
Sluit alle van de lussen
}
}
}
Het resultaat op th publiceren
ongeldig pubMeas() {}
Particle.publish("HennoMeting",String(waterlevel,3),private);
}
ongeldig serialMeas() {}
Afdrukken van de measurementValue voor bevestiging en het waterniveau, omdat dit is wat u wilt meten
Serial.println(String(measurementValue,3));
Serial.println(String(waterlevel,3));
}
Knippert
Nadat u het foton met uw computer verbonden, moet u deze code op het flash. Als u niet hoe dit werkt weet, kunt u de volgende instructies: