Paso 3: Código de Arduino
Tiempo
Adafruit_GFX
Adafruit_PCD8544
El código se ha inspirado en el Maker Faire Bay Area cuenta regresiva por MaceTech, a quien también se puede obtener la última ChronoDot. El archivo .ino es adjunto (Arduino 1.0 requiere) y el código está a continuación.
En este ejemplo, la fecha de dejar de fumar es 01 de abril de 2012. En realidad, la fecha de dejar de fumar es el 14 de abril de 2012 pero que en el futuro. La mejor manera de comprobarlo es conectar todo, pero prueba los componentes individuales (ChronoDot, LCD) con su código de ejemplo antes de intentar poner todo junto.
/*
Temporizador de éxito sin humo
Utilizando un ChronoDot y una pantalla LCD de Nokia 5110.
Biblioteca de tiempo de, bibliotecas de Adafruit PCD, RTC y el alambre necesario.
El propósito de este dibujo es mostrar un nuevo no fumador
Cuánto tiempo han estado sin cigarrillos en días y
horas y un número constantemente creciente de la cantidad de
dinero ahorrado por no fumar.
Gran parte del código se inspiró en la Maker Faire Bay
Reloj de cuenta regresiva del área Publicada en
http://macetech.com/blog/node/115
De abril de 2012, Daniel Gentleman, thoughtfix.com
*/
#include < Wire.h >
#include < Time.h >
#include < DS1307RTC.h > / ChronoDot/DS3231 trabaja como el DS1307
Cosas de la LCD:
#include < Adafruit_GFX.h >
#include < Adafruit_PCD8544.h >
Pantalla Adafruit_PCD8544 = Adafruit_PCD8544 (7, 6, 5, 4, 3);
PIN 7 - reloj Serial (SCLK)
PIN 6 - datos en serie a (DIN)
pin 5 - comando de datos Seleccione (D/C)
Pin 4 - selección de chip LCD (CS)
PIN 3 - LCD reset (RST)
Configuración de variables:
time_t dejar de fumar; Día/hora del último humo
time_t difftime; diferencia entre el tiempo actual y dejar de fumar
int diff_seconds;
int diff_minutes;
int diff_hours;
int diff_days;
Float PackCost = 6.50; Costo por paquete. US $6,50
Float PackDay = 1.5; Frecuencia de fumar. 1.5 paquetes/día
Float MinutesQuit;
Float CostPerHour;
Float CashSaved;
Inicializar el RTC y LCD
void setup() {}
Serial.Begin(9600); Set baud de 9600
display.Begin();
display.setContrast(40);
display.clearDisplay();
display.display();
setSyncProvider(RTC.get); sistema sync con el ChronoDot
setSyncInterval(10); sincronizar cada 10 segundos si es posible
Compruebe si sync trabajado
if(timeStatus()! = ajuste del horario)
Serial.println ("no se puede sincronizar con el RTC");
otra cosa
Serial.println ("RTC ha establecido la hora del sistema");
quit_elements de tmElements_t; matriz de elementos hasta la fecha de dejar de fumar.
Medianoche en 01 de abril de 2012
quit_elements. Segundo = 0;
quit_elements. Minuto = 0;
quit_elements. Hora = 0;
quit_elements. Wday = 7;
quit_elements. Día = 1;
quit_elements. Mes = 4;
quit_elements. Año = 2012-1970;
salir = makeTime(quit_elements); Marca de tiempo UNIX dejar fecha
Delay(1000);
}
time_t systime; tiene hora para el cálculo de diff
void loop() {}
Si (systime! = now()) {/ / espere nueva segunda a hacer cualquier cosa
SYSTIME = now();
difftime = systime - dejar de fumar; restar tiempo de dejar de fumar de hora actual
diff_seconds = difftime % 60; segundos
difftime = 60; convertir a minutos
diff_minutes = difftime % 60; obtener minutos
difftime = 60; convertir a horas
diff_hours = difftime % 24; Haz horas
difftime = 24; convertir en días
diff_days = difftime; obtener días
}
DisplayTime();
Delay(1000);
display.clearDisplay();
}
modificar la rutina ejemplo de biblioteca de tiempo de
void DisplayTime() {}
MinutesQuit = ((systime-quit)/60);
CashSaved = ((PackCost * PackDay * MinutesQuit) / 1440);
En primer lugar, la pantalla LCD
display.setTextSize(1);
display.setTextColor(BLACK);
display.setCursor(0,0);
display.Print(diff_days);
display.Print ("d");
display.Print(diff_hours);
display.Print(":");
if(diff_minutes < 10)
display.Print('0');
display.Print(diff_minutes);
display.Print(":");
if(diff_seconds < 10)
display.Print('0');
display.Print(diff_seconds);
display.setCursor(0,10);
display.println ("libre de tabaco!");
display.setCursor(0,30);
display.Print("$");
display.Print(CashSaved);
display.println ("guardado");
display.display();
Opcionalmente: Serial
Serial.Print(diff_days);
Serial.Print ("d");
Serial.Print(diff_hours);
Serial.Print(":");
if(diff_minutes < 10)
Serial.Print('0');
Serial.Print(diff_minutes);
Serial.Print(":");
if(diff_seconds < 10)
Serial.Print('0');
Serial.Print(diff_seconds);
Serial.println ("libre de tabaco!");
}