Vattennivån mätning tube (4 / 5 steg)
Steg 4: Programmera fotonen
I det här steget blir det beskrivs hur programmet fungerar.
Mätvärdena kommer först att genereras med FSR. En villkora är gjord så att när strömbrytaren trycks att särskild mätning värdet noll mätning. Detta värde kommer att dras från resten av de värden som skapas. Vattennivån kommer att beräknas med ett polynom funktion som beskriver vattennivån som funktion av mätvärdena ganska bra. När vattennivån överstiger en viss nivå antyds ett tillstånd för att låta den LED blinkar genom att ställa in dialogrutan pin hög och låg med en viss försening. Eftersom den polynom funktionen inte beskriver funktionen väl på alla värden, antyds också villkoret att mätning värdet bör vara lägre än ett visst värde.
Koden används för att bestämma vattennivån är nedanstående läggs kommentarer för tydlighetens skull.
Kod:
Definiera vilket stift ska användas som vilken typ av pin
intmeasurementPin = A0;
intlampPin = D0;
intknopPin = D5;
Ange startvärdena vid noll
intanalogValue = 0;
flyta measurementValue = 0,0;
flyta measurementValue2 = 0,0;
float offset = 0,0;
flyta waterlevel = 0,0;
Definiera parametrar för timer
Timer measurementTimer(10000,pubMeas);
Timer serialTimer(500,serialMeas);
void setup() {
Starta timers
measurementTimer.start();
serialTimer.start();
Definiera vilket stift kommer att vara vad
pinMode (measurementPin, ingång);
pinMode (lampPin, produktionen);
pinMode (knopPin, INPUT_PULLUP);
Starta den seriell kommunikationen
Serial.BEGIN(9600);
}
Starta loopen, här värden genereras kontinuerligt
void loop() {
Läs measurmentvalue från analogpin (A0)
measurementValue = analogRead(measurementPin);
measurementvalue2 är värdet av mätning när du har definierat zeromeasurement(offset)
measurementValue2 = measurementValue - offset;
"definiera vattennivån igen som noll (inte behövs???)"
waterlevel = 0,0;
((float) measurementPin)
När KnopPin trycks ofset är den nuvarande measurementvalue, detta är zeromeasurement
om (digitalRead(knopPin)==LOW) {
offset = measurementValue;
}
Om measurementvalue är högre än 1000 installeras röret inte så att dessa waterlevels inte är meningsfullt
IF(measurementValue<1000.0) {
Om zeromeasurement inte är uppfyllda waterlevel fortfarande kommer att vara 0cm.
om (offset > 0,01) {
Endast använda sig av formeln för att beräkna waterlevel när och röret är insalled och zeromeasurement
(mätning som hör till installationen av röret) är uppfyllt
waterlevel = 0.0003 * measurementValue2 * measurementValue2-0.0017 * measurementValue2 +2.745;
}
"definiera vattennivån igen som noll (inte behövs???)"
annat {
waterlevel = 0,0;
}
}
Delay(1);
När waterlevel > 75,0 LED blinkar, om du vill ändra villkoren för blinkande ljus kan du göra det i raden nedan.
IF(waterlevel>75.0) {
Och när measurementValue < 1000.0, annars lampan blinkar innan zeromeasurement på grund av för att använda
av ett polynom funktion som inte kan definiera waterlevel på ett bra sätt över vissa measurementValues
IF(measurementValue<1000.0) {
Låt den LED blinkar
digitalWrite (lampPin, hög); anger LED på
Delay(200); väntar på 200mS
digitalWrite (lampPin, låg); framhäver LED
Delay(200); väntar på 200mS
Stäng alla öglorna
}
}
}
Publicera resultatet på th
void pubMeas() {
Particle.publish("HennoMeting",String(waterlevel,3),Private);
}
void serialMeas() {
Skriva ut measurementValue för bekräftelse och waterlevel eftersom detta är vad du vill mäta
Serial.println(String(measurementValue,3));
Serial.println(String(waterlevel,3));
}
Blinkande
När du anslutit fotonen med din dator, behöver du flash här koden på den. Om du inte vet hur detta fungerar, enligt instruktionerna nästa: