Stap 6: Wat is in de apparaatcode?
De apparaatcode is lang, maar de meeste van deze is gelijkaardig, code voor de specifieke weerseffecten opgenomen herhaald. Hier is de basisonderdelen:
De Neopixel basisklasse, opgenomen door "verplichten" de NeoPixels bibliotheek. Deze klasse wordt gemaakt een blob (een gegevensstructuur, iets als een matrix maar kunnen worden gelezen en geschreven als een bestandsstroom) die wordt gebruikt als een framebuffer. De framebuffer kan worden gewijzigd op elk moment en vervolgens uitgeschreven aan de weergave. Deze klasse heeft drie hoofdfuncties:
- clearFrame: Schakel de framebuffer (verzamelingen de waarden voor alle drie kanalen van elke pixel terug naar nul)
- writePixel: schrijven van de waarde van één pixel in de framebuffer
- writeFrame: de huidige framebuffer verzenden in het display
De uitbreiding van de NeoWeather klasse. Deze klasse breidt de klasse base, met behulp van zijn functies als ware ze eigen, maar ook het toevoegen van sommige nieuwe degenen. De klasse NeoWeather bevat nieuwe methoden voor elke afzonderlijke animatie. Enkele van deze methoden Neem een parameter - factor. Dit aantal is een geheel getal van 0 tot en met 9 dat de "intensiteit" van de animatie regelt. In de regen en sneeuw effecten, de factor verhoogt het aantal "druppels" die verschijnt op het display. Neem een kijkje op de regen-methode als u willen zou een beetje dieper ingaan op deze klasse of toevoegen van nieuwe animaties van uw eigen.
De NeoWeather klasse instantiëren, de buffer wissen en het schrijven van pixel 0 naar full-rood ziet er als volgt:
const NUMPIXELS = 24; // configure the SPI peripheral and use it to instantiate the class spi <- hardware.spi257; display <- NeoWeather(spi, NUMPIXELS); spi.configure(MSB_FIRST, 7500); // clear the frame buffer and write [255,0,0] (full red) to pixel 0 display.clearFrame(); display.writePixel(0,[255,0,0]); display.writeFrame();
Tenslotte is er een agent-handler met een grote grote stapel van voorwaardelijke instructies. Wanneer de agent een "seteffect"-bericht naar het apparaat stuurt, wordt het hier afgeleverd. Deze functie wordt gecontroleerd voor zoekwoorden in de weersverwachting in volgorde van prioriteit. Als een overeenkomst wordt gevonden, wordt het juiste effect ingesteld:
if (cond.find("Ice") != null) {<br> display.ice(); }
In sommige gevallen komt de prognose met een modifier (bijvoorbeeld "Heavy Rain"). Het apparaat ziet er voor dat ook, en gebruikt het om de intensiteit van het juiste effect:
if (cond.find("Rain") != null) {<br> if (cond.find("Light") != null) { display.rain(3); } else if (cond.find("Heavy") != null) { display.rain(5); } else { display.rain(4); } }
Tot slot, neem een blik bij de agent-code.