Arduino Controlled RGB LED Dot Matrix bord (4 / 4 stap)

Stap 4: programmeren

Zoals in stap 3 gezegd, we HIGHLY recommend kijken naar deze video: http://www.youtube.com/watch?v=FehBLNHMlfo. Het laat zien hoe eigenlijk verbinden met de Arduino de TLCs in de eerste plaats, dus het is een geweldige plek om te beginnen. Zoveel programmering, wij verdelen het werk onder twee Arduinos en kreeg van hen te communiceren. De volgende programma's zijn eenvoudig kader voor een eindproduct. De LED Driver Arduino is voltooid, terwijl de Controller gewoon een shell is voor wat u wenst te programmeren van het bord te doen:

LED Driver-Arduino:

Texas Instruments TLC 5940 met Arduino
Met de hulp van www.kevindarrah.com

#include < SPI.h > //Serial Peripheral Interface Library

Omvatten de gemakkelijk Tranfer-Lib
#include < EasyTransfer.h >
EasyTransfer ET;

Dit moet precies hetzelfde zijn op de andere Arduino
struct RECEIVE_DATA_STRUCTURE {}
int LEDGrid [18];
};

int LEDData [18];

RECEIVE_DATA_STRUCTURE matrix;

byte ch = 0, chbit = 0, spibit = 0, spibyte = 0; / / variabelen gebruikt door tlc sub routine
int SINData; //variable gebruikt voor het verplaatsen van gegevens naar de TLC
byte transferbyte [48] ;// bytes die worden uitgezonden om de tlc5940 via SPI
48 want 16 @ 12bits kanalen geeft 384bits, 384/8 = 48 bytes, 12 bits naar 8 bits conversie
byte DCvalue [32]; / / 0-63, 6 bits DOT correctie Bytes
int i, j, k, l, m, n; misc variabelen
int count = 0;
//*******************************************************************************************
//*******************************************************************************************
void setup {/ / MAIN SETUP MAIN SETUP MAIN SETUP MAIN SETUP MAIN SETUP

ET.begin(details(matrix), & Serial);

pinMode (7, OUTPUT); //XLAT
pinMode (3, OUTPUT); //OSC2B GSCLK
pinMode (4, OUTPUT); //VPRG
pinMode (11, OUTPUT); //MOSI gegevens
pinMode (13, OUTPUT); //SPI klok
Pin 5 is de blanco

Instellen van de SPI
SPI.setBitOrder (MSBFIRST), //Most significante Bit eerste
SPI.setDataMode(SPI_MODE0); / / Mode 0 Rising rand van gegevens, houd clock laag
SPI.setClockDivider (SPI_CLOCK_DIV4), //Run de gegevens in van 16MHz/4-4MHz
voor (ik = 0; ik < 48; i ++) //clear grijs schaal gegevens
transferbyte [i] = 0;
voor (ik = 0; ik < 32; i ++) //set Dot correctie gegevens aan max (63 voor 6 bits decimaal)
DCvalue [i] = 63;

Serial.begin (9600); //debugging?

DOT correctie instellen
DotCorrection(); / / sub routine helpt

noInterrupts(); / / instellen van de items, dus niet ingaan op interrupts
TCCR2A = B00010010; //Timer 2 ingesteld op de vergelijk modus schakelen pin 5 @ 8MHz, Arduino Digital 3
TIMER 2 IS GSCLCK
Timer 2 prescaler ingesteld op 1, 16/1 = 16 MHz, maar Knevels pin 5 elke andere cyclus, 8MHz
TCCR2B = B00000001;

TCCR1A = B00000000; //Timer 1 niet om het even wat, gebruikt voor het tellen van in-/ uitschakelen
Timer 1 prescaler ingesteld op Fclk/256
Waarom? We moeten rekenen 4096 pulsen uit Timer 2 - pin 5
8 MHz = 1 pulse elke 125ns--4096 pulsen zou moeten 512us
Timer 1 prestatiestatus 16MHz/256 = 62,5 kHz, moeten we een match op elke 512us
Kortom, ik kan krijgen een interrupt te krijgen genoemd elke 512us, dus...
Ik moet lopen Timer 2 @ 8MHz voor 512us te krijgen van 4096 pulsen
Ik kan niet tellen die pulsen rechtstreeks (te snel), dus
Ik zal rekenen met behulp van Timer 1, waardoor een telling elke 16us
De teller begint bij 0, dus we zullen het ingesteld op 31 om een interrupt na 512us
TCCR1B = B00001100; //Mode=CTC met OSCR1A = TOP en 256 als de prescaler
Masker van set up, noem ISR (Inerrupt Service Routine) voor vergelijk wedstrijd op A
TIMSK1 = B00000010;
Dit zijn de waarden van de wedstrijd voor de items
0 hier betekent, wordt deze aangepast aan op een cyclus van de klok/prescaler
OCR1A = 31; //to krijgen onze Interrupt 512us
interrupts(); / / kick off van de timers!
attachInterrupt (0, update, stijgt);
48
voor (ik = 0; ik < 48; i ++) //wipe uit de gegevens in tlc
TLC (i, 0); / / Dit is hoe u het bijwerken van de LED's, tlc is een subroutine met twee ingangen
TLC(Channel, value) kanaal is in dit geval 0-32 en waarde is 0-4095 taakcyclus
4095 is 100% op
pinMode (5, OUTPUT); //BLANK wij opgericht deze pin hier, dus het blijft in een hoge impedantie
staat in het Configuratiemenu, anders de LEDs gek!  zelfs als je dit hoge schrijven
for (int i = 0; ik < 22; i ++) {}
TLC((i*3),4095);
}
delay(100);
for (int i = 0; ik < 22; i ++) {}
TLC((i*3),0);
}
for (int i = 0; ik < 22; i ++) {}
TLC((i*3)+1,4095);
}
delay(100);
for (int i = 0; ik < 22; i ++) {}
TLC((i*3)+1,0);
}
for (int i = 0; ik < 22; i ++) {}
TLC((i*3)+2,4095);
}
delay(100);
for (int i = 0; ik < 22; i ++) {}
TLC((i*3)+2,0);
}
}

