Enorma led Mood light (8 / 8 steg)

Steg 8: programvara



Gradera detta instructable om du gillar det! :) här är koden som jag använde så att du kan kopiera och klistra in den:
#define DRAW_PWM_DELAY 10
#define MAX_INTENSITY 8

* LED Driver

byte columnPins [] = {2,3,4,6,7,8,11,12,13}. anslutningar för matrix colums
byte levelPins [] = {5,9,10}. anslutningar av matrix nivåer

initierar LED driver (anger pin lägen och släcks alla lysdioder)
void ledInit() {
för (byte jag = 0; jag < 9; i ++) {
pinMode (columnPins [i], produktionen);
digitalWrite (columnPins [i], låg);
}
för (byte jag = 0; jag < 3; i ++) {
pinMode (levelPins [i], produktionen);
digitalWrite (levelPins [i], hög);
}
}

slå på enda lysdioder
orsakar andra lysdioder till ljus upp om föraren inte är i initierade staten
(du kan inte ta alla 27 lampor med bara 12 stift i taget)
{Ogiltig ledOn (byte kolumn, byte nivå)
digitalWrite (columnPins [kolumn], hög);
digitalWrite (levelPins [nivå], låg);
}

samma som ledOn
void ledOff (byte kolumn, byte nivå) {
digitalWrite (columnPins [kolumn], låg);
digitalWrite (levelPins [nivå], hög);
}

/********************************************************************************
* Grundläggande Drawing API (voxel buffert, cartesian koordinerat system, etc.)
********************************************************************************/

byte buffert [27]. Voxel buffert

drar voxel bufferten (ignorera stödnivåer)
varje voxel > 1 blir på motsvarande LED
void Rita (byte n) {
int col, lvl;
för (byte t = 1; t < n; t ++) {
för (byte jag = 0; jag < 27; i ++) {
om (buffer[i]) {
Col = jag / 3;
lvl = jag %3.
ledOn(col,lvl);
delayMicroseconds(DRAW_PWM_DELAY);
ledOff(col,lvl);
} annat {
delayMicroseconds(DRAW_PWM_DELAY);
}
}
}
}

void draw() {
draw(1);
}

drar voxel bufferten (tar stödnivåer hänsyn)
denna funktion använder en programvara PWM och är ca 128 gånger långsammare
än binärfilen Rita funktion
void drawPwm() {
int col, lvl;
för (byte t = 1; t < = 128; t ++) {
för (byte jag = 0; jag < 27; i ++) {
om (! () t % (1 < <(8-buffer[i]))) {
Col = jag / 3;
lvl = jag %3.
ledOn(col,lvl);
delayMicroseconds(DRAW_PWM_DELAY);
ledOff(col,lvl);
} annat {
delayMicroseconds(DRAW_PWM_DELAY);
}
}
}
}

rensar voxel buffert
void clearBuffer() {
för (byte jag = 0; jag < 27; i ++) {
buffert [i] = 0;
}
}

fyller voxel buffert
void fillBuffer (bytevärde) {
för (byte jag = 0; jag < 27; i ++) {
buffert [i] = värde;
}
}

hämtar värden från voxel buffert (med kartesiska koordinater)
byte getVoxel (char x, char y, char z) {
byte jag = 9 * x - y + 3 * z + 13.
returnera buffert [i];
}

anger värden från voxel buffert (med kartesiska koordinater)
void setVoxel (char x, char y, char z, bytevärde) {
byte jag = 9 * x - y + 3 * z + 13.
om (jag > = 0 & & jag < = 27) {
buffert [i] = värde;
}
}

interpolerar godtyckliga punkter mellan voxlar
void setPoint (float XY, float, flyta z, bytevärde) {
char xint = x > 0? -1: 1;
char yint = y > 0? -1: 1;
char zint = z > 0? -1: 1;

interpolate(x,y,z,Value,0,0,0);
interpolate(x,y,z,Value,0,yint,0);
interpolate(x,y,z,Value,0,0,zint);
interpolate(x,y,z,Value,0,yint,zint);
interpolate(x,y,z,Value,XInt,0,0);
interpolate(x,y,z,Value,XInt,yint,0);
interpolate(x,y,z,Value,XInt,0,zint);
interpolate(x,y,z,Value,XInt,yint,zint);
}

void interpolera (float XY, float, flyta z bytevärde, char xint, char yint, char zint) {
flyta d = sqrt(pow(xint-x,2) + pow(yint-y,2) + pow(zint-z,2));
byte jag = 9 * xint - yint + 3 * zint + 13.
om (jag > = 0 & & jag < = 27) {
buffert [i] + = (värde * (1 d));
}
}

/********************************************************************************
* Några Demos
********************************************************************************/

