Stap 11: De arduino-code voor uw apparatuur – nieuwe code wijzigen
Aan de onderkant van de code vindt u afzonderlijke methoden voor elke switch of licht (bv. keuken, bed, enz.). Wanneer u een nieuw item toevoegt of als u gewoon wilt wijzigen die zijn er al dat dit is het gedeelte dat u zult moeten eerst bewerken. De structuur van een individu aan/uit-methode is:
VOID switchName (boolean op, boolean multioff) {}
De twee Booleans zijn of de schakelaar is ingeschakeld (true) of uit (false) en de tweede is of het een getimede run-keer (om ervoor te zorgen dat dingen niet willekeurig uitschakelen als u klaar bent met een runtimefout vereisen voordat het verwacht dat u worden afgewerkt) moet uitschakelen.
De als verklaring binnen de methode wordt bepaald of de schakelaar is ingeschakeld of uitgeschakeld met behulp van een regel met code waarop op dit lijkt:
setOnOff (x, x, op);
Dit roept een methode genaamd "setOnOff". De code voor dit kan worden gezien naar de onderkant van de schets. Dit zorgt voor het in- en uit de apparaten en voor feedback via de seriële poort. De indeling van de code is:
setOnOff (int group, int stekker, boolean op)
De boolean "on" in elk apparaat methode zegt al of u het op of uit te schakelen wilt zodat u slechts hoeft te wijzigen van de groep en sluit waarden voor elk apparaat. Bijvoorbeeld zou als ik wilde om te schakelen op de stekker 4 in groep 3 dan ik schrijven:
setOnOff (3, 4, op);
Scrollen naar beneden ongeveer halverwege, er is een sectie geleid
"/ / / De volgende sectie is voor het op en uitschakelen van afzonderlijke apparaten / / /"
Dit is de volgende sectie waarin zal moeten worden behandeld.
Er volgt 12 coderegels zeer gelijkaardig kijken voor de verschillende toestellen/lichten.
De eerste regel van elke bit volgt dezelfde structuur:
anders als (packBuff [0] = 'P' & & packBuff [1] == 'x' & & packBuff [2] == 'x')
Dit is het gedeelte waarin u welke selector vanaf uw telefoon u bent scheidsrechter opgeven aan. Bijvoorbeeld, als je opgeven wat er moet gebeuren wilde wanneer u op een knop die is ingesteld voor het verzenden van het bericht P04 u zou de bovenstaande code wijzigen om:
anders als (packBuff [0] = 'P' & & packBuff [1] == "0" & & packBuff [2] == '4')
Omdat alle knevels zijn twee berichten dat kunnen worden verzonden (steken met het voorbeeld van de P04 het kunnen ofwel P04H of P04L afhankelijk van de toestand van de knevel is veranderd in) moet er enkele logica voor het verwerken van de twee afzonderlijk. Als ze beide met beginnen P04 bits zinvol is om een tweede genesteld als verklaring.
Als (packBuff [3] == "H") {}
Dit vertelt de code wat te doen als het is ingeschakeld. De twee afschriftregels lager:
else {}
Vertelt de code wat te doen als de laatste letter niet H (d.w.z. L) wat betekent dat u kunt opgeven wat u wilt doen als deze uitgeschakeld.
Als u een knop gebruikt in plaats van een knevel kunt u raken van de genesteld als functie als er niet een extra H of L in het bericht.
De coderegel net onder de als "(packBuff [3] =="H") {" is de actie moet worden uitgevoerd wanneer het is ingeschakeld. Bijvoorbeeld als u wilt dat de bureaulamp inschakelen u roept u de methode van het "Bureau" en vertellen het gewenste op en dat u wilt dat het uitschakelen van een run-keer dat op dit moment gaat:
Bureau (true, true);
In de instructie "else" wil je Schakel dezelfde schakeloptie en opnieuw voor het annuleren van een run-tijden die momenteel in actie:
Bureau (false, true);
Als u zou liever uitschakelen deze bepaalde knop niet elke run-keer dan de tweede variabele moet worden ingesteld op false (d.w.z. Bureau (true, false); en Bureau (false, false);)
De volgende fase is dat, wanneer ingedrukt, zal van invloed zijn op meer dan één steek contactdoos (bijvoorbeeld entertainment of uitschakelen van de TV, Xbox en geluidsinstallatie of alle lichten in-/ uitschakelen) knoppen. Voor deze eenvoudigweg hebt u meer dan één afzonderlijk apparaat methode aangeroepen (zie voorbeelden van dit al in de code).
De iets meer betrokken gedeelte is het gedeelte "run-time". Instellen van timing automations, is een paar meer veranderingen nodig.
Het eerste ding om te doen is te verklaren twee variabelen voor void(setup). Één int die als een Boolean-waarde fungeren zal en een unsigned long die de huidige tijd wordt opgeslagen.
Wanneer de knop wordt ingedrukt zal je wilt instellen of uitschakelen alles wat je wilt doen aan het begin. Vervolgens moet u de niet-ondertekende instellen lang naar de huidige tijd (in seconden sinds 1 januari 1970), en vervolgens de int op 1 (bijvoorbeeld teethStart = now.unixtime(); en teethActive = 1;).
Wanneer de int == 1 de run-time zal beginnen. Voor de sectie waarin u wat er gebeurt opgeven wanneer elke knop is ingedrukt de runtime-moet worden opgegeven. Start met een if-instructie die controleert of de int == 1. Zo ja, dan beginnen de run-time (bijvoorbeeld als (teethActive == 1) {}).
De volgende sectie zullen de eerste elementen van de timing. Door in te stellen als kunnen verklaringen waarbij keer dat u een query instellen dingen om te zetten in- en uitschakelen op een bepaald aantal seconden nadat de knop in eerste instantie werd ingedrukt.
Bijvoorbeeld, als je wilt dat iets om te schakelen aan/uit na drie minuten vervolgens de syntaxis is:
Als (teethStart + 120 == now.unixtime()) {}
Dit is eigenlijk het controleren als de huidige tijd is hetzelfde als de tijd die de knop werd ingedrukt 120 seconden toe te voegen.
Aan het einde van de instructie in een run-time moet activering int. worden ingesteld op 0, zodat de runtime gecontroleerd wordt niet langer via (waardoor het hele systeem efficiënter).
De actieve int variabele (bijvoorbeeld teethActive) moet worden toegevoegd aan de verklaring van de multiOff.
Er is een ander gedeelte, dat ervoor dat zorgt, niet meer dan één run-tijd niet stil kan worden op een bepaald moment. Het houdt de nieuwste die ingeschakeld worden uitgevoerd.
In deze sectie alle ints van de activering worden opgeteld en als het antwoord groter dan 1 is dan is meer dan één actieve op hetzelfde moment. Als dit het geval dan de tijden waartegen de run-tijden werden gestart worden vergeleken en de runtime met het grootste aantal actieve wordt gehouden. U zult moeten toevoegen extra draaien keer aan dit gedeelte maar kijken naar de code die er al het moet worden komen vrij zelf verklarend.