void loop {/ / MAIN LOOP MAIN LOOP MAIN LOOP MAIN MAIN LOOP MAIN LOOP LOOP
updateLED();
Dit zou een goede plek om animaties zetten wijten aan het feit dat u gebruik van alle maken kunt
van de kleur combo's, niet enkel 10 of zo.
}

ISR(TIMER1_OVF_vect) {}
} / / Over limiet vlag onderbreken je hoeft dit zelfs als u deze niet gebruikt
ISR(TIMER1_COMPB_vect) {}
} / / Vergelijk B - niet gebruikt
ISR(TIMER1_COMPA_vect) {/ / onderbreken om te tellen van 4096 pulsen op GSLCK
PORTD | = 1 << 5; / / Schrijf leeg HIGH om te herstellen van de 4096-balie in de TLC
PORTD | = 1 << 7; / / Schrijf hoge XLAT om te haken in de gegevens van de laatste gegevensstroom
PORTD & = ~ (1 << 7); //XLAT kan nu laag gaan
PORTD & = ~ (1 << 5); //Blank gaat laag om te beginnen de volgende cyclus
SPI.end (); //end de SPI zodat we naar de pin klok schrijven kunnen
PORTB | = 1 << 5; / / SPI klok pin te geven het extra aantal
PORTB & = ~ (1 << 5); / / de data sheet zegt je dit om wat voor reden nodig?
SPI.begin(); / / de SPI start back-up
voor (SINData = 95; SINData > = 0; SINData--) {/ / de gegevens afgeven!
SPI.transfer(transferbyte[SINData]); / / de SPI-poort alleen begrijpt bytes-8 bits breed
De TLC moet 12 bits voor elk kanaal, dus 12 bits keer 64 kanalen geeft 768 bits
768/8 = 96 bytes, 0-95
}
Graaf ++;
}

ongeldig updateLED() {}
ET.receiveData();
for (int i = 0; ik < 18; i ++) {}

Afdrukken wat er gaande
Serial.Print (matrix. LEDGrid[i]);
Serial.Print(",");

