Paso 4: Programar el fotón
En este paso se describe cómo funciona el programa.
Primero se generarán los valores de medición con el FSR. Una condición se hace que cuando el interruptor se presiona que valor particular será la medición cero. Este valor se restará del resto de los valores generados. El nivel de agua se calcula con una función polinómica que describe bastante bien el nivel del agua en función de los valores de medición. Cuando el nivel del agua supera un cierto nivel se implica una condición dejó el parpadeo del LED poniendo el pin de diálogo alta y baja con un cierto retraso. Puesto que la función polinómica no describe la función bien en todos los valores, la condición que el valor debe ser inferior a un cierto valor se implica también.
El código utilizado para determinar el nivel del agua se da a continuación, se agreguen comentarios para mayor claridad.
Código:
Definir qué pines se utilizará como qué tipo de aguja
intmeasurementPin = A0;
intlampPin = D0;
intknopPin = D5;
Establecer los valores iniciales en cero
intanalogValue = 0;
flotador de measurementValue = 0.0;
Float measurementValue2 = 0.0;
desplazamiento del flotador = 0.0;
flotador de nivel del agua = 0.0;
Definir parámetros de temporizador
Contador de tiempo measurementTimer(10000,pubMeas);
Contador de tiempo serialTimer(500,serialMeas);
void setup() {}
Inicio de los temporizadores
measurementTimer.start();
serialTimer.start();
Definir el que patillas será como lo que
pinMode (measurementPin, entrada);
pinMode (lampPin, salida);
pinMode (knopPin, INPUT_PULLUP);
Iniciar la comunicación serial
Serial.Begin(9600);
}
Iniciar el bucle, aquí los valores forma continua generará
void loop() {}
Leer el measurmentvalue de analogpin (A0)
measurementValue = analogRead(measurementPin);
measurementvalue2 es el valor de la medida después de definir la zeromeasurement(offset)
measurementValue2 = measurementValue - offset;
"definir nuevo nivel del agua como cero (no es necesario???)"
nivel del agua = 0.0;
((float) measurementPin)
Cuando se presiona KnopPin ofset measurementvalue actual, esto es el zeromeasurement
Si (digitalRead(knopPin)==LOW) {}
offset = measurementValue;
}
Si measurementvalue es superior a 1000 el tubo no está instalado para que estos waterlevels no hará sentido
if(measurementValue<1000.0) {}
Si el zeromeasurement no se ha cumplido el nivel del agua seguirá siendo 0cm.
Si {} (offset > 0.01)
Hacer uso solamente de la fórmula para calcular el nivel del agua cuando el tubo es intalar y el zeromeasurement
(perteneciente a la instalación del tubo de medición) se cumple
nivel del agua = 0.0003 * measurementValue2 * measurementValue2-0,0017 * measurementValue2 +2.745;
}
"definir nuevo nivel del agua como cero (no es necesario???)"
Else {}
nivel del agua = 0.0;
}
}
Delay(1);
Cuando el nivel del agua > 75.0 el LED parpadea, si desea cambiar los términos de parpadear la luz puede hacer eso en la línea de abajo.
if(waterlevel>75.0) {}
Y cuando measurementValue < 1000.0, de lo contrario se parpadeará el LED antes de la zeromeasurement debido a utilizar
de una función polinómica que no puede definir el nivel del agua en el buen sentido por encima de ciertos measurementValues
if(measurementValue<1000.0) {}
Deje que el parpadeo del LED
digitalWrite (lampPin, HIGH); el LED se pone en
Delay(200); espera a 200mS
digitalWrite (lampPin, bajo); fija el LED apagado
Delay(200); espera a 200mS
Cerrar todos los lazos
}
}
}
Publicar el resultado en th
void pubMeas() {}
Particle.Publish("HennoMeting",String(waterlevel,3),Private);
}
void serialMeas() {}
Imprimir measurementValue para la confirmación y el nivel del agua porque esto es lo que desea medir
Serial.println(String(measurementValue,3));
Serial.println(String(waterlevel,3));
}
Intermitente
Después de conectado el fotón con el ordenador, necesitará flash este código en ella. Si no sabes como funciona esto, siga las siguientes instrucciones: