Digispark RGB LED Fader (3 / 7 steg)
Steg 3: Funktionen sinus våg
Grundläggande sinusvåg funktionen genererar nummer från -1 till 1. Hur ändrar vi den grundläggande funktionen för användning som en PWM nummer generator?
generellt:
y = en * synd (b * x + c) + d
Där
b förändringar perioden (hur länge vågen är)
c medför en fasförskjutning längs x-axeln
d höjer eller sänker våg längs y-axeln sinusvåg producerar tal mellan -1 och + 1. Detta orsakar ett problem eftersom PWM värden inte kan vara negativt. Den första förändringen vi måste göra är att lägga 1 genom att ersätta 1 för d i formeln. y = en * synd (b * x + c) + 1 kommer att ge oss värden mellan 0 och 2.
Nästa vi behövde öka amplituden för att producera vår PWM maxvärdet 255. Som det står värdet max 2. Därför 255/2 = 127,5. PWM måste vara ett heltal så vi lösa på 127 som ger oss ett max på 254. Nu ser formeln ut så här:
y=127*(sin(b*x+c)+1) Observera extra parenteserna.
Vi har tre lysdioder som vi vill arbeta tillsammans för att ge subtila förskjutningar i tillsatsen färgvärdena. Vi måste därför använda en fasförskjutning för varje färg. Detta där det blir svårt för oss. Datorer använder radianer inte grader. Fasförskjutning hade därför uttrycks i radianer. Det visar sig omvandlingen är enkel. 90 ° = 90/180 * PI radianer eller 1/2 * PI radianer. En 270° fasförskjutning skulle kräva 3/2 * PI radianer. Om vi inte ändrar perioden som har vi nu tre funktioner, en för varje färg av våra LED red=127*(sin(x)+1)
Green=127*(sin(x+1/2*PI)+1)
Blue=127*(sin(x+3/2*PI)+1)