// Features // #define FEAT_UNDERVOLTSLEEP // Activates VLM Feature of Tiny10 (Voltage Level Monitoring) and sets it to the lowest value Vcc=2.5V // In 3V supply scenarios (2 AG13/LR44 button cells in serial) this makes no sense because Vcc almost immediately drops below 2.5V #define FEAT_STANDBY // Activates PB1 and PB2. PB2 is the standby button, pull it to ground to activate deep sleep or wake up. Its pullup resistor is enabled. // PB1 is set to high when awake and low when asleep. Can be used to disable external hardware during sleep mode // Color values #define R_STATIC 110 //80 #define G_HIGH 55 //40 #define B_STATIC 0 // 0 #define G_BURN 46 //34 #define G_FLICKER 43 //31 #define G_FLUTTER 35 //49 //25 // Timings #define T_ON 5 #define T_BURN 4 #define T_FLICKER 3 #define T_FLUTTER 2 #ifndef F_CPU #define F_CPU 8000000UL #endif #include #include #include extern "C" { #include "ws2812_config.h" #include "light_ws2812.h" } struct cRGB led[1]; volatile uint8_t timertick = 0; void delayms(uint16_t ms); #ifdef FEAT_STANDBY void buttonrelease() { while ((PINB & (1< g_low; led[0].g--) { ws2812_setleds(led,1); delayms(gdelay); } for (led[0].g = g_low; led[0].g < g_high; led[0].g++) { ws2812_setleds(led,1); delayms(gdelay); } #ifdef FEAT_STANDBY checksleep(); #endif } void on(uint8_t f) { led[0].g = G_HIGH; ws2812_setleds(led,1); for (uint8_t t = f<<4; t > 0; t--) { // f*16 delayms(62); #ifdef FEAT_STANDBY checksleep(); #endif } } void burn(uint8_t f) { for(uint8_t var = f<<4; var > 0; var--) { // f*16 fire(G_BURN, G_HIGH, T_BURN); } } void flicker(uint8_t f) { fire(G_BURN,G_HIGH,T_BURN); for(uint8_t var = f<<4; var > 0; var--) { // f*16 fire(G_FLICKER,G_HIGH,T_FLICKER); } fire(G_BURN,G_HIGH,T_BURN); fire(G_BURN,G_HIGH,T_BURN); fire(G_BURN,G_HIGH,T_BURN); } void flutter(uint8_t f) { fire(G_BURN,G_HIGH,T_BURN); fire(G_FLICKER,G_HIGH,T_FLICKER); for(uint8_t var = f<<4; var > 0; var--) { // f*16 fire(G_FLUTTER,G_HIGH,T_FLUTTER); } fire(G_FLICKER,G_HIGH,T_FLICKER); fire(G_BURN,G_HIGH,T_BURN); fire(G_BURN,G_HIGH,T_BURN); } void delayms(uint16_t ms) { timertick = 0; cli(); PRR &= ~(1<