Stap 2: Arduino code
Initialisatie
Alleen de WDT (WatchDogTimer) en de RFM bibliotheken inbegrepen zijn. De WDT wordt gebruikt in het geval de Arduino hang ergens en met de WDT op beginstand vanzelf zetten zou. Echter met deze box, de Arduino verloor nooit zelf tot nu.
De code is gekoppeld en moet vrij rechttoe-rechtaan. Er wordt verondersteld dat u weet dat spul ten minste tot halverwege het lezen.
De Arduino code uitzien vertrouwd zoals het is gekopieerd uit verschillende bronnen, bewerkt en samen te stellen.
Snap het niet al te kieskeurig op de NodeID; Houd het 2 cijfers aangezien u waarschijnlijk niet meer dan 90 knooppunten in uw huis hoeft. Het aantal cijfers niet wijzigen, of u zult moeten veranderen vrijwel overal later.
Definieer de frequentieband zoals gegeven door de module die u hebt gekocht. De ChannelFreq moet mogelijk worden aangepast aan de normen waar u woont; het nummer is in Hertz.
// RFM69#define NODEID 21 //unique for each node on same network Floor&Room&Node#=X&XX&X#define NETWORKID 666 //the same on all nodes that talk to each other#define GATEWAYID 1#define FREQUENCY RF69_433MHZ#define ENCRYPTKEY "1234567890ABCDEF" //exactly the same 16 characters/bytes on all nodes!#define ChannelFreq 434520000
De berichtenstructuur heeft hetzelfde in het hele netwerk
typedef struct { // Radio packet formatint nodeID; // node identifierint devID; // device identifierint cmd; // read or write long intVal; // integer payloadfloat fltVal; // floating payloadchar payLoad[32]; // string payload} Message;
De knoppen werden niet rechtstreeks is gekoppeld aan de 3.3V, maar aan de Arduino gegevens pinnen zodat zij kunnen worden ontstoken en als gewenst.
Er zijn ook veel variabelen voor het opslaan van tijdstempels, status en eerdere-status van knoppen.
Setup
Uiteraard zijn de pin-modi "out" voor macht en 'in' voor de knop-drukt. Het knipperen van de knoppen te tonen dat de installatiefase voltooid, dan zij overgaan tot hun normale toestand.
Loop
De Arduino controleert eerst als het een opdracht van de OH-server ontvangen. De opdracht wordt geparseerd buiten de lus-code.
Dan de status van de knoppen worden gelezen als de status is gewijzigd sinds de vorige iteratie. Opmerking dat niets tot nu toe is verzonden.
Afhankelijk van de status van de knoppen, de estafette wordt geopend of gesloten om over te schakelen van de koffiemachine in- of uitschakelen.
Daarna de knop kleuren wijzigen naar gelang van hun staat. Maakte het meer gevoel voor mij om er op die manier in plaats van direct tijdens de knop-lezen-status te wijzigen.
In de buurt van het einde van de lus van de status van de estafette wordt teruggestuurd naar de OH-server, evenals de status van de blauwe knop. Rode en groene status worden niet verzonden terug als ze zijn gecontroleerd door de status van de estafette
De signaalsterkte (RSSI) worden teruggestuurd naar de OH-server om te weten van de sterkte van het signaal voor beide manieren: van en naar de RFM-gateway.
Merk op dat er een buffertijd "StateChangeInterv" in de code. Dit is geschreven voor de grappige jongens die bij u thuis om te zien komen na hoeveel keer aan/uit schakelen van de zekering zal blazen, of de koffiemachine omhoog gaan in rook... De variabele (hier ingesteld op 2,5 sec) voorkomt dat een wijziging van de status voor 2,5 seconden. De machine kan daarom schakelen alleen na die variabele tijd; en mensen zal verliezen interesse zeer snel...
De BlueBlink wordt geïnitieerd alleen door de OH-server 30 minuten voordat de machine wordt verondersteld om uit te schakelen. Door de blauwe knipperende knop in te drukken, het verandert in een muf blauw en de switch off tijd wordt verondersteld om naar de volgende 00 of 30 minuten over het hele uur. Natuurlijk 30 minuten vóór het uitschakelen van de knipperen zal terugkeren.