uppsättningar pin staterna manuellt (förare inte används)
void demoLowLevel() {
ledInit();
händer ingenting syns här
för (byte lvl = 0; lvl < 3; lvl ++) {
digitalWrite (levelPins [lvl], låg);
}
nu väljer vi hela colums
för (byte cykel = 0; cykla < 2; cykel ++) {
för (byte col = 0; col < 9; col ++) {
digitalWrite (columnPins [col], cykel % 2 == 0? HÖG: LÅG);
Delay(100);
}
}

ledInit();
händer ingenting syns här
för (byte col = 0; col < 9; col ++) {
digitalWrite (columnPins [col], hög);
}
nu väljer vi hela nivåer
för (byte cykel = 0; cykla < 2; cykel ++) {
för (byte lvl = 0; lvl < 3; lvl ++) {
digitalWrite (levelPins [lvl], cykel % 2 == 0? LÅG: HÖG);
Delay(200);
}
}

ledInit();
}

några rotationer (ingen drivrutin används också)
void demoRotation() {
rotation sekvens
byte seq [] = {0,1,2,5,8,7,6,3}.

ledInit();
aktiva alla nivåer
för (byte lvl = 0; lvl < 3; lvl ++) {
digitalWrite (levelPins [lvl], låg);
}
den mellersta kolumnen
digitalWrite (columnPins [4], hög);

nu väljer vi hela colums
int cykler = 3 * 3 * 9.
för (int cykel = 0; cykla < cykler, cykel ++) {
digitalWrite (columnPins [seq [cykel %8]], hög);
digitalWrite (columnPins [FF. [(cycle-1) %8]], låg);
om (cykel > = 3 * 9) {
digitalWrite (columnPins [FF. [(cycle+4) %8]], hög);
digitalWrite (columnPins [FF. [(cycle+3) %8]], låg);
}
om (cykel > = 2 * 3 * 9) {
digitalWrite (columnPins [FF. [(cycle+2) %8]], hög);
digitalWrite (columnPins [FF. [(cycle+1) %8]], låg);

digitalWrite (columnPins [FF. [(cycle+6) %8]], hög);
digitalWrite (columnPins [FF. [(cycle+5) %8]], låg);
}
Delay(100);
}

ledInit();
}

direkt tillgång till voxel buffert (kartesiska koordinater används inte)
void demoFill() {
clearBuffer();
för (int cykel = 0; cykla < 2; cykel ++) {
för (int jag = 0; jag < 27; i ++) {
om (cykel % 2 == 0) {
buffert [i] = 8.
} annat {
buffert [i] = 0;
}
draw(50);
}
}
}

behandlar voxlar lagerplatser och fylla dem bit för bit slumpmässigt
void demoBinFill() {
clearBuffer();
för (int jag = 0; jag < 100; i ++) {
buffer[random(0,28)] + = 2;
drawPwm();
}
}

snygg random sparkle
void demoSparkle() {
för (int densitet = 0; täthet < 50, densitet ++) {
för (int cykel = 0; cykel < 3; cykel ++) {
clearBuffer();
för (int jag = 0; jag < densitet; i ++) {
buffer[random(0,28)] = random(0,9);
}
drawPwm();
}
}
}

gör alla lysdioder puls synkront
void demoPulse() {
för (int cykel = 0; cykla < 80; cykel ++) {
fillBuffer(-abs(cycle%16-8)+8);
drawPwm();
}
}

pulserande våg
void demoPulseWave() {
byte r;
för (byte cykel = 0; cykla < 80; cykel ++) {
för (char x =-1; x < = 1; x ++) {
för (char y =-1; y < = 1; y ++) {
för (char z =-1; z < = 1; z ++) {
r = (x * x + y * y + z * z);
setVoxel (x, y, z, -abs((cycle-r)%16-8)+8);
}
}
}
drawPwm();
}
}

visar interpolation
void demoGlowfly() {
flyta dx, dy, dz;
byte steg = 10;

flyta px = random(-100,101)/100,0;
flyta py = random(-100,101)/100,0;
flyta pz = random(-100,101)/100,0;

för (int cykel = 0; cykla < 8; cykel ++) {
DX = (random(-100,101)/100,0 - px) / steg;
dy = (random(-100,101)/100,0 - py) / steg;
DZ = (random(-100,101)/100,0 - pz) / steg;

för (int jag = 0; jag < steg; i ++) {
PX += dx;
py + = dy;
PZ += dz;

clearBuffer();
setPoint (px, py, pz, MAX_INTENSITY);
drawPwm();
}
}
}

Se Steg
Relaterade Ämnen

Touch Sensitive RGB LED Mood Light

Jag ville alltid verkligen en cool LED Mood Light, men alla jag har sett på Instructables använder IC: s, och jag hitta IC: s ta ut några av roliga för att bygga kretsar. Det är anledningen till att jag designade denna lampa. Jag ville också se till...

Instamorph LED Mood Light

Detta Instructable kom along av en olycka - en lycklig slump. Mina kompisar på Makerspace jobbar hårt på deras mer användbara och praktiska applikationer medan jag arbetade på ett icke-närstående projekt med hjälp av lysdioder. Det går inte att ignor...

RGB LED Mood Light w / ATtiny85

de kallar dessa saker Humör ljus.Vet inte varför. Jag antar att ändra färger sätta vissa människor på gott humör.Även om jag har observerat att när folk ser på detta humör ljus tenderar det att få en liknande effekt som stirrar på en lägereld eller e...

-=! TRI-COLOR LED MOOD LIGHT! =-

