Interaktiva led lampa | Tensegrity struktur + arduino (4 / 5 steg)
Steg 4: Koden
Systemet fungerar är ganska enkel. En accelerometer ger information om rörlighet på x, y, z-axeln. Baserat på orientering, är RGB-värden av lysdioder uppdaterade.
Arbetet delas upp i följande faser.
- Gör en läsning från sensor.
Helt enkelt använda api. - Av trigonometri, lösa värdena "rulle och pitch".
Du kan hitta mycket mer information i detta dokument av Mark Pedley. - Erhålla motsvarande färg, besläktade med rotation värdena.
För som vi vänder oss till 0-360 RGB värde med en HSL - RGB konvertering funktionen.
Värdet av planen används i olika skalor för att reglera intensiteten i vitt ljus och färgmättnad. De motsatta hjärnhalvorna färg picker sfärens är helt vita. - Uppdatering bufferten av ljus som lagrar information för enskilda LED-färger.
Denna information, buffert controller kommer att skapa en animering eller svarar med komplementfärger. - Slutligen visar färgerna och uppdatera lysdioderna.
Från början var tanken att skapa en färg sfär där du kan välja valfri färg. Utsläppande färghjulet på meridian och poleward den mörka och ljusa toner.
Men snabbt tanken var kasseras.
Eftersom lysdioderna skapar olika toner, off och snabbt lyser varje rgb LED, när ges låga värden att representera mörka färger, lysdioderna ger en mycket dålig prestanda och du kan se hur de börjar blinka. Detta gör den mörka hemisfären av sfären som färg inte kan fungera korrekt.
Då kommer jag upp med idén att tilldela den valda tonen komplementfärger.
Så, ena hjärnhalvan är plocka en monokromatisk färgvärdet för ett hjul från 50% belysning 90 ~ 100% mättnad. Under tiden den andra sidan, plockar en färggradient från samma färg-läge utan tillägger, på andra sidan av övertoningen, dess komplementfärg.
Läs data från sensorn är rå. Ett filter kan tillämpas för att jämna buller och vibrationer av lampan själv. För tillfället finner jag det intressant eftersom det ser mer analogical, reagerar på alla beröring och tar en sekund att helt stabilisera.
Jag är fortfarande på kod och lägga till nya funktioner och optimera animeringar.
Du kan kontrollera de senaste versionerna av koden på min github konto.