Stap 2: Arduino Sketch
De Arduino schets gemaakt twee TimerAlarms. De eerste controleert de estafette op een tweede intervallen en wordt gebruikt voor Toggle Mode. Het tweede alarm roept de sync-functie op 30 tweede intervallen.Het parseren functie ziet er voor het einde van de reactie aangeeft, wordt een aJson-object gemaakt en dan krijgt de modus. Afhankelijk van de waarde van modus, drie dingen gebeurt. De eerste modus is Altijd op, zodat de relay is ingeschakeld. Als u gebruikt de knevel, worden het uitvoeren en niet-actieve keer gesynchroniseerd. Ten slotte gaat handleiding gepaard met de status die u wilt dat de pomp in.
#include < SPI.h >
#include < Ethernet.h > / / Ethernet Shield
#include < aJSON.h > / / ontleden van JSON. Credit: Interactieve zaak
#include < Wire.h >
#include "RTClib.h" / / ChronoDot. Credit: Adafruit Industries
#include < Time.h >
#include < TimeAlarms.h >
RTC - ChronoDot
RTC_DS1307 RTC;
DateTime toekomst;
niet-ondertekende lange knevel;
niet-ondertekende lange stroom;
Ethernet-Shield
byte mac [] = {0x90, 0xA2, 0xD0, 0x0D, 0xA0, 0x00};
byte myIP [] = {192, 168, 1, 15}; Uncomment hier en lijn 52 indien nodig.
byte gateway [] = {192, 168, 1, 1};
char [server] = "http://www. myapsystem. appspot.com "; Veranderen zodat deze overeenkomen met de id van de toepassing dat u setup in stap 3
EthernetClient de klant;
Maakt het gemakkelijk om app namen wijzigen
Webapp string = "http://www. myapsystem.appspot.com/ ";" Veranderen zodat deze overeenkomen met de id van de toepassing dat u setup in stap 3
Pinnen
int connectedON = 8;
int connectedOFF = 9;
int pumpRelay = 23;
PumpRelay waarden
Current_mode koord = "Manual"; De standaardmodus
PumpState koord = "off"; De standaardstatus
int pumpRunTime = 20; Lopen voor 20 seconden
int pumpIdleTime = 40; Gedurende 40 seconden stationair Sit
VOID Setup {}
Beurt relais eerst uitzetten
digitalWrite (pumpRelay, hoge);
SD-kaart uitschakelen als men in de sleuf
pinMode(4,OUTPUT);
digitalWrite(4,HIGH);
Start Serial
Serial.begin(9600);
delay(1000);
Start Ethernet
Ethernet.begin(Mac);
Ethernet.begin (mac, myIP);
Ethernet.begin (mac, myIP, gateway);
delay(1000);
Start RTC
Wire.begin();
RTC.begin();
if (!. RTC.isrunning()) {}
Serial.println ("RTC is NOT running");
}
DateTime nu = RTC.now();
DateTime gecompileerd = DateTime (__DATE__, __TIME__);
Als (now.unixtime() < compiled.unixtime()) {}
Serial.println ("RTC is ouder dan compilatietijd! Bijwerken");
RTC.adjust (DateTime (__DATE__, __TIME__));
}
Set pin modi
pinMode (connectedON, OUTPUT);
pinMode (connectedOFF, OUTPUT);
pinMode (pumpRelay, OUTPUT);
Ingestelde alarmen
Alarm.timerRepeat (30, sync);
Alarm.timerRepeat (1, checkRelay);
Sync();
Serial.println ('Setup voltooid');
}
void loop {}
Alarm.delay(1000);
}
ongeldig sync() {}
Serial.println("syncing");
GAE (webapp + "adacs/sync? Staat = "+ pumpState);
Serial.println();
}
ongeldig checkRelay() {}
DateTime nu = RTC.now();
huidige = now.unixtime();
Als (current_mode == "Wissel") {}
Als (huidige </uitschakelen) {}
} else {}
Bepalen welke staat om te schakelen naar
Als (pumpState == "vandoor") {}
De pomp was uitgeschakeld. Inschakelen en instellen van volgende knevel tijd gebaseerd op de bewerkingstijd
digitalWrite (pumpRelay, laag);
Serial.println ("draaien pomp op");
pumpState = "on";
Set/uitschakelen zodra
toekomstige = now.unixtime() + pumpRunTime;
Toggle = now.unixtime() + pumpRunTime;
} else if (pumpState == "on") {}
De pomp was op. Uitschakelen en volgende knevel tijd op basis van tijdsduur instellen
digitalWrite (pumpRelay, hoge);
Serial.println ("uitschakelen pomp");
pumpState = "off";
Set/uitschakelen zodra
toekomstige = now.unixtime() + pumpIdleTime;
Toggle = now.unixtime() + pumpIdleTime;
}
displayTime();
}
}
}
ongeldig displayTime() {}
DateTime nu = RTC.now();
huidige = now.unixtime();
Huidige tijd weergeven
Serial.Print ("huidige tijd:");
Serial.Print(Now.Year(), DEC);
Serial.Print('/');
Serial.Print(Now.month(), DEC);
Serial.Print('/');
Serial.Print(Now.Day(), DEC);
Serial.Print(' ');
Serial.Print(Now.Hour(), DEC);
Serial.Print(':');
Serial.Print(Now.Minute(), DEC);
Serial.Print(':');
Serial.Print(Now.Second(), DEC);
Serial.println();
Weergeven/uitschakelen zodra
Serial.Print ("tijd van de toekomst:");
Serial.Print(Future.Year(), DEC);
Serial.Print('/');
Serial.Print(Future.month(), DEC);
Serial.Print('/');
Serial.Print(Future.Day(), DEC);
Serial.Print(' ');
Serial.Print(Future.Hour(), DEC);
Serial.Print(':');
Serial.Print(Future.Minute(), DEC);
Serial.Print(':');
Serial.Print(Future.Second(), DEC);
Serial.println();
}
VOID GAE(String link) {}
succes van Boole = httpRequest(link);
Als (succes == true) {}
delay(5000);
Boole currentLineIsBlank = waar;
ReadString koord = "";
char newString [100];
terwijl (client.connected()) {}
Als (client.available()) {}
char c = client.read();
Serial.write(c); Dev-modus
Als (c == '\n' & & currentLineIsBlank) {}
while(client.Connected()) {}
char f = client.read();
readString += f;
}
}
Als (c == '\n') {}
currentLineIsBlank = true;
} else if (c! = '\r') {}
currentLineIsBlank = false;
}
}
}
client.stop();
readString.toCharArray (newString, 100);
Het volledige JSON-object
aJsonObject * jsonObject = aJson.parse(newString);
Krijg de wijze
aJsonObject-modus = aJson.getObjectItem (jsonObject, 'Modus');
current_mode = mode -> valuestring; Modus converteren naar tekenreeks en toewijzen aan current_mode
Serial.println ("modus:" + current_mode);
Modus voorwaardelijke
Als (current_mode == "Always On") {}
De pomp inschakelen
digitalWrite (pumpRelay, laag);
Status bijwerken
pumpState = "on";
} else if (current_mode == "Wissel") {}
Sync de bewerkingstijd
aJsonObject * rt = aJson.getObjectItem (jsonObject, "RunTime");
String rString rt = -> valuestring;
pumpRunTime = rString.toInt();
De idle time sync
aJsonObject * het = aJson.getObjectItem (jsonObject, "IdleTime");
IString koord = it -> valuestring;
pumpIdleTime = iString.toInt();
Optionele uitvoer
Serial.Print ("runtime:");
Serial.Print(pumpRunTime);
Serial.println();
//
Serial.Print ("Idle Time:");
Serial.Print(pumpIdleTime);
Serial.println();
} else if (current_mode == "Manual") {}
Synchroniseren van de staat
aJsonObject * st = aJson.getObjectItem (jsonObject, "Status");
pumpState = st -> valuestring;
Als (pumpState == "on") {}
digitalWrite (pumpRelay, laag);
} else if (pumpState == "vandoor") {}
digitalWrite (pumpRelay, hoge);
} else {}
Serial.println ("onbekende pomp staat gegeven in de handmatige modus.");
}
} else {}
Serial.println ("Uknown modus gedetecteerd tijdens de synchronisatie.");
}
} else {}
Serial.println ("niet aangesloten");
}
Verwijderen van het hoofdobject
aJson.deleteItem(jsonObject);
}
Booleaanse httpRequest (de verwijzing van de tekenreeks) {}
Als er een succesvolle verbinding
Als (client.connect (server, 80)) {}
client.println ("GET" + link + "HTTP/1.0");
client.println();
Aangesloten LED inschakelen
digitalWrite (connectedOFF, laag);
digitalWrite (connectedON, hoge);
return true;
} else {}
U kon het niet maken van de verbinding
Serial.println ("verbinding mislukt");
fouten += 1;
client.stop();
Aangesloten LED inschakelen
digitalWrite (connectedON, laag);
digitalWrite (connectedOFF, hoge);
return false;
}
}