Schakelaar die de 0-10 gegevens ontvangt en dat wordt omgezet in kleuren.
schakelaar (matrix. LEDGrid[i]) {}
geval van 0: / / OFF
TLC(((3*i)),0);
TLC(((3*i)+1),0);
TLC(((3*i)+2),0);
breken;
geval 1: / / rood
TLC(((3*i)),4095);
TLC(((3*i)+1),0);
TLC(((3*i)+2),0);
breken;
geval 2: / / groen
TLC(((3*i)),0);
TLC(((3*i)+1),0);
TLC(((3*i)+2),4095);
breken;
Case 3: / / blauw
TLC(((3*i)),0);
TLC(((3*i)+1),4095);
TLC(((3*i)+2),0);
breken;
geval 4: / / paars
TLC(((3*i)),2000);
TLC(((3*i)+1),4095);
TLC(((3*i)+2),0);
breken;
geval 5: / / TEAL
TLC(((3*i)),0);
TLC(((3*i)+1),4095);
TLC(((3*i)+2),4095);
breken;
kast 6: / / geel
TLC(((3*i)),3000);
TLC(((3*i)+1),0);
TLC(((3*i)+2),4095);
breken;
geval 7: / / roze
TLC(((3*i)),4095);
TLC(((3*i)+1),3500);
TLC(((3*i)+2),3500);
breken;
geval 8: / / oranje
TLC(((3*i)),2232);
TLC(((3*i)+1),0);
TLC(((3*i)+2),1108);
breken;
zaak 9: / / LIGHT BLUE
TLC(((3*i)),1000);
TLC(((3*i)+1),4095);
TLC(((3*i)+2),2000);
breken;
zaak 10: / / wit
TLC(((3*i)),1500);
TLC(((3*i)+1),4095);
TLC(((3*i)+2),4095);
breken;
standaard:
TLC(((3*i)),100);
TLC(((3*i)+1),200);
TLC(((3*i)+2),200);
}
}
Serial.println("");
}

VOID tlc (int kanaal, int value) {/ / TLC aan UPDATE TLC aan UPDATE TLC aan UPDATE TLC naar UPDATE
Deze routine moet zo snel mogelijk gebeuren!!!
if(Value>4095)
waarde = 4095;
if(value<0)
waarde = 0;
We moeten de 12 bits waarde omzetten in een 8-bits BYTE, niet kan de SPI schrijven 12bits
We erachter te komen waar in alle van de bytes naar te schrijven, zodat we niet hoeft te afval tijd
Alles bijwerken
12 bits in de bytes, een begin van 12 bits zal bij 0 of 4 in een byte
spibit = 0;
Als (bitRead (kanaal, 0)) //if het lezen van de waarde oneven is, is het begin een 4
spibit = 4;
Dit is een vereenvoudiging van kanaal * 12 bits/8 bits
spibyte = int (kanaal * 3/2); //this assignes welke byte de 12 bit waarde begint in
voor (chbit = 0; chbit < 12, chbit ++ spibit ++) {/ / start rechtsaf waar de update zal gaan
if(spibit==8) {//during de 12 bit-cyclus, de limiet van byte zal worden bereikt
spibyte ++; //roll in de volgende byte
spibit = 0; //reset de bit tellen in de byte
}
Als (bitRead (waarde, chbit)) //check de waarde van 1's en 0's
bitSet (transferbyte [spibyte], spibit); //transferbyte is wat wordt geschreven naar de TLC
anders
bitClear (transferbyte [spibyte], spibit);
} //0-12 bits lus
}
VOID DotCorrection() {}
PORTD | = 1 << 4; //VPRG naar DC modus HIGH
spibyte = 0; //reset onze variabelen
spibit = 0;
voor (ch = 0; ch < 32; ch ++) {/ / 6 bit een stuk x 32-uitgangen
voor (chbit = 0; chbit < 6; chbit ++) {}
if(spibit==8) {}
spibyte ++;
spibit = 0;
}
Als (bitRead (DCvalue [ch], chbit)) //all 6 beetjes
bitSet (transferbyte [spibyte], spibit); //setting bit 7 van overdracht byte
anders
bitClear (transferbyte [spibyte], spibit);
spibit ++;
}
}
SPI.begin();
voor (j = spibyte; j > = 0; j--) {}
SPI.transfer(transferbyte[j]);
}
PORTD | = 1 << 7;
PORTD & = ~ (1 << 7);
PORTD & = ~ (1 << 4); //VPRG is goed om te gaan in de normale modus laag
}

