Stap 5: codering
We zijn alle meest klaar! Nu moeten we de arduino pro mini program.
Als u niet hoe een FTDI USB adapter check deze link gebruiken weet.
De broncode is hier.
Ik zal proberen om het kort uitleggen wat de code doet. De RTC-module gebruiken weet het systeem de tijd.
De softwareserial bibliotheek om te werken met de HT-05 bluetooth-module is ingesteld, luistert naar de opdrachten drenken en stelt de drenken tijd en duur. De commando's zijn in het formaat: "drenken uur: drenken minuten: seconden nummer drenken".
In de hoofdlus de bluetooth seriële wordt gecontroleerd en als dat zo is de commando's worden gelezen en vervolgens zijn ingesteld. Ik ben ook het controleren van een routine genaamd isWateringTime, als het resultaat waar dat het water wordt gestart voor het opgegeven aantal seconden.
Voor foutopsporing de huidige tijd, drenken tijd enz worden afgedrukt over Serial en bluetooth.
De vereiste libraries zijn "Draad", "RTClib", "SoftwareSerial". Eerst zijn twee libs vereist voor de RTC-module en een derde voor de bluetooth-module. De code is vrij ongecompliceerd.
Eerste keer de runs van de sketch, als de RTC is niet geprogrammeerd maar u de regel uncomment moet "rtc.adjust (DateTime (__DATE__, __TIME__));" en uploaden. Dit zal de tijd instellen naar de RTC-module hetzelfde als op uw computer. Na dat de lijn te commentariëren en upload het opnieuw.
BT apparaat... 5A:50
#include "RTClib.h" #include #include
Const int waterPumpPin = 5;
dit aanpassen om te maken de DC pomp uitvoeren met minder of meer macht const int waterPumpPower = 255; int lastMinute = 0;
char buffer[] = {' ',' ',' ',' ', ' ', ' ', ' ', ' '}; int opdrachten [] = {17,56,10}; //run_hour:run_minute:watering_seconds
RTC_DS1307 de rtc; SoftwareSerial bluetooth (10, 11); RX, TX
void setup () {Serial.begin(9600); bluetooth.begin(9600); Wire.begin(); RTC.begin(); pinMode (waterPumpPower, OUTPUT); analogWrite (waterPumpPin, 0); uncomment de volgende regel als u wilt instellen van de tijd voor de eerste keer //rtc.adjust (DateTime (__DATE__, __TIME__)); DateTime nu = rtc.now(); lastMinute = now.minute(); }
ongeldig lus () {als (bluetooth.available()) {voor (int i = 0; ik < 3; i ++) {tekenreekswaarde = bluetooth.readStringUntil(':'); int numericVal = value.toInt(); opdrachten [i] = numericVal;} printCurrentTime(); Serial.Print ("instellen voor:"); Serial.Print(Commands[0]); Serial.Print(":"); Serial.println(Commands[1]); Serial.Print("duration:"); Serial.Print(Commands[2]); Serial.println ("s"); Bluetooth.Print ("Set for:");bluetooth.print(commands[0]);bluetooth.print(":");bluetooth.println(commands[1]); Bluetooth.Print ("duur:"); bluetooth.print (opdrachten [2]); bluetooth.println ("s");} Als (isWateringTime()) {Serial.println("watering.."); bluetooth.println("watering.."); startWatering(commands[2]); delay(60000);} delay(300); }
VOID startWatering (int duur) {analogWrite (waterPumpPin, waterPumpPower); delay(duration * 1000); analogWrite (waterPumpPin, 0);}
Booleaanse isWateringTime() {DateTime nu = rtc.now(); als (now.minute()! = lastMinute) {printCurrentTime(); lastMinute = now.minute();} return now.hour() == opdrachten [0] & & now.minute() == opdrachten [1];}
VOID printCurrentTime() {DateTime nu = rtc.now(); Serial.Print ("huidige tijd:"); Serial.Print(Now.Hour(), DEC); Serial.Print(':'); Serial.Print(Now.Minute(), DEC); Serial.println(); Bluetooth.Print ("huidige tijd:"); bluetooth.print(now.hour(), DEC);bluetooth.print(':');bluetooth.print(now.minute(), DEC);bluetooth.println();}