Charliexplexed LED klocka - Arduino (3 / 5 steg)
Steg 3: Koden
#include "Wire.h"
#include "RTClib.h"
#include "FastLED.h"
byte [] lysdioder [2] = {/ / Array för att definiera Charlieplexed lysdioder
{3,4},
{5,6},
{7,8},
{9,10},
{4,3}, / / 5
{6,5},
{8,7},
{10,9},
{3,5},
(4,6), //10
{7,9},
{8,10},
{5,3},
{6,4},
(9,7), //15
{10,8},
{3,6},
{4,7},
{5,8},
(9,11), //20
{6,3},
{7,4},
{8,5},
{11,9},
(3,7), //25
{4,8},
{5,9},
{6,10},
{4,9},
(8,4), //30
{9,5},
{10,6},
{3,8},
{7,3},
(5,10), //35
{6,11},
{8,3},
{9,4},
{10,5},
(11,6), //40
{3,9},
{4,10},
{5,11},
{9,3},
(10,4), //45
{11,5},
{3,10},
{4.11},
{10,3},
(11,3), //50
{11,4},
{4,5},
{6,7},
{8,9},
(10,11), //55
{5,4},
{7,6},
{9,8},
{5,7},
{6,8} //60
};
#define NUM_LEDS 60
#define DATA_PIN 12
CRGB lysdioder [NUM_LEDS];
byte lastmin;
RTC_DS1307 rtc;
void setup() {
sätta din installation kod här, om du vill köra en gång:
AllOff();
#ifdef AVR
Wire.BEGIN();
#else
Wire1.BEGIN(); Shield I2C stift ansluter till alt I2C bussen på Arduino vederbörlig
#endif
RTC.BEGIN();
lastmin = 0;
LEDS.setBrightness(128);
FastLED.addLeds < WS2812B, DATA_PIN, GRB > (lysdioder, NUM_LEDS);
Effects();
Serial.BEGIN(57600);
}
void loop() {
sätta din huvudsakliga kod här, för att köra flera gånger:
DateTime nu = rtc.now();
Serial.Print(Now.Hour(), DEC);
om ((now.second() == 0)) {
Effects();
}
IF(Now.Minute()! = lastmin) {
för (int jag = 0; jag < now.minute();i++)
lysdioder [i] = CRGB::Purple;
leds[((Now.Hour()) % 12) * 5] = CRGB::Red;
FastLED.show();
}
LEDOn(now.second());
Delay(900);
AllOff();
leds[((Now.Hour()) % 12) * 5] = CRGB::Black;
leds[Now.Minute()] = CRGB::Black;
FastLED.show();
Delay(100);
//}
}
void LEDOn(byte n) {
AllOff();
pinMode(LEDs[n][0],OUTPUT);
pinMode(LEDs[n][1],OUTPUT);
digitalWrite(LEDs[n][0],HIGH);
digitalWrite(LEDs[n][1],LOW);
}
void AllOff() {
för (int jag = 3; jag < = 11; i ++) {
pinMode(i,INPUT);
}
}
CONST int colorWheelAngle = 360 / NUM_LEDS;
void effects() {
uint8_t färg [3].
för (int jag = 0; jag < 360; i ++) {
för (int j = 0; j < NUM_LEDS; j ++) {
getRGB ((i + (j * colorWheelAngle)) % 360, 255, 150, färg);
lysdioder [j] = CRGB (färg [0], [1], color[2]);
}
FastLED.show();
Delay(1);
}
för (int jag = 0; jag < NUM_LEDS; i ++) {
lysdioder [i] = CRGB::Black;
}
FastLED.show();
}
Gamma värden används för att konvertera HSV till RGB
PROGMEM konst byte dim_curve [] = {
0, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3,
3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4,
4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6,
6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8,
8, 8, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 11, 11, 11,
11, 11, 12, 12, 12, 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15,
15, 15, 16, 16, 16, 16, 17, 17, 17, 18, 18, 18, 19, 19, 19, 20,
20, 20, 21, 21, 22, 22, 22, 23, 23, 24, 24, 25, 25, 25, 26, 26,
27, 27, 28, 28, 29, 29, 30, 30, 31, 32, 32, 33, 33, 34, 35, 35,
36, 36, 37, 38, 38, 39, 40, 40, 41, 42, 43, 43, 44, 45, 46, 47,
48, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62,
63, 64, 65, 66, 68, 69, 70, 71, 73, 74, 75, 76, 78, 79, 81, 82,
83, 85, 86, 88, 90, 91, 93, 94, 96, 98, 99, 101, 103, 105, 107, 109,
110, 112, 114, 116, 118, 121, 123, 125, 127, 129, 132, 134, 136, 139, 141, 144,
146, 149, 151, 154, 157, 159, 162, 165, 168, 171, 174, 177, 180, 183, 186, 190,
193 196, 200, 203, 207, 211, 214, 218, 222, 226, 230, 234, 238, 242, 248, 255,
};
/*
* Kod från < en href = "http://www.kasperkamperman.com/blog/arduino/arduino-programming-hsb-to-rgb/" rel = "nofollow" > http://www.kasperkamperman.com/blog/arduino/ardui...</a>
* nyans varierar från 0 till 360
* lör är från 0 till 255
* val är från 0 till 255
*/
void getRGB (int nyans, uint8_t satt, uint8_t val, uint8_t colors[3]) {
/ * konvertera nyans, mättnad och ljusstyrka (HSB/HSV) till RGB
Dim_curve används endast på/ljusstyrka och mättnad (inverterad).
Detta ser den mest naturliga.
*/
Val = pgm_read_byte (& dim_curve[val]);
lör = 255 - pgm_read_byte(dim_curve[255-sat]);
int r;
int g;
int b;
int bas;
om (satt == 0) {/ / Acromatic färg (grå). Nyans ihåg inte.
färger [0] = val;
färger [1] = val;
färger [2] = val;
} annat {
bas = ((255-sat) * val) >> 8;
Switch(Hue/60) {
fall 0:
r = val;
g = (((val-base) * nyans) / 60) + bas;
b = bas;
bryta;
fall 1:
r = (((val-base)*(60-(hue%60)))/60)+base;
g = val;
b = bas;
bryta;
fall 2:
r = bas;
g = val;
b = (((val-base)*(hue%60)) / 60) + bas;
bryta;
fall 3:
r = bas;
g = (((val-base)*(60-(hue%60)))/60)+base;
b = val;
bryta;
fall 4:
r = (((val-base)*(hue%60)) / 60) + bas;
g = bas;
b = val;
bryta;
fall 5:
r = val;
g = bas;
b = (((val-base)*(60-(hue%60)))/60)+base;
bryta;
}
Colors[0]=(uint8_t) r;
Colors[1]=(uint8_t) g;
Colors[2]=(uint8_t) b;
}
}