New Library: DycoLed for Arduino
hi,
long time ago got nice rgb leds can connected in series. data sent in leds microcontroller (e.g. arduino).
during last weeks spent time running.
now present first version of library control these leds (see attachment).
installation:
copy dycoled folder ...\arduino\libraries\ (where custom libraries are)
usage:
1. import library in sketch
2. generate object leds
3. in setup(), initialize object begin()
4. use setled() 3 colors or byte array 3 colors. values between 0 , 31 can used set pwm
to reset leds, use resetall()
and on...
at moment library works on attiny85, using usi interface. update can use arduino board, other at-chips or whatever.
also there limitation 32 leds. if want set limit up, go header file of lib , change code line needs:
please let me know if have questions, bug reports , on. have fun
long time ago got nice rgb leds can connected in series. data sent in leds microcontroller (e.g. arduino).
during last weeks spent time running.
now present first version of library control these leds (see attachment).
installation:
copy dycoled folder ...\arduino\libraries\ (where custom libraries are)
usage:
1. import library in sketch
code: [select]
#include <dycoled.h>2. generate object leds
code: [select]
dycoled myleds;3. in setup(), initialize object begin()
code: [select]
void setup() {
myleds.begin(3, 10); // 3 leds, 10 ms refresh rate
}4. use setled() 3 colors or byte array 3 colors. values between 0 , 31 can used set pwm
code: [select]
// first led red
myleds.setled(0, red);
delay(500);to reset leds, use resetall()
code: [select]
//reset all, second led green
myleds.resetall();
myleds.setled(1, green);
delay(500);and on...
at moment library works on attiny85, using usi interface. update can use arduino board, other at-chips or whatever.
also there limitation 32 leds. if want set limit up, go header file of lib , change code line needs:
code: [select]
//########################################################
#define maxleds 32
//########################################################please let me know if have questions, bug reports , on. have fun

thanks sharing,
just commenting on see:
if things unclear let me know.
code: [select]
if (_ledcount <= maxleds && _ledcount >= 1) {
ledcount = _ledcount;
}
else {
ledcount = maxleds;
}so if fill in 0 maxleds? why???
[improve]
the type of _ledcount can be (byte) -- idem setled()
[missing]
it not possible set pins, using 1 , 2 pin 1 allready part of serial port....
[missing]
no method request #leds or interval set in constructor.
[style]
the usage of capital ledcount in c++ primary used #defines did mexleds
for variables lowercase used
[bug 2x]
void dycoled::setled(unsigned int led, byte value[3]) {
if (led <= ledcount) {
if ledcount == 1 valid number 0
[typo]
claculating
[shorter]
code: [select]
bitset(tmp_ledmessage, 15);
// set each 'dyco color word' specific color value
tmp_red = dycoled[i][r] << 10; // shift 10 bits, making 0000000000011111 0111110000000000.
tmp_green = dycoled[i][g] << 0; // redundant here readability; stays 0000000000000111.
tmp_blue = dycoled[i][b] << 5; // shift 5 bits, making 0000000000001111 0000000111100000.
// merge color data 1 word
tmp_ledmessage = tmp_ledmessage | tmp_red | tmp_blue | tmp_green;
==>
uint16_t tmp_ledmessage = 1 << 15;
tmp_ledmessage |= dycoled[i][r] << 10;
tmp_ledmessage |= dycoled[i][g] << 0;
tmp_ledmessage |= dycoled[i][b] << 5;
[improvement?]
no need currentmmillis.
code: [select]
void dycoled::send()
{
if (millis()- previousmillis > interval)
{
previousmillis = millis();
sendnow();
}
}
code: [select]
// send data black
for (int i=0; i<256; i++) {
spi_transfer(b10000000);
spi_transfer(b00000000);
}
why 256
ledcount should do[idea]
i add boolean called changed; in class set true if setled() called , reset if values written. if changed == false dont need send data not changed.
i merge clearall() , resetall() to
code: [select]
void dycoled::clearall()
{
for(int i=0; i<ledcount; i++)
{
dycoled[i][0] = 0;
dycoled[i][2] = 0;
dycoled[i][1] = 0;
}
update();
sendnow();
}
is sendnow() missing in constructor?
you have double administration 1 easy setting , 1 sending.
you can win 60+bytes footprint removing ledmessage array's. remove complete update() function.
sendnow() become
[code]
void dycoled::sendnow() {
// send start data
initleds();
// send color data
for (int i=0; i<ledcount; i++)
{
uint16_t ledmessage = 1 << 15;
ledmessage |= dycoled[i][r] << 10;
ledmessage |= dycoled[i][g] << 0;
ledmessage |= dycoled[i][b] << 5;
spi_transfer( highbyte(ledmessage) );
spi_transfer( lowbyte(ledmessage) );
}
// send stop data (all leds change color sent value)
assumedata();
}missing function getled(&r &g & b);
hope helps improve library!
[/code]
Arduino Forum > Development > Other Software Development > New Library: DycoLed for Arduino
arduino
Comments
Post a Comment