#include "Adafruit_NeoPixel.h" #include #include #include #include "RTClib.h" #define PIN0 37 #define PIN1 35 #define PIN2 33 #define PIN3 31 #define N0 196 #define N1 200 #define N2 180 #define N3 144 #define TEMP 200 #define invierno 1 #define verano 0 int temporada = 0; // Parameter 1 = number of pixels in strip // Parameter 2 = Arduino pin number (most are valid) // Parameter 3 = pixel type flags, add together as needed: // NEO_KHZ800 800 KHz bitstream (most NeoPixel products w/WS2812 LEDs) // NEO_KHZ400 400 KHz (classic 'v1' (not v2) FLORA pixels, WS2811 drivers) // NEO_GRB Pixels are wired for GRB bitstream (most NeoPixel products) // NEO_RGB Pixels are wired for RGB bitstream (v1 FLORA pixels, not v2) // NEO_RGBW Pixels are wired for RGBW bitstream (NeoPixel RGBW products) Adafruit_NeoPixel strip0 = Adafruit_NeoPixel(N0, PIN0, NEO_GRB + NEO_KHZ800); Adafruit_NeoPixel strip1 = Adafruit_NeoPixel(N1, PIN1, NEO_GRB + NEO_KHZ800); Adafruit_NeoPixel strip2 = Adafruit_NeoPixel(N2, PIN2, NEO_GRB + NEO_KHZ800); Adafruit_NeoPixel strip3 = Adafruit_NeoPixel(N3, PIN3, NEO_GRB + NEO_KHZ800); // IMPORTANT: To reduce NeoPixel burnout risk, add 1000 uF capacitor across // pixel power leads, add 300 - 500 Ohm resistor on first pixel's data input // and minimize distance between Arduino and first pixel. Avoid connecting // on a live circuit...if you must, connect GND first. RTC_DS1307 rtc; void setup() { // delay(4000); // Serial.println("hola"); Serial.begin(57600); if (! rtc.begin()) { Serial.println("Couldn't find RTC"); while (1); } config(); strip0.begin(); strip1.begin(); strip2.begin(); strip3.begin(); clear(); // piramidon_time(720); } int time(int hour, int minute) { int minutes = 0; if (hour>=12) { minutes = 720 - minute - (hour-12)*60; } else { minutes = minute + hour*60; } return minutes-1; } void test() { for (int i=0; i<720; i++) { piramidon_time(i); delay(1); } for (int i=719; i>0; i--) { piramidon_time(i); delay(1); } } uint16_t minute_ant = -20; byte temp_actual = 0; void loop() { DateTime now = rtc.now(); int minute = time(now.hour(), now.minute()); if (minute!=minute_ant) { Serial.print(now.hour()); Serial.print(':'); Serial.print(now.minute()); Serial.print(", que son "); Serial.print(minute); piramidon_time(minute); Serial.println(" minutos"); minute_ant= minute; } // test(); // piramidon_time(719); } void show() { strip0.show(); strip1.show(); strip2.show(); strip3.show(); } void clear() { for (int i=0; i<=200; i++) { strip0.setPixelColor(i, 0, 0, 0); strip1.setPixelColor(i, 0, 0, 0); strip2.setPixelColor(i, 0, 0, 0); strip3.setPixelColor(i, 0, 0, 0); } show(); } int limit[3] = { N0, N0 + N1, N0 + N1 + N2}; void minute_color(int number, byte red, byte green, byte blue) { if (number3)&&(month<11)) { return verano; } else { return invierno; } } void piramidon_time(int minute) { if (minute>=0) { for (int i=0; i<=minute; i++) minute_color(i, 150, 60, 0); for (int i=minute + 1; i<720; i++) minute_color(i, 0, 0, 0); show(); } else clear(); } void config(){ Serial.println("Hola!!"); if (!compareData(__TIME__, readData(0))) { for(uint16_t i=0; i<120; i++) EEPROM.write(i, 0x00); // Memory erasing writeData(0, __TIME__); rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); DateTime now = rtc.now(); byte temp_actual = temporada_actual(now.month()); EEPROM.write(TEMP, temp_actual); Serial.println("ok!!"); } // delay(4000); // temporada = EEPROM.read(TEMP); // Serial.println(temporada); } #define buffer_length 32 static char buffer[buffer_length]; void writeData(uint32_t eeaddress, char* text) { uint16_t eeaddressfree = eeaddress + buffer_length; for (uint16_t i = eeaddressfree; i< (eeaddressfree + buffer_length); i++) EEPROM.write(i, 0x00); for (uint16_t i = eeaddressfree; text[i - eeaddressfree]!= 0x00; i++) { EEPROM.write(i, text[i - eeaddressfree]); } } char* readData(uint16_t eeaddress) { eeaddress = eeaddress + buffer_length; uint16_t i; uint8_t temp = EEPROM.read(eeaddress); for ( i = eeaddress; ((temp!= 0x00)&&(temp<0x7E)&&(temp>0x1F)&&((i - eeaddress)