Med ett grönt tak som en REGNMÄTARE (3 / 4 steg)
Steg 3: Programmering dina foton
Det sista steget i vår gröna tak regnmätaren är att programmera fotonen. Exempel här är gjord för särskilda anslutningar på vissa portar av fotonen, så se till att du sätter dina egna variabler där
#define DEBUG_SERIAL sanna
definiera ditt ämne, titel och namn
const String ämne = "din/äger/ämne";
Sensorer är ansluten till dessa stift, se till att ha samma eller byta namn på dem till din egen ingång
CONST int analogPin0 = A0;
CONST int analogPin1 = A1;
CONST int analogPin2 = A2;
antal sekunder mellan uppladdningar till Spark molnet. Detta kan aldrig vara lägre än 60 //because IFTTT inte tillåter för mer än 1 per minut.
CONST int intervalOnline = 60.
antalet sekunder mellan uppladdningar över USB följetong
CONST int intervalSerial = 10;
antalet millisekunder mellan mätningarna. Detta kan vara så låg som behövs, men högre värden //results i en mer stabil beteende för att ADC.
CONST int intervalMeasurement = 10000;
int measuredValue0 = 0;
int measuredValue1 = 0;
int measuredValue2 = 0;
int mean_pressure = 0;
int pres_old = 0;
int diff = 0;
int total_time = 0;
flyta total_rain = 0;
flyta added_eachother = 0,0;
String pressureString = "";
void setup() {
Starta seriell kommunikation
om (DEBUG_SERIAL) Serial.begin(9600);
Ställ in inPin på ingång
pinMode (analogPin0, ingång);
pinMode (analogPin1, ingång);
pinMode (analogPin2, ingång);
Particle.Variable ("pressa", pressureString);
Particle.Variable ("tid", total_time);
Delay(1000);
}
void loop() {
få tidsstämpel
int t=millis();
varje intervalMeasurement millisekunder, göra en mätning
om (t%(intervalMeasurement) < 1) {
measuredValue0 = analogRead(analogPin0);
measuredValue1 = analogRead(analogPin1);
measuredValue2 = analogRead(analogPin2);
mean_pressure = ((float) (measuredValue0 + measuredValue1 + measuredValue2)) / 3.0;
diff = mean_pressure - pres_old;
total_rain = ((diff/0.117778)/(17.0*17.0)) * 10,0;
added_eachother += totale_regen;
pres_old = mean_pressure;
pressureString = String(added_eachother,4);
total_time += 10. Delay(1);
}
varje intervalSerial sekunder, skicka mätning via seriell USB
om (DEBUG_SERIAL) {
om (t%(intervalSerial*1000) < 5) {
Serial.println(pressureString);
Serial.println(mean_pressure);
Serial.println(totale_regen);
Serial.println(totale_tijd);
Delay(3);
} }
varje intervalOnline sekunder, publicera mätning till Spark moln
om (t%(intervalOnline*1000) < 10) {
String measurementText = sträng (diff, DEC);
Particle.publish (ämne, pressureString, 60, allmänheten);
Delay(3); }