NeoWeather: Ambient Weather indikator (6 / 7 steg)
Steg 6: Vad finns i styrkod?
Styrkod som är lång, men det mesta är liknande, upprepade koden för den specifika vädereffekter ingår. Här är de grundläggande delarna:
Neopixel basklassen, ingår som "kräver" i NeoPixels bibliotek. Denna klass skapar en blob (en datastruktur, ungefär som en matris utan som kan läsa och skriftlig som en filström) som används som en rambuffert. Rambuffert kan ändras när som helst och sedan skrivs till displayen. Denna klass har tre huvudfunktioner:
- clearFrame: rensa ram bufferten (uppsättningar värden för alla tre kanaler för varje pixel tillbaka till noll)
- writePixel: skriva värdet av en pixel i rambuffert
- writeFrame: skicka den aktuella rambuffert till displayen
Klassen NeoWeather förlängning. Den här klassen utökar klassen bas, med dess funktioner som om de vore sina egna, men också att lägga till några nya. Klassen NeoWeather innehåller nya metoder för varje distinkta animering. Några av dessa metoder ta en parameter - faktor. Detta nummer är ett heltal mellan 0 och 9 som styr "intensiteten" av animeringen. I regn och snö effekter, ökar faktorn ökar antalet "droppar" som visas på displayen. Ta en titt på regn metoden om du vill gräva lite djupare i denna klass eller lägga till nya animationer av dina egna.
Skapa instanser av klassen NeoWeather, rensa bufferten och skriva pixel 0 till full-röd ser ut så här:
CONST NUMPIXELS = 24.
Konfigurera SPI perifera och använda den för att instansiera klassen
SPI <-hardware.spi257;
Visa <-NeoWeather (spi, NUMPIXELS);
SPI.configure (MSB_FIRST, 7500);
Rensa rambuffert och skriv [255,0,0] (full röd) till pixel 0
display.clearFrame();
display.writePixel(0,[255,0,0]);
display.writeFrame();
Slutligen finns det en agent hanterare med en stor stor stack av villkorliga satser. När skickar agenten en "seteffect" meddelande till enheten, kommer det här. Funktionen söker efter nyckelord i väderprognosen i prioritetsordning. Om den hittar en matchning, ställer lämpliga effekten:
om (cond.find("Ice")! = null) {< br > display.ice();
}
I vissa fall kommer prognosen med en modifierare (e.g. "Heavy Rain"). Enheten ser för det, också, och används för att ange intensiteten på den lämpliga effekten:
om (cond.find("Rain")! = null) {< br > om (cond.find("Light")! = null) {
display.Rain(3);
} else om (cond.find("Heavy")! = null) {
display.Rain(5);
} annat {
display.Rain(4);
}
}
Slutligen, låt oss ta en titt på agent koden.