Sparkcore Xmas tree star (4 / 5 steg)
Steg 4: fjärrkontroll
Enligt definitionen:
#define UNIFIEDFUNCTION "theFunction"
och sedan i setup():
Spark.function (UNIFIEDFUNCTION, setColorInModeFunction);
Denna funktion kallas från Internet via den NSURLRequest då grenar i severall delar enligt funktionsläget och räkna värdena. Denna del kanske kan få mer sofistikerade, en kontrollsumma kunde introduceras och så vidare.
int setColorInModeFunction (String args)
{unsigned char allValuesMaxCount = 25;
64 tecken -24 avgränsare = 40 digis;
40/25 siffror = 1,6 siffror per värde
dubbel allValues [allValuesMaxCount];
unsigned int count = parseArgsIntoDoubles (args, allValues);
IF(count > allValuesMaxCount)
{/ / Hur man handskas med en unik situation?
Serial.println ("Houston, vi har ett problem!");
}
dubbla läge = allValues [0];
IF(THEFEATURE_FUNCTION == mode) / / set Total ljusstyrka och rotation
{/ / 1 == rpm, 2 = ljusstyrka
Double rotationExponent = allValues [1].
rotationDirectionIsClock = (0 < rotationExponent);
flyta buttonRpmExp = (float)fabs(rotationExponent);
rpm = (unsigned int) round(pow(2,buttonRpmExp)); / / det enda fallet får vi fraktionerad exponenter, e.g. slät förändringar
buttonRpmIndex = (osignerade char)round(buttonRpmExp); / / att få knappar som index rätt
ljusstyrka = (float)constrain(allValues[2],0.0,1.0);
int exp;
dubbel bråkdel = frexp (256,0 * ljusstyrka & exp);
brightnessIndex = (osignerade char)constrain(exp,0,7);
}
annars om (SINGLECOL_FUNCTION == läge & & 3 == count) / / ange en indexerad färg
{
unsigned int aColorIndex = begränsa ((osignerade long)(floor(allValues[1])),0,11);
theColorValues [aColorIndex] = begränsa ((osignerade long)(floor(allValues[2])),0,0xFFFFFF);
}
annat / / några fler eller alla färger kommer att fastställas
{
unsigned char startIndex = 0;
unsigned char offset = 0;
unsigned char colorsCount = 12;
12: det blir 12 värden för alla lampor, det finns inget läge, värde är positivt
om (0 < = läge & & 12 == count) / / vi fick alla värden, inga explicita läge
{
ingenting
}
annat if(INDEXEDCOL_FUNCTION == mode)
{/ / ställa in alla värden för loopen
startIndex = begränsa ((osignerade long)(floor(allValues[1])),0,11);
colorsCount = begränsa ((osignerade long)(floor(allValues[2])),1,12);
offset = 3;
}
om (13 > startIndex + colorsCount) / / mer än 12
för (unsigned int jag = 0; jag < colorsCount; i ++)
{/ / Ange indexerad färg från offset till slut
unsigned char readIndex = offset + i. för läsbarhet, börja på offset;
theColorValues [jag + startIndex] = begränsa ((osignerade long)(floor(allValues[readIndex])),0,0xFFFFFF);
};
}
returnera count;
}
Bilderna visar vissa särskilda fall. Alla LED i rött förkortar samtalet, eftersom den röda färgen i hex 0x0000FF, decimal endast 256. Detta är bara på samtal. Nästa två bilderna visar både en massa lysdioder i svart, vilket ger en sträng av '0'.
Den sista visar gränssnittet till ange en färg med en colorwheel och en ljusstyrka skjutreglaget. Från detta gränssnitt kan färgen anges som enda färg.