Enorme leidde Mood light (8 / 8 stap)

Stap 8: software


: Beoordeel dit instructable is als u bevalt! :) hier is de code die ik gebruikt zodat u kunt kopiëren en plakken:
#define DRAW_PWM_DELAY 10
#define MAX_INTENSITY 8

* LED Driver

byte columnPins [] = {2,3,4,6,7,8,11,12,13}; verbindingen van matrix colums
byte levelPins [] = {5,9,10}; Connecties van matrix niveaus

initialiseert de LED driver (pin modi ingesteld en alle LEDs uitgeschakeld)
ongeldig ledInit() {}
voor (byte ik = 0; ik < 9; i ++) {}
pinMode (columnPins [i], OUTPUT);
digitalWrite (columnPins [i], laag);
}
voor (byte ik = 0; ik < 3; i ++) {}
pinMode (levelPins [i], OUTPUT);
digitalWrite (levelPins [i], hoge);
}
}

overschakelen op interne LEDs
zorgt ervoor dat andere LEDs aan het licht op als het stuurprogramma is niet geïnitialiseerd deelstaat
(u kunt niet alle 27 LEDs met slechts 12 pinnen tegelijk richten)
VOID ledOn (byte kolom, byte graad) {}
digitalWrite (columnPins [kolom], hoge);
digitalWrite (levelPins [niveau], laag);
}

hetzelfde als ledOn
VOID ledOff (byte kolom, byte graad) {}
digitalWrite (columnPins [kolom], laag);
digitalWrite (levelPins [niveau], hoge);
}

/********************************************************************************
* Eenvoudige API voor het tekenen (voxel buffer Cartesisch coördinatenstelsel, enz.)
********************************************************************************/

byte buffer [27]; Voxel buffer

trekt de voxel buffer (het negeren van intensiteiten)
elke voxel > 1 schakelt de bijbehorende LED
ongeldig teken (byte n) {}
int col, lvl;
voor (byte t = 1; t < n; t ++) {}
voor (byte ik = 0; ik < 27; i ++) {}
Als (buffer[i]) {}
Col = i / 3;
lvl = i 3 %;
ledOn(col,lvl);
delayMicroseconds(DRAW_PWM_DELAY);
ledOff(col,lvl);
} else {}
delayMicroseconds(DRAW_PWM_DELAY);
}
}
}
}

VOID draw() {}
draw(1);
}

trekt de voxel buffer (duurt intensiteiten in aanmerking)
deze functies maakt gebruik van een software PWM en is ongeveer 128 keer langzamer
trekken dan de binaire functie
ongeldig drawPwm() {}
int col, lvl;
voor (byte t = 1; t < = 128; t ++) {}
voor (byte ik = 0; ik < 27; i ++) {}
Als (! () t % (1 < <(8-buffer[i]))) {
Col = i / 3;
lvl = i 3 %;
ledOn(col,lvl);
delayMicroseconds(DRAW_PWM_DELAY);
ledOff(col,lvl);
} else {}
delayMicroseconds(DRAW_PWM_DELAY);
}
}
}
}

voxel buffer gewist
ongeldig clearBuffer() {}
voor (byte ik = 0; ik < 27; i ++) {}
buffer [i] = 0;
}
}

vult voxel buffer
VOID fillBuffer (de waarde van de byte) {}
voor (byte ik = 0; ik < 27; i ++) {}
buffer [i] = waarde;
}
}

waarden ophaalt van voxel buffer (met behulp van de Cartesische coördinaten)
byte getVoxel (char char y, x, char z) {}
byte ik = 9 * x - y + 3 * z + 13;
retourneren van buffer [i];
}

Hiermee stelt u waarden uit voxel buffer (met behulp van de Cartesische coördinaten)
VOID setVoxel (char char y, char z, x, bytewaarde) {}
byte ik = 9 * x - y + 3 * z + 13;
Als (ik > = 0 & & ik < = 27) {}
buffer [i] = waarde;
}
}

interpoleert willekeurige punten tussen voxels
VOID setPoint (float x, float y, z, bytewaarde zweven) {}
char xint = x > 0? 1:-1;
char yint = y > 0? 1:-1;
zint char = 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 interpoleren (float x, float y, z, bytewaarde, char xint, char yint, char zint zweven) {}
zweven d = sqrt(pow(xint-x,2) + pow(yint-y,2) + pow(zint-z,2));
byte ik = 9 * xint - yint + 3 * zint + 13;
Als (ik > = 0 & & ik < = 27) {}
buffer [i] += (waarde * (1-d));
}
}

/********************************************************************************
* Enkele demo 's
********************************************************************************/