Arduino controller:

/*
Gegevens lezen:
0: ECHT OFF NU
1: RODE IDK
2: GROENE SPELEN
3: BLUE NOTE
4: PURPLE BAR
5: TEAL -
6: GELE -
7: ROZE -
8: ORANGE -
9: L-BLUE -
10: WIT -
DEF:TEST-
*/

De bovenstaande gegevensverzameling komt overeen met de kleurgegevens gedefinieerd in de LED Driver Arduino

Omvatten de gemakkelijk Tranfer-Lib
#include < EasyTransfer.h >
EasyTransfer ET;

Dit moet precies hetzelfde zijn op de andere Arduino
struct SEND_DATA_STRUCTURE {}
int LEDGrid [18];
};

SEND_DATA_STRUCTURE matrix;

//----------------------------Variables-------------------------

int buttonRaw [6] [3];
int LEDData [6] [3];

//--------------------------------------------------------------

VOID Setup {}
Seriële beginnen op 9600 - foutopsporing
Serial.begin(9600);

EasyTransfer begint
ET.begin(details(matrix), & Serial);

Pennen 7-9 worden gebruikt voor de knop draden
pinMode (7, OUTPUT);
pinMode (8, OUTPUT);
pinMode (9, OUTPUT);

Define spreker poort - niet daadwerkelijk gebruikt in dit shellprogramma
pinMode (2, OUTPUT);

buttonCheck();

}

//------------------------------Setup---------------------------

void loop {}
buttonCheck();
Update();

Eigenlijk programma toevoegen in deze ruimte. Lees de knop waarden, stelt de
lichten en geluiden afspelen. Haar alles aan jou. Dit is het kader
voor wat je wilt.

}

//-----------------------------Programs--------------------------

Updater: toevoegen werkelijke licht verzenden van mechanica. Gewoon instellen LEDData [x] [y]
matrix-coördinaat die met het juiste licht naar een getal overeenkomt
van 0 tot en met 10 als omschreven op de top van dit programma.

VOID update() {}
voor (int y = 0; y < 3; y ++) {}
voor (int x = 0 x < 6; x ++) {}
matrix. LEDGrid [gridCount] = LEDData [x] [y];
gridCount ++;
}
delay(5);
}
gridCount = 0;
ET.sendData();
}

//-------------------

Check-knop: knop waarden controleert en slaat dat ONBEWERKTE gegevens naar een matrix.
De volgorde gaat van (0,0)-(6,0), vervolgens (0,1)-(6,1), enz. Deze gegevens kunnen
worden gebruikt om te schakelen van waarden, enz.

ongeldig buttonCheck() {}
voor (int y = 0; y < 3; y ++) {}
digitalWrite(7+y,HIGH);
voor (int x = 0; x < 6; x ++) {}
buttonRaw [x] [y] = analogRead (x);
}
digitalWrite(7+y,LOW);
}
}

Gerelateerde Artikelen

Arduino controlled RGB LED nachtlampje

Arduino controlled RGB LED nachtlampje

een nachtlampje voor mijn jongens nodig en wilde iets meer dan de normale stekker in. Ze wilden een die zij kon het plukken van de kleur van en een die kleur zou veranderen.Easy - sommige PWM, een Arduino en RGB LED!Kiezen van de kleur was de kwestie
Arduino-controlled RGB LED Infinity spiegel

Arduino-controlled RGB LED Infinity spiegel

