Stap 10: De arduino-code voor uw apparatuur – oude code wijzigen
Deze stap zal omgaan met de oude code:
Scrollen naar beneden ongeveer halverwege, er is een sectie geleid
"/ / / De volgende sectie is voor het op en uitschakelen van afzonderlijke apparaten / / /"
Dit is het gedeelte dat zal moeten worden aangepakt met eerste.
Er volgt 12 coderegels zeer gelijkaardig kijken voor de verschillende toestellen/lichten.
De eerste regel van elke if -instructie 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 doelt opgeven op. 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 twee berichten dat kunnen worden verzonden zijn (steken met de P04 voorbeeld het P04H of P04L kan zijn afhankelijk van de staat waaraan knevel is veranderd) moeten er enkele logica voor het verwerken van de twee afzonderlijk. Als ze beide met P04 beginnen is het zinvol om een tweede genesteld als -instructie.
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 gebruikmaakt van een knop in plaats van een knevel die je van de genesteld als -instructie als ontdoen kunt zal 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.
setOnOff (3, 1, true);
Dit roept een methode genaamd "setOnOff". De code voor dit kan worden gezien op de bodem van de schets. Het zorgt voor het draaien van de apparaten aan en uit, en voor feedback via de seriële poort. De indeling van de code is:
setOnOff (int group, int stekker, boolean op)
Dus, als ik de stekker die werd setup wilde als groep 3, channel 4 inschakelen ik zou schrijven:
setOnOff (3, 4, true)
Als ik wilde de dezelfde stekker uitschakelen zou ik schrijven:
setOnOff (3, 4, false);
Het wijzigen van de eenvoudige in-/ uitschakelen van afzonderlijke apparaten moet u invullen van de juiste berichten worden gelezen (bijvoorbeeld de P04 in het vorige voorbeeld) en vul de juiste schakelaar worden beïnvloed en of u het wilt in- of uitschakelen (bijvoorbeeld de switchOnOff (3, 4, waar) in het vorige voorbeeld).
Aan het einde van elke beurt aan/uit voor elk afzonderlijk apparaat is er een andere lijn van code:
multiOff = 1
Deze regel betekent dat, wanneer de knop is ingedrukt, het stopt een runtimefout die inhoudt dat vertraagd op / exemplaren. Het doel ervan is om te stoppen met iets van willekeurig wordt ingeschakeld of uitschakelen wanneer u klaar met de activiteit eerder dan de gelopen bent tijd verwachtte. Als u niet wilt dat een bepaalde knop om te annuleren huidige lopen tijden dan uitgecommentarieerd of verwijderen van dit stukje van de code.
De volgende fase behandelt knoppen 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). Voor deze hebben u simpelweg meer dan een "switchOnOff" termijn (zie voorbeelden van dit al in de code).
De volgende, iets meer betrokken, sectie is de sectie "run-time". Instellen van timing automations, is een paar meer veranderingen nodig.
Het eerste ding om te doen is te verklaren twee variabelen voordat void(setup): een int die zal fungeren als een Boolean-waarde en een unsigned long die de huidige tijd wordt opgeslagen.
Wanneer een runtime-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. De runtime-moet worden opgegeven voordat de sectie waarin u wat er gebeurt zeggen wanneer elke knop is ingedrukt. Begin met een if -instructie controleert om te zien 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 het opzetten van als verklaringen met betrekking tot tijd query's kunt u instellen van 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 twee minuten vervolgens de syntaxis is:
Als (teethStart + 120 == now.unixtime()) {}
Dit is eigenlijk het controleren als de huidige tijd is het hetzelfde als de tijd die de knop werd ingedrukt plus 120 seconden.
Aan het einde van een run-time-instructie moet de 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 runtime-actief kan zijn 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 resultaat groter dan 1 is, meer dan één runtime-gelijktijdig actief is. Als dit het geval dan de tijden waartegen de run-times startten worden vergeleken en de run-time met het grootste aantal (degene die begon afgelopen) actief is gehouden. U zult moeten toevoegen extra run-keer aan dit gedeelte maar kijken naar de code die er al het moet vrij spreekt voor zich.