sets pin Staten handmatig (rijder niet gebruikt)
ongeldig demoLowLevel() {}
ledInit();
hier gebeurt er niets zichtbaar
voor (byte lvl = 0; lvl < 3; lvl ++) {}
digitalWrite (levelPins [lvl], laag);
}
nu selecteren we hele kolommen
voor (byte cyclus = 0; cyclus < 2; cyclus ++) {}
voor (byte col = 0; col < 9; col ++) {}
digitalWrite (columnPins [col], cyclus % 2 == 0? HOOG: LAGE);
delay(100);
}
}

ledInit();
hier gebeurt er niets zichtbaar
voor (byte col = 0; col < 9; col ++) {}
digitalWrite (columnPins [col], hoge);
}
nu selecteren wij hele niveaus
voor (byte cyclus = 0; cyclus < 2; cyclus ++) {}
voor (byte lvl = 0; lvl < 3; lvl ++) {}
digitalWrite (levelPins [lvl], cyclus % 2 == 0? LAAG: HOOG);
delay(200);
}
}

ledInit();
}

Sommige rotaties (geen rijder ook gebruikt)
ongeldig demoRotation() {}
rotatie-reeks
byte seq [] = {0,1,2,5,8,7,6,3};

ledInit();
actieve alle niveaus
voor (byte lvl = 0; lvl < 3; lvl ++) {}
digitalWrite (levelPins [lvl], laag);
}
middelste kolom
digitalWrite (columnPins [4], hoge);

nu selecteren we hele kolommen
int cycli = 3 * 3 * 9;
voor (int cyclus = 0; cyclus < cycli; cyclus ++) {}
digitalWrite (columnPins [seq [cyclus %8]], hoge);
digitalWrite (columnPins [seq [(cycle-1) %8]], laag);
Als (cyclus > 3 * 9 =) {}
digitalWrite (columnPins [seq [(cycle+4) %8]], hoge);
digitalWrite (columnPins [seq [(cycle+3) %8]], laag);
}
Als (cyclus > 2 * 3 * 9 =) {}
digitalWrite (columnPins [seq [(cycle+2) %8]], hoge);
digitalWrite (columnPins [seq [(cycle+1) %8]], laag);

digitalWrite (columnPins [seq [(cycle+6) %8]], hoge);
digitalWrite (columnPins [seq [(cycle+5) %8]], laag);
}
delay(100);
}

ledInit();
}

directe toegang tot voxel buffer (cartesische coördinaten niet gebruikt)
ongeldig demoFill() {}
clearBuffer();
voor (int cyclus = 0; cyclus < 2; cyclus ++) {}
for (int i = 0; ik < 27; i ++) {}
Als (cyclus % 2 == 0) {}
buffer [i] = 8;
} else {}
buffer [i] = 0;
}
draw(50);
}
}
}

behandelt voxels zoals opslaglocaties en vul ze beetje bij beetje willekeurig
ongeldig demoBinFill() {}
clearBuffer();
for (int i = 0; ik < 100; i ++) {}
buffer[Random(0,28)] += 2;
drawPwm();
}
}

nette willekeurige sparkle
ongeldig demoSparkle() {}
voor (int dichtheid = 0; dichtheid < 50; dichtheid ++) {}
voor (int cyclus = 0; cyclus < 3; cyclus ++) {}
clearBuffer();
for (int i = 0; ik < dichtheid; i ++) {}
buffer[Random(0,28)] = random(0,9);
}
drawPwm();
}
}
}

maakt alle LEDs pulse synchroon
ongeldig demoPulse() {}
voor (int cyclus = 0; cyclus < 80; cyclus ++) {}
fillBuffer(-abs(cycle%16-8)+8);
drawPwm();
}
}

pulserende Golf
ongeldig demoPulseWave() {}
byte r;
voor (byte cyclus = 0; cyclus < 80; cyclus ++) {}
voor (char x =-1; x < = 1; x ++) {}
voor (char y =-1; y < = 1; y ++) {}
voor (char z =-1; z < = 1, z ++) {}
r = (x * x + y * y + z * z);
setVoxel (x, y, z, -abs((cycle-r)%16-8)+8);
}
}
}
drawPwm();
}
}

toont interpolatie
ongeldig demoGlowfly() {}
zweven dx, dy, dz;
byte stappen = 10;

zweven px = random(-100,101)/100.0;
zweven py = random(-100,101)/100.0;
zweven pz = random(-100,101)/100.0;

voor (int cyclus = 0; cyclus < 8; cyclus ++) {}
DX = (random(-100,101)/100.0 - px) / stappen;
dy = (random(-100,101)/100.0 - py) / stappen;
dz = (random(-100,101)/100.0 - pz) / stappen;

for (int i = 0; ik < stappen; i ++) {}
PX += dx;
py += dy;
PZ += dz;

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

Gerelateerde Artikelen

Twitter vermelden Mood Light

Twitter vermelden Mood Light

Twitter vermelden Mood Light --een sfeer lampje dat u waarschuwt wanneer is vermeld op Twitter.Dit is een eenvoudige intro in hoe om te controleren uw Arduino van Twitter. Als u nieuw bij Arduino Twitter bent / Arduino Processing Twitter / Arduino Py
Geketend mood light met behulp van krachtige RGB LED's

