#include <Wire.h>
#include <Adafruit_NeoPixel.h>
#include <RTClib.h>
#include <LiquidCrystal_I2C.h>
#include <DHT22.h>
#define BUTTON 14
#define PIN_NEOP 23
#define NUM_PIX 8
#define DHT_PIN 19
#define RTC_ADDRESS 0x68 // Dirección del RTC DS3231
#define LCD_ADDRESS 0x27 // Dirección del LCD I2C
Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUM_PIX, PIN_NEOP, NEO_GRB + NEO_KHZ800);
RTC_DS3231 rtc;
LiquidCrystal_I2C lcd(LCD_ADDRESS, 16, 2);
DHT22 dht(DHT_PIN);
int buttonState = HIGH;
int lastButtonState = HIGH;
unsigned long lastDebounceTime = 0;
unsigned long debounceDelay = 50;
int brightness = 255;
int buttonPressCount = 0;
void setup() {
pinMode(BUTTON, INPUT_PULLUP);
strip.begin();
strip.show();
Wire.begin(); // SDA en D2, SCL en D1
rtc.begin();
lcd.begin(16, 2);
//setDateTime(2023, 12, 21, 22, 49, 0); // Establece la fecha y hora a 1 de enero de 2023 a las 12:00:00
}
void loop() {
updateNeopixel();
updateRTC();
}
void updateNeopixel() {
int reading = digitalRead(BUTTON);
if (reading != lastButtonState) {
lastDebounceTime = millis();
}
if ((millis() - lastDebounceTime) > debounceDelay) {
if (reading != buttonState) {
buttonState = reading;
if (buttonState == LOW) {
buttonPressCount++;
if (buttonPressCount == 1) {
brightness -= 85;
} else if (buttonPressCount == 2) {
brightness -= 85;
} else if (buttonPressCount == 3) {
brightness -= 85;
} else if (buttonPressCount == 4) {
brightness = 0;
buttonPressCount = 0; // Reinicia el contador al apagar la tira
}
if (brightness < 0) {
brightness = 255;
}
for (int i = 0; i < strip.numPixels(); i++) {
strip.setPixelColor(i, strip.Color(brightness, brightness, brightness));
}
strip.show();
}
}
}
lastButtonState = reading;
}
void updateRTC() {
static unsigned long lastUpdateTime = 0;
unsigned long currentTime = millis();
// Actualizar cada segundo
if (currentTime - lastUpdateTime >= 1000) {
lastUpdateTime = currentTime;
DateTime now = rtc.now();
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("F:");
lcd.print(now.day(), DEC);
lcd.print('/');
lcd.print(now.month(), DEC);
lcd.print('/');
lcd.print(now.year(), DEC);
lcd.setCursor(0, 1);
lcd.print("H:");
lcd.print(now.hour(), DEC);
lcd.print(':');
lcd.print(now.minute(), DEC);
lcd.print(':');
lcd.print(now.second(), DEC);
}
}
void setDateTime(int year, int month, int day, int hour, int minute, int second) {
DateTime dt(year, month, day, hour, minute, second);
rtc.adjust(dt);
}