Bevattning logic controller/projekt log (6 / 12 steg)
Steg 6: Programmering fas
Nu när jag haft en checklista att gå från jag snabbt gå till arbetet skriver ett skript i min Arduino IDE (Integrated development environment). Jag kommer inte för att tråka ut er med allt som pågår i mitt manus, det också otaliga YouTube videos ute visar hur man skriver ett manus, men jag kommer att förklara vad som händer i skriptet.
Jag använder min Arduino Uno för att programmera min Atmel 328 Chip.
Min in-/ utgångar
Output = const int pivotoneerror = 7. Detta är en röd LED om pivot ett fel inträffar
Output = const int pivottwoerror = 8; Detta är en röd LED om pivot två fel inträffar
Output = const int runled = 9; Detta är en Amber LED tyder på att systemet är i ett kör
Output = const int StartOch = 10; Detta är en startknappen för att starta systemet
Input = const int engineRly = 11; Detta är utgången för relä, ansluten till murphy switch
Output = const int testlight = 13. Detta är ett meddelande test ljus, när Testknapp trycks på Fjärradion detta ljus kommer lite
De biblioteken
#include //Xbee bibliotek. Källa: http://code.google.com/p/xbee-arduino/
I skriptet SETUP starta jag Xbee Serial Port med:
XBee.BEGIN(9600);
Nu, för de viktigaste loop i min Arduino program ser det ut så här...
void loop() {
Läs statligt av start-knappen i en lokal variabel:
StartButtonRead = digitalRead(startbutton);
StartButtonState = StartButtonRead;
om trycker på start-knappen och knappen är inte samma som det var tidigare, ändra tillståndet för START
om (StartButtonState == hög & & StartButtonState! = StartButtonLastState) {
START =! BÖRJA;
}
se till att nästa gång genom öglan StartButtonLastState är lika med startknapp Status
StartButtonLastState = StartButtonRead;
om START är inställd på hög, vitalisera motor reläet och kör LED
om (starta == true) {
digitalWrite (engineRly, hög);
digitalWrite (runled, hög);
}
om START är inställd på låg, deenergize motor relä och kör LED
om (starta == false) {
digitalWrite (engineRly, låg);
digitalWrite (runled, låg);
}
försök att läsa ett paket från Xbee
xbee.readPacket();
om (xbee.getResponse().isAvailable()) {
fick något
om (xbee.getResponse().getApiId() == ZB_IO_SAMPLE_RESPONSE) {
xbee.getResponse().getZBRxIoSampleResponse(ioSample);
Kontrollera om xbee's checkar in genom att jämföra ioSample Xbee adress med Xbee adress jag har i programmering
om (ioSample.getRemoteAddress64().getLsb() == pivotoneaddressLSB) {
pivotonecheckin = millis(); Marks pivotera en xbee kontrollerat
}
annat if (ioSample.getRemoteAddress64().getLsb() == pivottwoaddressLSB) {
pivottwocheckin = millis(); Marks pivotera två xbee kontrollerat
}
om PIN-koden vi vill ha är låg
om (! ioSample.isDigitalOn(1)) {
Det finns ett fel stänga motorn
START = false;
kan se vilken radio det är från och skicka den till displayen.
om (ioSample.getRemoteAddress64().getLsb() == pivotoneaddressLSB) {
digitalWrite (pivotoneerror, hög); vänder på LED1 för fel
}
annat if (ioSample.getRemoteAddress64().getLsb() == pivottwoaddressLSB) {
digitalWrite (pivottwoerror, hög); vänder på LED2 för fel
}
}
om (! ioSample.isDigitalOn(2)) {
cykla kompletta, stänga av motorn
START = false;
}
IF(!ioSample.isDigitalOn(3)) {
sätt att testa nod genom att vrida på en LED
digitalWrite (testlight, hög);
}
annat {
digitalWrite(testlight,LOW);
}
}
}
kontrollerar om xbees har checkat in, i den senaste 1 min. om de inte har; stänga (xbees är
programmerat att checka in varje 20 SEK.) om Xbee inte har kontrollerat stänga i systemet och slå på
appropreat LED att Visa felet
om (millis() - pivotonecheckin > = 60000) {
START = false;
digitalWrite (pivotoneerror, hög); vänder på LED1 för fel
}
om (millis() - pivottwocheckin > = 60000) {
START = false;
digitalWrite (pivottwoerror, hög); vänder på LED2 för fel
}
} / / end av loop