Geketend mood light met behulp van krachtige RGB LED's

ik heb gestart: dit project meer dan een jaar geleden en werken op het aan en uit sindsdien. Nu is het eindelijk gedaan.Het doel was om een mooi uitziende mood light voor mijn woonkamer, geïnspireerd door een standaard verlichting console een vriend
Boek Mood Light

Boek Mood Light

ik en enkele vrienden had een feestje georganiseerd werden we elkaars sommige geschenken geven. Heb ik besloten om een ondanks een "fatsoenlijk" geschenk kopen. Ik dacht dat te volgen het boek Lamp instructable van schimmel Amungus. Hoewel dit p
ATtiny85 Mini RGB Mood Light!

ATtiny85 Mini RGB Mood Light!

ik heb RGB mood lights gebruikend Arduino, PIC, en grotere AVR chips, maar nooit een met de ATtiny85. Daarom heb ik besloten om een te maken.Dit licht van de stemming is super eenvoudig om te maken en alle onderdelen kunnen online worden gekocht voor
Instamorph LED Mood Light

Instamorph LED Mood Light

Dit Instructable kwam heel toevallig - een gelukkig ongeval. Mijn vrienden op de IRL werkten hard aan hun meer nuttige en praktische toepassingen terwijl ik bezig was op een onafhankelijke project met behulp van LED's. Niet in staat om te negeren de
Twitter Mood Light - 's werelds stemming in een doos

Twitter Mood Light - 's werelds stemming in een doos

Hoe voelt de wereld nu? Dit vak vertelt u.Aangedreven door: een Arduino, een WiFly draadloze module, een RGB LED, Twitter.com en een 9v batterij.Ik ben een junkie nieuws. Mij zin voor weet alles wat in de wereld gebeurt er zo snel als het gebeurt. Ik
Touch Sensitive RGB LED Mood Light

Touch Sensitive RGB LED Mood Light

Ik wilde altijd echt een cool LED Mood Light, maar allemaal die ik op Instructables gezien heb IC's gebruiken, en ik vind IC's nemen enkele van de leuke circuits te bouwen. Dat is de reden dat ik ontwierp deze lamp. Ik wilde ook om ervoor te zorgen d
RGB LED Mood Light w / ATtiny85

RGB LED Mood Light w / ATtiny85

ze noemen deze dingen MOOD LIGHTS.Weet niet waarom. Ik denk dat het veranderen van kleuren, sommige mensen zetten in een goed humeur.Hoewel ik dat opgemerkt heb wanneer mensen kijken naar deze stemming licht lijkt te hebben een vergelijkbare invloed
IKEA Mood-light conversie

IKEA Mood-light conversie

dit kleine project was een van mijn eerste projecten met microcontrollers. Eerst, maakte ik het circuit dan jarenlang, ik vroeg me af wat ik kon doen mee, totdat op een dag kwam ik deze IKEA kunststofzak dispenser. Ik wist meteen, dat het zou maken e
Arduino Mood Light en houder

Arduino Mood Light en houder

leren hoe te maken van uw eigen Mood light uit een Arduino!!!Stap 1: Verzamelen van de materialenJe gaat te willen verzamelen van deze materialen als u wilt bouwen van het licht van de stemming:1 x Arduino Uno1 x RGB LED3 x 330 Omh weerstanden1 x Bre
Humeur-Cube (Li-ion Mood Light)

Humeur-Cube (Li-ion Mood Light)

In de elektronische sectie van Instructables.com lijkt iedereen aan te tonen van grote genegenheid voor LEDs. Na het lezen van vele artikelen, ik dacht dat het zou een goed moment om bij te dragen aan de overvloed van LED projecten. Presenteren... Mo
-=! TRI-COLOR LED MOOD-LIGHT! =-

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

ik hou van de Arduino veel dus heb ik besloten om een Instructable voor een L.E.D. MOOD-LIGHT dat als volgt gaat:Groen = aanGeel = oprood = opGroen = offGeel = offRood = uitEn zo verder.Stap 1:-= delen =- u zal moet:1 x gele LED1 x rode Led1 x groene
De Mini Mood Light v1 montage Kit

De Mini Mood Light v1 montage Kit

de Mini Mood Light is een klein interactief en Herprogrammeerbare gekleurde lichtcentrale circuit.  De stemming licht bestaat uit een Texas instrumenten MSP430 micro controller aan twee RGB-LED's, vier knoppen en enkele ondersteunende onderdelen alle
Gemakkelijk Mood light

Gemakkelijk Mood light

dit is een gemakzuchtige oplossing te halen uw eigen $50 + waarde stemming licht met een minimum van onderdelen/moeite/kosten en elektrische of elektronische ervaring. Zelfs solderen vermeden worden!Totale kosten zou zo weinig $2.Stap 1: Het hart van