Hem Automation (eller Robot Butler kallas Geoffrey) - iPhone kontrollerade, arduino baserat (10 / 12 steg)
Steg 10: Ändra arduino koden för din utrustning – gammal kod
Detta steg kommer att behandla den gamla koden:
Rulla ner ungefär halvvägs, det finns en del på väg
"/ / / Följande avsnitt är för slå på och av enskilda enheter / / /"
Detta är den del som kommer att behöva ta itu med först.
Nedan följer 12 kodrader mycket liknande söker för olika apparater/ljus.
Den första raden i varje om uttryck följer samma struktur:
annars om (packBuff [0] = 'P' & & packBuff [1] == 'x' & & packBuff [2] == "x")
Detta är den del där du anger vilka väljare från telefonen du hänvisar till. Till exempel, om du vill ange vad som bör göras när du trycker på en knapp som är inställd för att skicka meddelandet P04 du vill ändra ovanstående kod att:
annars om (packBuff [0] = 'P' & & packBuff [1] == '0' & & packBuff [2] == "4")
Eftersom alla växlar har två meddelanden som kan skickas (stickande med P04 exemplet kan man antingen P04H eller P04L beroende på vilken växla har ändrats) måste det finnas någon logik att bearbeta två separat. Som de båda börjar med P04 är det klokt att ha en andra inbäddat om uttalande.
om (packBuff [3] == "H") {
Detta säger koden vad du gör om den är påslagen. Två utdragsraderna lägre:
annat {
Anger koden vad att göra om den sista bokstaven inte är H (dvs. L) vilket innebär att du kan ange vad du vill göra när den är avstängd.
Om du använder en knapp snarare än en växla du kan bli av inbäddat om uttalande som brukar det vara en ytterligare H eller L i meddelandet.
Lina av koden precis under om "(packBuff [3] =="H") {" är åtgärden som ska vidtas när den är på.
setOnOff (3, 1, true);
Detta kräver en metod med namnet "setOnOff". Koden för detta kan ses längst ner på skissen. Det hand tar om roterande enheter på off och för feedback genom den seriella porten. Koden är:
setOnOff (int grupp, int plug, boolean på)
Så, om jag ville ha den kontakten som tillsattes som grupp 3, channel 4 att slå på jag skulle skriva:
setOnOff (3, 4, sant)
Om jag ville stänga samma kontakt skulle jag skriva:
setOnOff (3, 4, falsk);
Att ändra enkelt/på enskilda enheter måste du fylla i korrekta meddelanden att läsa (e.g. P04 i föregående exempel) och fylla i korrekta växeln att påverkas och om du vill ha det på eller av (e.g. switchOnOff (3, 4, sant) i föregående exempel).
I slutet av varje tur på/av för varje enskild enhet finns det en annan kodrad:
multiOff = 1
Denna linje innebär att, när knappen trycks, det kommer att stoppa någon körning som innebär försenade på / off. Dess syfte är att stoppa allt från att vara slumpmässigt vände på eller bort när du har avslutat aktiviteten förr än flykt tid väntade. Om du inte vill att en särskild knapp för att avbryta nuvarande körtider sedan antingen kommentera ut eller ta bort denna bit av koden.
Nästa steg handlar om knappar att mer än en koppla uttaget (t.ex. underhållning slå på eller stänga av TV: N, Xbox och ljudsystem eller alla ljus på/av) när tryckt, kommer att påverka. För dessa har du helt enkelt mer än en "switchOnOff" benämner (se exempel på detta redan i koden).
Avsnittet nästa, något mer delaktiga, är avsnittet "körning". Ställa in timing automatiseringar kräver några fler ändringar.
Det första du kan göra är att förklara två variabler innan void(setup): en int som ska fungera som ett booleskt värde och en osignerad länge som lagrar den aktuella tiden.
När en körning knapp trycks kommer du att ställa in eller inaktivera något som du vill ha gjort från början. Du kommer att behöva ange den osignerade långa till aktuell tid (i sekunder sedan 1 januari 1970) och sedan int 1 (t.ex. teethStart = now.unixtime(); och teethActive = 1;).
När int == 1 springa-tid börjar. Körningen måste anges innan avsnittet där du anger vad som händer när du trycker på varje knapp. Börja med en om sats som kontrollerar om int == 1. Om så är fallet, sedan starta körningen (t.ex. om (teethActive == 1) {).
Nästa avsnitt kommer att vara först med timing element. Genom att ställa in om uttalanden som innefattar tiden frågor du kan ställa in saker att sätta på och stänga på ett visst antal sekunder efter knappen trycktes ursprungligen.
Till exempel, om du vill ha något att slå på/av efter två minuter sedan syntaxen är:
om (teethStart + 120 == now.unixtime()) {
Detta är i grunden att kontrollera om den aktuella tiden är den samma som den tid knappen trycktes plus 120 sekunder.
I slutet av en körning uttalande bör aktiveringen int sättas till 0 så att körningen kontrolleras inte längre genom (att göra hela systemet mer effektivt).
Den aktiva int variabeln (t.ex. teethActive) måste läggas till multiOff uttalande.
Det finns ett annat avsnitt, som ser till att inte mer än en körning kan vara aktiv åt gången. Det håller den senaste en för att köra.
I det här avsnittet alla aktiveringen ints summeras och om resultatet är större än 1, mer än en körning är aktiva samtidigt. Om så är fallet de gånger som de kör-tiderna startades jämförs och körning med det största antalet (en som började förra) hålls aktiva. Du behöver lägga till några ytterligare run-gånger i detta avsnitt men titta på den kod som inte redan finns det bör vara ganska självförklarande.