Paso 3: El código
Este reloj utiliza las siguientes librerías (y todo gracias a los autores de estas bibliotecas):
- RTCLib Arduino biblioteca: https://github.com/adafruit/RTClib
- Biblioteca de Arduino FastLED v2.1: http://fastled.io/https://github.com/FastLED/FastLED/releases/tag/ar... (han vinculado a la v2.1 de la biblioteca como no estoy seguro si los cambios del código se requieren para apoyar v3.0)
- SerialCommand Arduino biblioteca: https://github.com/scogswell/ArduinoSerialCommand...
- TimerOne Arduino biblioteca: https://code.google.com/p/arduino-timerone/
Puede descargarse la última versión del código en el github del proyecto: https://github.com/dushyantahuja/Smart-Infinity-Mi...
! = 1) {/ / comprobar si los colores han sido conjunto o no EEPROM.write(0,255); / / segundos color - R-G-B - blanco EEPROM.write(1,255); EEPROM.write(2,255); EEPROM.write(3,255); Minutos - R-G-B - de color rojo EEPROM.write(4,0); EEPROM.write(5,0); EEPROM.write(6,0); Horas color - R-G-B - EEPROM.write(7,255) verde; EEPROM.write(8,0); EEPROM.write(9,0); Color BG - R-G-B - EEPROM.write(10,0) negro; EEPROM.write(11,0); EEPROM.write (12, 0); Ligera sensibilidad - EEPROM.write baja (13, 55); Sensibilidad a la luz - alta EEPROM.write (14, 15); Minutos para cada arco iris EEPROM.write(99,1); } / / Otra lectura de los parámetros de la EEPROM más {seconds.r = EEPROM.read(0); seconds.g = EEPROM.read(1); seconds.b = EEPROM.read(2); minutes.r = EEPROM.read(3); minutes.g = EEPROM.read(4); minutes.b = EEPROM.read(5); hours.r = EEPROM.read(6); hours.g = EEPROM.read(7); hours.b = EEPROM.read(8); bg.r = EEPROM.read(9); bg.g = EEPROM.read(10); bg.b = EEPROM.read(11); light_low = EEPROM.read(12); light_high = EEPROM.read(13); lluvia = EEPROM.read(14);} / / *** configuración del sCmd.addCommand de comandos serie ("MULTI" set_multi); sCmd.addCommand ("Tendencia", clockstatus); sCmd.addCommand ("SETRAIN", set_rainbow); sCmd.addCommand ("hora", set_hour); sCmd.addCommand ("MIN", set_minute); sCmd.addCommand ("SEC", set_second); sCmd.addCommand ("BG", set_bg); sCmd.addCommand ("Luz", set_light); sCmd.addCommand ("tiempo", set_time); sCmd.addCommand ("perdidas", missedCall); sCmd.addCommand ("MISSEDOFF", missedOff); sCmd.addCommand ("arco iris", efectos); sCmd.addCommand ("perdidas", missedCall); sCmd.addCommand ("MISSEDOFF", missedOff); sCmd.addDefaultHandler(effects); *** Establece todos los LEDs en color de fondo de (int i = 0; i < NUM_LEDS; i ++) {LED [i] = bg;} pinMode(IRemitter,OUTPUT); Emisor de infrarrojos LED en el pin digital 2 digitalWrite(IRemitter,LOW); / / setup IR LED como de clockstatus(); attachInterrupt (1, set_multi, caer); Timer1.Initialize(); Timer1.attachInterrupt (estado, 500000); } void loop() {sCmd.readSerial(); if(readIR(10) > 50) {/ / apagar LEDs si alguien está cerca del espejo - que puede ser utilizado como un espejo. Apagar LEDs entre 12:00 y 6:00 para ahorrar energía y enfriar los LEDs y fuentes de alimentación (int i = 0; i < NUM_LEDS; i ++) {LED [i] = CRGB::Black;} FastLED.show(); ledState = 1; FastLED.delay(200); } más {para (int i = 0; me < NUM_LEDS; i ++) {LED [i] = bg;} if(multieffects) {/ / comprobar si presiona el botón para múltiples efectos ha sido uint8_t usados, segunda mano = now.second(); si (segunda mano == 0) {currentPalette = RainbowColors_p; currentBlending = mezcla;} si (segunda mano == 30) {currentPalette = RainbowStripeColors_p; currentBlending = mezcla;} uint8_t estática startIndex = 0; startIndex startIndex = 1; FillLEDsFromPaletteColors (startIndex); FastLED.show(); } if(ledState) otra cosa {/ principal reloj código / / ajuste de brillo a light_high int x = light_high; / / analogRead(IRpin); ahora = rtc.now(); si ((now.minute() % de la lluvia == 0 & & now.second() == 0)) {effects();} para (bytes me = 0; me < =now.minute(); i ++) {/ / Serial.println(minutes); LED [i] = minutos;} / / Serial.println(now.hour(),DEC); para (bytes me = 0; me < 60; i += 5) {LED [i] = CRGB::White;} para (bytes me = (now.hour () % 12) * 5; i < =((now.hour()) % 12)*5+(now.minute()/12);i++) {LED [i] = horas;} if(now.hour() < 7) LEDS.setBrightness (restringir ( light_low, 0, 100)); Ajuste brillo a light_low durante la noche - se refresca abajo LED y fuentes de alimentación. LEDS.setBrightness(constrain(light_high,10,255)) otra cosa; if(lastsec) {l=leds[now.second()]; leds[now.second()] = segundos; lastsecond = now.second(); lastsec = 0; / / Serial.println("ON");} else {LED [lastsecond] = l; if(missed) all_off(); / / Serial.println("OFF"); lastsec = 1;} FastLED.show(); ledState = 0; } / / delay(250); if(multieffects) FastLED.delay(1000 / UPDATES_PER_SECOND); }} anular FillLEDsFromPaletteColors (uint8_t colorIndex) {uint8_t brillo = 255; para (int me = 0; me < NUM_LEDS; i ++) {LED [i] = ColorFromPalette (currentPalette, colorIndex, brillo, currentBlending); colorIndex += 3;}} void set_multi() {estática last_interrupt_time largo sin firmar = 0; unsigned interrupt_time largo = millis(); si (interrupt_time - last_interrupt_time > 200) {if(multieffects) {para (int me = 0; me < NUM_LEDS; i ++) {LED [i] = bg;}} multiefectos = ! multiefectos; Serial.println(multieffects); } last_interrupt_time = interrupt_time; } void set_rainbow() {lluvia = atoi(sCmd.next()); EEPROM.write(14,rain); Serial.println ("arco iris hora fijada"); } void clockstatus() {Serial.println ("estado:"); Serial.Print ("BG:"); Serial.Print(BG.r); Serial.Print(""); Serial.Print(BG.g); Serial.Print(""); Serial.println(BG.b); Serial.Print ("segundos:"); Serial.Print(seconds.r); Serial.Print(""); Serial.Print(seconds.g); Serial.Print(""); Serial.println(seconds.b); Serial.Print ("minutos:"); Serial.Print(minutes.r); Serial.Print(""); Serial.Print(minutes.g); Serial.Print(""); Serial.println(minutes.b); Serial.Print ("hora:"); Serial.Print(hours.r); Serial.Print(""); Serial.Print(hours.g); Serial.Print(""); Serial.println(hours.b); Serial.Print ("luz de ambiente:"); Serial.println(analogRead(IRpin)); Serial.Print ("set - alto de la luz:"); Serial.println(light_high,DEC); Serial.Print ("set - bajo la luz:"); Serial.println(light_low,DEC); Serial.Print ("fecha:"); Fecha y hora = ahora rtc.now(); DateTime(2014,5,2,22,30,0); Serial.Print(Now.Day(), DEC); Serial.Print('/'); Serial.Print(Now.month(), DEC); Serial.Print('/'); Serial.println(Now.Year(), DEC); Serial.Print ("hora:"); Serial.Print(Now.hour(), DEC); Serial.Print(':'); Serial.Print(Now.minute(), DEC); Serial.Print(':'); Serial.Print(Now.Second(), DEC); Serial.println(); Serial.Print ("distancia:"); Serial.println(readIR(5),DEC); } void state() {ledState = 1;} const int colorWheelAngle = 255 / NUM_LEDS; void effects() {Serial.println("RAINBOW"); para (int j = 0; j < 3; j ++) {para (int i = 0; i < 60; i ++) {FillLEDsFromPaletteColors(i); FastLED.show(); Delay(30); }} lastsec = 1; } void missedCall() {perdido = 1;} anular missedOff() {perdido = 0;} anular all_off() {para (int me = 0; me < NUM_LEDS; i ++) {LED [i] = CRGB::Black;}} anular set_hour() {hours.r = atoi(sCmd.next()); hours.g = atoi(sCmd.next()); hours.b = atoi(sCmd.next()); EEPROM.write(6,hours.r); EEPROM.write(7,hours.g); EEPROM.write(8,hours.b); Serial.println ("color de la hora establecida"); } void set_minute() {minutes.r = atoi(sCmd.next()); minutes.g = atoi(sCmd.next()); minutes.b = atoi(sCmd.next()); EEPROM.write(3,minutes.r); EEPROM.write(4,minutes.g); EEPROM.write(5,minutes.b); Serial.println ("juego del minuto color"); } void set_second() {seconds.r = atoi(sCmd.next()); seconds.g = atoi(sCmd.next()); seconds.b = atoi(sCmd.next()); EEPROM.write(0,seconds.r); EEPROM.write(1,seconds.g); EEPROM.write(2,seconds.b); Serial.println ("segundo color SET"); } void set_bg() {bg.r = atoi(sCmd.next()); bg.g = atoi(sCmd.next()); bg.b = atoi(sCmd.next()); EEPROM.write(9,bg.r); EEPROM.write(10,bg.g); EEPROM.write(11,bg.b); Serial.println ("BG color SET"); para (int i = 0; i < NUM_LEDS; i ++) {LED [i] = bg;}} void set_light() {light_low = atoi(sCmd.next()); light_high = atoi(sCmd.next()); EEPROM.write(12,light_low); EEPROM.write(13,light_high); Serial.println ("luz SET"); } void set_time() {cadena set_date, set_time; set_date = (String)sCmd.next() + ' ' + (String)sCmd.next() + ' ' + (String)sCmd.next(); set_time = (String)sCmd.next(); rtc.adjust(DateTime(set_date.c_str(),set_time.c_str()));} int readIR (int veces) {int ambientIR; / / variable para guardar el IR desde el ambiente int obstacleIR; / / variable para guardar el IR desde el valor de la int del objeto [10]; / / variable para almacenar el IR valores int distancia; / / variable que dirá si hay un obstáculo o si no (int x = 0; x < veces; x ++) {digitalWrite(IRemitter,LOW); / / apagar los LEDs de IR a leer el IR de la delay(1) ambiente; / / mínimo retardo necesario leer valores ambientIR = analogRead(IRpin); / / guardar IR de la digitalWrite(IRemitter,HIGH) ambiente; / / encender los LEDs de IR a leer el IR desde el obstáculo delay(1); / / mínimo retardo necesario leer valores obstacleIR = analogRead(IRpin); / / guardar IR del valor de obstáculo [x] = ambientIR-obstacleIR; / / cálculo de cambios en los valores de IR y guardar que promedio futuro} para (int x = 0; x < veces; x ++) {/ / calcular la media basada en el valor de "precisión" distancia += [x];} digitalWrite(IRemitter,LOW); encender los LEDs de IR de return(distance/times); devolver el valor final}