jag gillar The Arduino mycket så beslöt jag att göra en Instructable för ett L.E.D. humör-ljus som går så här:Grön = påGul = påröd = påGrön = avGul = avRöd = avOch så vidare.Steg 1:-= delar =- Du behöver:1 x gul lysdiod1 x röd Led1 x grön Led? x hopp...

Hur man gör en LED omgivande Mood Light: en nybörjare Tutorial

Detta Instructable lägger ut hur man konstruerar och kod en ambient LED-ljus med hjälp av en Arduino ombord och en del gemensamma krets komponenter. Detta projekt blandar en röd, grön och blå lampan att få ett brett utbud av färger och Arduino växlar...

Hur till bygga en LED mood lampa / löda säkerhet ljus

Hej,Hur många gånger har du bränt ner ditt hus eftersom du glömde att stänga av det lödkolv eller limpistol? Jag har väl aldrig bränt ner mitt hus (och förhoppningsvis du har inte heller) men på detta instructable jag kommer att lära dig hur man bygg...

Carlitos' projekt: RGB LED Mood Cube

detta är först i en rad elektroniska / robot DIY projekt. Dessa projekt åtföljs av instruktions videor som hjälper dig genom de många steg som ingår i att slutföra uppgiften. För denna första iteration gör vi en RGB LED Mood kub.Glödande färgskiftand...

ATtiny85 Mini RGB Mood Light!

jag har sett RGB humör lampor använder Arduino, PIC, och större AVR marker, men aldrig en med ATtiny85. Det är därför jag bestämde mig att göra en.Detta humör ljus är superenkel att göra och alla delar kan köpas online för ca $5,00 Totalt (inte inklu...

Boka Mood Light

jag och några vänner hade organiserat ett parti var vi ge några presenter varandras. Jag bestämde mig att göra en trots köpa ett "anständigt" present. Jag trodde att följa boken lampan instructable av svampen Amungus. Även om detta projekt är aw...

Innehavaren och Arduino Mood Light

lära sig hur man gör egna Mood light ur en Arduino!Steg 1: Samla materialDu kommer att vilja samla dessa material om du vill bygga humör ljuset:1 x Arduino Uno1 x RGB LED3 x 330 Omh motstånd1 x skärbräda4 x startkablar1 x mjölkkannaMängden trä beror...

Twitter Mood Light - världens humör i en låda

Hur världen mår just nu? Här du berättar.Drivs av: en Arduino, en WiFly trådlös modul, en RGB LED, Twitter.com och en 9v batteri.Jag är nyheter knarkare. Jag vill veta allt som händer i världen så fort det händer. Jag vill vakna upp och veta omedelba...

Montering av Mini Mood Light v1 Kit

The Mini Mood Light är en liten interaktiva och kan programmeras om färgade ljus generator krets. Humör ljuset består av en Texas instrument MSP430 micro controller ansluten till två RGB lysdioder, fyra knappar och vissa stödkomponenter alla på ett a...

Interactive, öppen källkod Mood Light

detta instructable kommer att gå igenom hur man gör en interaktiv, multi-function mood light. Kärnan i detta projekt är BlinkM I2C RGB LED. Som jag var du surfar på webben en dag, BlinkM fångade min uppmärksamhet och jag tänkte att det var alldeles f...

Twitter nämna Mood Light

Twitter nämna Mood Light --ett humör ljus som varnar dig när nämns på Twitter.Detta är en enkel intro i hur du kan styra din Arduino från Twitter. Om du är ny till Arduino Twitter / Arduino bearbetning Twitter / Arduino Python Twitter / Twitter humör...

24 Watt LED Grow Light med ljusstyrka

mat växer är en av mina favorit hobbies eftersom jag är ett stort fan av ekologiska livsmedel och sunda matvanor. Detta Instructable visar dig hur man bygger en LED grow light med röd/blå ljusstyrka kontroller efter växande behov och tillåta dig att...

Motorcykel LED Tail Light

om du har tänkt bygga en svans lysdiod för din motorcykel - eller alla andra fordon- då du måste läsa denna guide. Varför? Om du försöker lista ut hur man gör det än du förmodligen redan har räknat ut att lysdioder är super ljusa, slå på och av vägen...

Joule tjuv LED Night Light

Jag har många batterier runt. Fjärrkontroller, kameror, många elektroniska prylar alla använda batterier, mestadels AA-storlek. Jag alltid kände skuld för att kasta bort de förbrukade batterierna. Jag vet att det finns laddningsbara batterier, men må...

LED night light cube

min första någonsin Instructable. YAY!Detta instructable är en kub LED night light.Behöver du följande leveranser / verktyg:bristolkartongtejpkändebrodertråd och nålLED (ljusaste kan du hitta)saxlim2-3v coin cellsbatteriertråd /wire stripporPinsSteg...

Build Your Own 3120 Lumen LED Grow Light

I started this journey after after testing several of the low cost grow lights being imported from China. Varenda en som jag testade var över hyped, låg powered skräp. När jag tröttnade på lurar med den kinesiska skräp 3 watten LED hade kommit ut och...