Update 11/22/2013: dank aan iedereen die gestemd voor dit project in de Microcontroller-wedstrijd! Het was een van de drie winnaars van de eerste-prijs.9/17/2013 update: dank aan iedereen die gestemd voor dit project in de wedstrijd van de Arduino (i
Arduino controlled RGB LED-strip in de woonkamer

Arduino controlled RGB LED-strip in de woonkamer

Het idee achter dit kleine project was dat sommige vrij indirecte stemming licht in de woonkamer. Het wordt beheerd door de server openHAB (dat project is nog steeds op de lijst moet worden toegevoegd aan deze site) geïnstalleerd op een Raspberry Pi.
IPhone Controlled RGB LED (Arduino)

IPhone Controlled RGB LED (Arduino)

Dit project toont je hoe om te zetten van de Arduino met een RGB LED en controle met je iPhone via uw Wifi-netwerk. Bent u in staat te stellen van 15 verschillende kleuren + 2 programma's met de iPhone app.URL voor korte demo video:https://drive.Goog
LED Dot Matrix Display

LED Dot Matrix Display

In dit project, wordt u opnieuw twee sets van shift registers gebruiken. Deze zal worden aangesloten op de rijen enkolommen van de dot matrix-scherm. U zal dan een eenvoudig object, of een sprite, tonen op het display enanimeren het. Het hoofddoel va
LED Dot-Matrix beeldscherm

LED Dot-Matrix beeldscherm

dit is een eenvoudige HOW-TO maken uw eigen gepersonaliseerde LED Dot-Matrix beeldscherm. Ik zal het toevoegen van het complete programma met een uitleg aan het licht van de LED's met. Het is ook nogal gehackt, dat kunt u het aan jezelf.Ik decieded o
Arduino 8 x 8 Dot Matrix scrollen tekst Calculator leidde

Arduino 8 x 8 Dot Matrix scrollen tekst Calculator leidde

HalloIk doe het omdat ik een rekenmachine nodig voor mijn vriendin (ik ben de voorbereiding van een cadeau voor haar :))Hoe dan ook, het is gemakkelijk. Ik gehecht standart code voor arduino 8 x 8 dot matrix 7219. Dan kunt u uw tekst met mijn excel-b
Android Controlled RGB LED met behulp van Arduino

Android Controlled RGB LED met behulp van Arduino

Hai iedereen in de post-iam gaan laten zien hoe om te controleren de RGB LED met behulp van android met arduino en HC-05 Bluetooth-module.Ik zocht in web is er veel technieken waarmee de RGB LED. Maar dit is de methode die zeer eenvoudig en gemakkeli
Controle RGB LED met arduino en Processing.

Controle RGB LED met arduino en Processing.

Ik zal vandaag u vertellen hoe u kunt besturen een RGB LED met behulp van de Arduino en Processing language. Dit is mijn eerste instructable dus, laat me weten als ik kon iets verbeteren en als je allerlei vragen hebt laat ze in het commentaarvak, ik
WiFi Controlled RGB LED-Strip

WiFi Controlled RGB LED-Strip

Soms kunnen die IR-afstandsbedieningen gebruikt om te bepalen van de RGB LED strips worden irriterend als gevolg van hun beperkt bereik en jacht voor de afstandsbediening wanneer u kan niet het vinden. Dit eenvoudige, maar effectieve project kan een
Draadloze Accelerometer Controlled rgb-LED's

Draadloze Accelerometer Controlled rgb-LED's

MEMS (Micro-Electro-mechanische systemen) versnellingsmeters worden op grote schaal gebruikt als tilt-receptor in mobiele telefoons en camera's. Eenvoudige accelerometers zijn beschikbaar zowel als ic-chip en goedkoop pcb-ontwikkelborden.Draadloze ch
Merk: Bluetooth controlled RGB led T-shirt met Splat PLC

Merk: Bluetooth controlled RGB led T-shirt met Splat PLC

Iedereen heeft dat een shirt die ze graag dragen, maar wie kunnen zeggen dat ze hebben een shirt dat oplicht? Wie kan beter nog zeggen dat ze hebben een shirt dat oplicht en wordt beheerd vanuit hun Androïde apparaat! Ik zal u stap voor stap instruct
Arduino Powered RGB LED wodka plank

Arduino Powered RGB LED wodka plank

dit instructable krijgen u zal maken van uw eigen arduino aangedreven rood groen en blauwe LED project. Het hoeft zelfs niet te worden een plank! Flessen wodka toevallig mooi dus dat is wat ik wilde doen oplichten.In dit project gebruiken we elke pin
TV Remote Controlled RGB Led

TV Remote Controlled RGB Led

INTRODUCTIEInfrarood afstandsbediening project is één van de populaire projecten voor de arduino liefhebbers. We zijn hier over de tv remote. Er zijn verschillende knop van de afstandsbediening die niet worden gebruikt. Ook als we deze tv remote kunn