Calculando cuantos dias har vivido con Arduino (4 / 4 steg)
Steg 4: Código
El siguiente código fue utilizado con la placa Arduino Uno e incluye algunos comentarios para entender mejor su funcionamiento. Recomiendo que descargues el código y que lo analices desde el programa. Allt descargar las librerias necesarias para utilizar el Matrical to 4 x 4 y el Modulo seriell I2C. descargar código
Libreria al final de las viñetas:
¿Cuantos días har vivido? < br > / *
Programa para calcular los dias transcurridos de una fecha determinada en otra.
Materiales:
-To Matrical 4 x 4
-Display LCD 16 x 2 con Modulo seriell I2C
-Placa Arduino Aunque este código puede ser reducido, en este caso esta escrito
de tal forma que se puedan identificar facilmente los pasos que
se siguieron para llegar al resultado final. La formel que se utilizó
para determinar la cantidad de días transcurridos toma en cuenta los
Años bisietos y otras variantes. Allt descargar las librerias knappsats
y vätska kristall para Modulo seriell I2C.
*/
#include < Keypad.h >
#include < Wire.h >
#include < LiquidCrystal_I2C.h >
LiquidCrystal_I2C lcd (0x27, 2, 1, 0, 4, 5, 6, 7, 3, positiv);
CONST byte rader = 4;
CONST byte COLS = 4;
char nycklar [rader] [COLS] = {
{"1", "2", "3","A"},
{'4', '5', '6',' B'},
{'7', '8', '9',' C'},
{'*','0','#','D'}
};
byte rowPins [rader] = {2,3,4,5}. Filas
byte colPins [COLS] = {6,7,8,9}. Columnas
Tangentbordet knappsatsen = knappsatsen (makeKeymap(keys), rowPins,
colPins, rader, kolumner);
int val = 0; //Valor de referencia
int cuadro = 1023; / / El numero 1023 dibuja un cuadro sv el LCD
Baser para el Cálculo
int Anette = 0; / / Dia de hoy
int maska = 0; //Mes de Hoy
int anosh = 0; //Año de hoy
int diac = 0; //Dia de cumple
int mesc = 0; //Mes de cumple
int anosc = 0; //Año de cumple
int anosvividos = 0; //Años vividos
int totala = 0; //Total de dias vividos
///////////////////////////////////////////////////////////////////////////////VOID SETUP
void setup() {
LCD.BEGIN (16,2); //Arranca LCD
}
///////////////////////////////////////////////////////////////////////////////VOID LOOP
void loop() {
char nyckel = keypad.getKey();
////////////////////////////Inicio
om (val == 0) {//si val es igual en 0 entonces...
lcd.setCursor(1,0);
LCD.Print ("Oprime A para");
lcd.setCursor(4,1);
LCD.Print("iniciar");
}
BORRAR FECHA
om (nyckel & & val == 1 | val == 2 |val == 3 | val == 4 | val == 5 |val == 6 | val == 7 | val == 8 | val == 9) {//Si se oprima la tecla C y val esta sv alguno de los valores del 1 al 9 entonces...
Switch (nyckel)
{
fallet "C":
Val = 1;
Anette = 0;
mesh = 0;
Anosh = 0;
LCD.Clear();
lcd.setCursor(1,0);
LCD.Print ("Fecha de hoy:");
lcd.setCursor(2,1);
LCD.Print("dd/mm/AAAA");
bryta;
}
}
INGRESA FECHA DE HOY
om (nyckel & & val == 0) {//Si val es igual en 0 entonces...
Switch (nyckel)
{
"A" i mål: / / Al oprimir la letra en el Visa escribe...
Val = 1; //val Vero a 1
LCD.Clear();
lcd.setCursor(2,0);
LCD.Print ("Fecha de hoy:");
lcd.setCursor(2,1);
LCD.Print("dd/mm/AAAA");
bryta;
}
}
PRIMER NUMERO GÅVA
om (nyckel & & val == 1) {//Si val es 1 entonces...
Switch (nyckel)
{
ärende '0': / / al escribir el numero 0
lcd.setCursor(2,1);
LCD.Print (nyckel); //El display escribe el numero que se oprimio
Val = 2; //el tapperhet Terese a 2
Anette = gåva + 0; / / se suman 0 dias en los dias
bryta;
fall '1':
lcd.setCursor(2,1);
LCD.Print(Key);
Val = 2;
Anette = gåva + 10.
bryta;
fallet "2":
lcd.setCursor(2,1);
LCD.Print(Key);
Val = 2;
Anette = gåva + 20.
bryta;
fallet "3":
lcd.setCursor(2,1);
LCD.Print(Key);
Val = 2;
Anette = gåva + 30.
bryta;
}
}
SEGUNDO NUMERO GÅVA
annars om (nyckel & & val == 2) {
Switch (nyckel)
{
fallet "0":
Val = 3;
Anette = gåva + 0;
lcd.setCursor(3,1);
LCD.Print(Key);
bryta;
fall '1':
Val = 3;
Anette = gåva + 1.
lcd.setCursor(3,1);
LCD.Print(Key);
bryta;
fallet "2":
Val = 3;
Anette = gåva + 2.
lcd.setCursor(3,1);
LCD.Print(Key);
bryta;
fallet "3":
Val = 3;
Anette = gåva + 3.
lcd.setCursor(3,1);
LCD.Print(Key);
bryta;
fallet "4":
Val = 3;
Anette = gåva + 4.
lcd.setCursor(3,1);
LCD.Print(Key);
bryta;
fallet "5":
Val = 3;
Anette = gåva + 5.
lcd.setCursor(3,1);
LCD.Print(Key);
bryta;
fallet "6":
Val = 3;
Anette = gåva + 6.
lcd.setCursor(3,1);
LCD.Print(Key);
bryta;
fallet "7":
Val = 3;
Anette = gåva + 7.
lcd.setCursor(3,1);
LCD.Print(Key);
bryta;
fallet "8":
Val = 3;
Anette = gåva + 8.
lcd.setCursor(3,1);
LCD.Print(Key);
bryta;
fall '9':
Val = 3;
Anette = gåva + 9.
lcd.setCursor(3,1);
LCD.Print(Key);
bryta;
}
}
PRIMER NUMERO MESH
annars om (nyckel & & val == 3) {
Switch (nyckel)
{
fallet "0":
Val = 4;
lcd.setCursor(5,1);
LCD.Print(Key);
bryta;
fall '1':
Val = 4;
mesh = mesh + 10.
lcd.setCursor(5,1);
LCD.Print(Key);
bryta;
}
}
SEGUNDO NUMERO MESH
annars om (nyckel & & val == 4) {
Switch (nyckel)
{
fallet "0":
Val = 5;
mesh = mesh + 0;
lcd.setCursor(6,1);
LCD.Print(Key);
bryta;
fall '1':
Val = 5;
mesh = mesh + 1.
lcd.setCursor(6,1);
LCD.Print(Key);
bryta;
fallet "2":
Val = 5;
mesh = mesh + 2.
lcd.setCursor(6,1);
LCD.Print(Key);
bryta;
fallet "3":
Val = 5;
mesh = mesh + 3.
lcd.setCursor(6,1);
LCD.Print(Key);
bryta;
fallet "4":
Val = 5;
mesh = mesh + 4.
lcd.setCursor(6,1);
LCD.Print(Key);
bryta;
fallet "5":
Val = 5;
mesh = mesh + 5.
lcd.setCursor(6,1);
LCD.Print(Key);
bryta;
fallet "6":
Val = 5;
mesh = mesh + 6.
lcd.setCursor(6,1);
LCD.Print(Key);
bryta;
fallet "7":
Val = 5;
mesh = mesh + 7.
lcd.setCursor(6,1);
LCD.Print(Key);
bryta;
fallet "8":
Val = 5;
mesh = mesh + 8.
lcd.setCursor(6,1);
LCD.Print(Key);
bryta;
fall '9':
Val = 5;
mesh = mesh + 9.
lcd.setCursor(6,1);
LCD.Print(Key);
bryta;
}
}
PRIMER NUMERO AÑO
annars om (nyckel & & val == 5) {
Switch (nyckel)
{
fall '1':
Val = 6;
Anosh = anosh + 1000;
lcd.setCursor(8,1);
LCD.Print(Key);
bryta;
fallet "2":
Val = 6;
Anosh = anosh + 2000.
lcd.setCursor(8,1);
LCD.Print(Key);
bryta;
}
}
SEGUNDO NUMERO AÑOH
annars om (nyckel & & val == 6) {
Switch (nyckel)
{
fallet "0":
Val = 7.
lcd.setCursor(9,1);
LCD.Print(Key);
bryta;
fall '9':
Val = 7.
Anosh = anosh + 900;
lcd.setCursor(9,1);
LCD.Print(Key);
bryta;
}
}
TERCER NUMERO AÑOH
annars om (nyckel & & val == 7) {
Switch (nyckel)
{
fallet "0":
Val = 8.
lcd.setCursor(10,1);
LCD.Print(Key);
bryta;
fall '1':
Val = 8.
Anosh = anosh + 10.
lcd.setCursor(10,1);
LCD.Print(Key);
bryta;
fallet "2":
Val = 8.
Anosh = anosh + 20.
lcd.setCursor(10,1);
LCD.Print(Key);
bryta;
fallet "3":
Val = 8.
Anosh = anosh + 30.
lcd.setCursor(10,1);
LCD.Print(Key);
bryta;
fallet "4":
Val = 8.
Anosh = anosh + 40;
lcd.setCursor(10,1);
LCD.Print(Key);
bryta;
fallet "5":
Val = 8.
Anosh = anosh + 50;
lcd.setCursor(10,1);
LCD.Print(Key);
bryta;
fallet "6":
Val = 8.
Anosh = anosh + 60.
lcd.setCursor(10,1);
LCD.Print(Key);
bryta;
fallet "7":
Val = 8.
Anosh = anosh + 45;
lcd.setCursor(10,1);
LCD.Print(Key);
bryta;
fallet "8":
Val = 8.
Anosh = anosh + 80.
lcd.setCursor(10,1);
LCD.Print(Key);
bryta;
fall '9':
Val = 8.
Anosh = anosh + 90.
lcd.setCursor(10,1);
LCD.Print(Key);
bryta;
}
}
CUARTO NUMERO AÑOH
annars om (nyckel & & val == 8) {
Switch (nyckel)
{
fallet "0":
Val = 9.
lcd.setCursor(11,1);
LCD.Print(Key);
bryta;
fall '1':
Val = 9.
Anosh = anosh + 1.
lcd.setCursor(11,1);
LCD.Print(Key);
bryta;
fallet "2":
Val = 9.
Anosh = anosh + 2.
lcd.setCursor(11,1);
LCD.Print(Key);
bryta;
fallet "3":
Val = 9.
Anosh = anosh + 3.
lcd.setCursor(11,1);
LCD.Print(Key);
bryta;
fallet "4":
Val = 9.
Anosh = anosh + 4.
lcd.setCursor(11,1);
LCD.Print(Key);
bryta;
fallet "5":
Val = 9.
Anosh = anosh + 5.
lcd.setCursor(11,1);
LCD.Print(Key);
bryta;
fallet "6":
Val = 9.
Anosh = anosh + 6.
lcd.setCursor(11,1);
LCD.Print(Key);
bryta;
fallet "7":
Val = 9.
Anosh = anosh + 7.
lcd.setCursor(11,1);
LCD.Print(Key);
bryta;
fallet "8":
Val = 9.
Anosh = anosh + 8.
lcd.setCursor(11,1);
LCD.Print(Key);
bryta;
fall '9':
Val = 9.
Anosh = anosh + 9.
lcd.setCursor(11,1);
LCD.Print(Key);
bryta;
}
}
BORRAR FECHA DE NACIMIENTO
om (nyckel & & val == 10 | val == 11 |val == 12 | val == 13 | val == 14 |val == 15 | val == 16 | val == 17 | val == 18) {
Switch (nyckel)
{
fallet "C":
Val = 10;
DIAC = 0;
mesc = 0;
anosc = 0;
LCD.Clear();
lcd.setCursor(2,0);
LCD.Print("Nacimiento:");
lcd.setCursor(2,1);
LCD.Print("dd/mm/AAAA");
bryta;
}
}
INGRESA FECHA DE NACIMIENTO / / /
om (nyckel & & val == 9) {
Switch (nyckel)
{
fallet "B":
Val = 10;
LCD.Clear();
lcd.setCursor(2,0);
LCD.Print("Nacimiento:");
lcd.setCursor(2,1);
LCD.Print("dd/mm/AAAA");
bryta;
}
}
PRIMER NUMERO DIAC
om (nyckel & & val == 10) {
Switch (nyckel)
{
fallet "0":
lcd.setCursor(2,1);
LCD.Print(Key);
Val = 11;
DIAC = diac + 0;
bryta;
fall '1':
lcd.setCursor(2,1);
LCD.Print(Key);
Val = 11;
DIAC = diac + 10.
bryta;
fallet "2":
lcd.setCursor(2,1);
LCD.Print(Key);
Val = 11;
DIAC = diac + 20.
bryta;
fallet "3":
lcd.setCursor(2,1);
LCD.Print(Key);
Val = 11;
DIAC = diac + 30.
bryta;
}
}
SEGUNDO NUMERO DIAC
annars om (nyckel & & val == 11) {
Switch (nyckel)
{
fallet "0":
Val = 12.
DIAC = diac + 0;
lcd.setCursor(3,1);
LCD.Print(Key);
bryta;
fall '1':
Val = 12.
DIAC = diac + 1.
lcd.setCursor(3,1);
LCD.Print(Key);
bryta;
fallet "2":
Val = 12.
DIAC = diac + 2.
lcd.setCursor(3,1);
LCD.Print(Key);
bryta;
fallet "3":
Val = 12.
DIAC = diac + 3.
lcd.setCursor(3,1);
LCD.Print(Key);
bryta;
fallet "4":
Val = 12.
DIAC = diac + 4.
lcd.setCursor(3,1);
LCD.Print(Key);
bryta;
fallet "5":
Val = 12.
DIAC = diac + 5.
lcd.setCursor(3,1);
LCD.Print(Key);
bryta;
fallet "6":
Val = 12.
DIAC = diac + 6.
lcd.setCursor(3,1);
LCD.Print(Key);
bryta;
fallet "7":
Val = 12.
DIAC = diac + 7.
lcd.setCursor(3,1);
LCD.Print(Key);
bryta;
fallet "8":
Val = 12.
DIAC = diac + 8.
lcd.setCursor(3,1);
LCD.Print(Key);
bryta;
fall '9':
Val = 12.
DIAC = diac + 9.
lcd.setCursor(3,1);
LCD.Print(Key);
bryta;
}
}
PRIMER NUMERO MESC
annars om (nyckel & & val == 12) {
Switch (nyckel)
{
fallet "0":
Val = 13.
lcd.setCursor(5,1);
LCD.Print(Key);
bryta;
fall '1':
Val = 13.
mesc = mesc + 10.
lcd.setCursor(5,1);
LCD.Print(Key);
bryta;
}
}
SEGUNDO NUMERO MESC
annars om (nyckel & & val == 13) {
Switch (nyckel)
{
fallet "0":
Val = 14.
mesc = mesc + 0;
lcd.setCursor(6,1);
LCD.Print(Key);
bryta;
fall '1':
Val = 14.
mesc = mesc + 1.
lcd.setCursor(6,1);
LCD.Print(Key);
bryta;
fallet "2":
Val = 14.
mesc = mesc + 2.
lcd.setCursor(6,1);
LCD.Print(Key);
bryta;
fallet "3":
Val = 14.
mesc = mesc + 3.
lcd.setCursor(6,1);
LCD.Print(Key);
bryta;
fallet "4":
Val = 14.
mesc = mesc + 4.
lcd.setCursor(6,1);
LCD.Print(Key);
bryta;
fallet "5":
Val = 14.
mesc = mesc + 5.
lcd.setCursor(6,1);
LCD.Print(Key);
bryta;
fallet "6":
Val = 14.
mesc = mesc + 6.
lcd.setCursor(6,1);
LCD.Print(Key);
bryta;
fallet "7":
Val = 14.
mesc = mesc + 7.
lcd.setCursor(6,1);
LCD.Print(Key);
bryta;
fallet "8":
Val = 14.
mesc = mesc + 8.
lcd.setCursor(6,1);
LCD.Print(Key);
bryta;
fall '9':
Val = 14.
mesc = mesc + 9.
lcd.setCursor(6,1);
LCD.Print(Key);
bryta;
}
}
PRIMER NUMERO AÑOC
annars om (nyckel & & val == 14) {
Switch (nyckel)
{
fall '1':
Val = 15.
anosc = anosc + 1000;
lcd.setCursor(8,1);
LCD.Print(Key);
bryta;
fallet "2":
Val = 15.
anosc = anosc + 2000.
lcd.setCursor(8,1);
LCD.Print(Key);
bryta;
}
}
SEGUNDO NUMERO AÑOC
annars om (nyckel & & val == 15) {
Switch (nyckel)
{
fallet "0":
Val = 16.
lcd.setCursor(9,1);
LCD.Print(Key);
bryta;
fall '9':
Val = 16.
anosc = anosc + 900;
lcd.setCursor(9,1);
LCD.Print(Key);
bryta;
}
}
TERCER NUMERO AÑOC
annars om (nyckel & & val == 16) {
Switch (nyckel)
{
fallet "0":
Val = 17;
lcd.setCursor(10,1);
LCD.Print(Key);
bryta;
fall '1':
Val = 17;
anosc = anosc + 10.
lcd.setCursor(10,1);
LCD.Print(Key);
bryta;
fallet "2":
Val = 17;
anosc = anosc + 20.
lcd.setCursor(10,1);
LCD.Print(Key);
bryta;
fallet "3":
Val = 17;
anosc = anosc + 30.
lcd.setCursor(10,1);
LCD.Print(Key);
bryta;
fallet "4":
Val = 17;
anosc = anosc + 40;
lcd.setCursor(10,1);
LCD.Print(Key);
bryta;
fallet "5":
Val = 17;
anosc = anosc + 50;
lcd.setCursor(10,1);
LCD.Print(Key);
bryta;
fallet "6":
Val = 17;
anosc = anosc + 60.
lcd.setCursor(10,1);
LCD.Print(Key);
bryta;
fallet "7":
Val = 17;
anosc = anosc + 45;
lcd.setCursor(10,1);
LCD.Print(Key);
bryta;
fallet "8":
Val = 17;
anosc = anosc + 80.
lcd.setCursor(10,1);
LCD.Print(Key);
bryta;
fall '9':
Val = 17;
anosc = anosc + 90.
lcd.setCursor(10,1);
LCD.Print(Key);
bryta;
}
}
CUARTO NUMERO AÑOC
annars om (nyckel & & val == 17) {
Switch (nyckel)
{
fallet "0":
Val = 18;
lcd.setCursor(11,1);
LCD.Print(Key);
bryta;
fall '1':
Val = 18;
anosc = anosc + 1.
lcd.setCursor(11,1);
LCD.Print(Key);
bryta;
fallet "2":
Val = 18;
anosc = anosc + 2.
lcd.setCursor(11,1);
LCD.Print(Key);
bryta;
fallet "3":
Val = 18;
anosc = anosc + 3.
lcd.setCursor(11,1);
LCD.Print(Key);
bryta;
fallet "4":
Val = 18;
anosc = anosc + 4.
lcd.setCursor(11,1);
LCD.Print(Key);
bryta;
fallet "5":
Val = 18;
anosc = anosc + 5.
lcd.setCursor(11,1);
LCD.Print(Key);
bryta;
fallet "6":
Val = 18;
anosc = anosc + 6.
lcd.setCursor(11,1);
LCD.Print(Key);
bryta;
fallet "7":
Val = 18;
anosc = anosc + 7.
lcd.setCursor(11,1);
LCD.Print(Key);
bryta;
fallet "8":
Val = 18;
anosc = anosc + 8.
lcd.setCursor(11,1);
LCD.Print(Key);
bryta;
fall '9':
Val = 18;
anosc = anosc + 9.
lcd.setCursor(11,1);
LCD.Print(Key);
bryta;
}
}
CALCULANDO
annars om (nyckel & & val == 18) {
Switch (nyckel)
{
fallet "B":
Val = 20;
LCD.Clear();
lcd.setCursor(2,0);
LCD.Print("Calculando...");
lcd.setCursor(0,1);
LCD.write(cuadro);
fördröjning (45);
LCD.write(cuadro);
fördröjning (45);
LCD.write(cuadro);
fördröjning (45);
LCD.write(cuadro);
fördröjning (45);
LCD.write(cuadro);
fördröjning (45);
LCD.write(cuadro);
fördröjning (45);
LCD.write(cuadro);
fördröjning (45);
LCD.write(cuadro);
fördröjning (45);
LCD.write(cuadro);
fördröjning (45);
LCD.write(cuadro);
fördröjning (45);
LCD.write(cuadro);
fördröjning (45);
LCD.write(cuadro);
fördröjning (45);
LCD.write(cuadro);
fördröjning (45);
LCD.write(cuadro);
fördröjning (45);
LCD.write(cuadro);
fördröjning (45);
LCD.write(cuadro);
fördröjning (45);
LCD.Clear();
lcd.setCursor(2,0);
LCD.Print("Calculando...");
lcd.setCursor(0,1);
LCD.write(cuadro);
fördröjning (45);
LCD.write(cuadro);
fördröjning (45);
LCD.write(cuadro);
fördröjning (45);
LCD.write(cuadro);
fördröjning (45);
LCD.write(cuadro);
fördröjning (45);
LCD.write(cuadro);
fördröjning (45);
LCD.write(cuadro);
fördröjning (45);
LCD.write(cuadro);
fördröjning (45);
LCD.write(cuadro);
fördröjning (45);
LCD.write(cuadro);
fördröjning (45);
LCD.write(cuadro);
fördröjning (45);
LCD.write(cuadro);
fördröjning (45);
LCD.write(cuadro);
fördröjning (45);
LCD.write(cuadro);
fördröjning (45);
LCD.write(cuadro);
fördröjning (45);
LCD.write(cuadro);
fördröjning (45);
LCD.Clear();
lcd.setCursor(2,0);
LCD.Print("Calculando...");
lcd.setCursor(0,1);
LCD.write(cuadro);
fördröjning (45);
LCD.write(cuadro);
fördröjning (45);
LCD.write(cuadro);
fördröjning (45);
LCD.write(cuadro);
fördröjning (45);
LCD.write(cuadro);
fördröjning (45);
LCD.write(cuadro);
fördröjning (45);
LCD.write(cuadro);
fördröjning (45);
LCD.write(cuadro);
fördröjning (45);
LCD.write(cuadro);
fördröjning (45);
LCD.write(cuadro);
fördröjning (45);
LCD.write(cuadro);
fördröjning (45);
LCD.write(cuadro);
fördröjning (45);
LCD.write(cuadro);
fördröjning (45);
LCD.write(cuadro);
fördröjning (45);
LCD.write(cuadro);
fördröjning (45);
LCD.write(cuadro);
fördröjning (45);
bryta;
}
}
//////////////////////////////////Calculo
Total=((Anosh-anosc)*(365.242189))+((Diah-DIAC)+((mesh-mesc)*(365.242189/12))); / / formel par determinar los dias
anosvividos = anosh-anosc;
USTED HA VIVIDO
om (val == 20 & & anosvividos < = 89) {//Si los años vividos son menos que 89 y val es igual en 20 entonces...
Val = 21;
LCD.Clear();
lcd.setCursor(0,0);
LCD.Print ("Usted ha vivido:");
lcd.setCursor(2,1);
LCD.Print(total);
lcd.setCursor(9,1);
LCD.write("Dias");
} else om (val == 20) {/ / De lo contrarios, es decir si los años ingresados son mayores que 89 entonces...
Val = 21;
LCD.Clear();
lcd.setCursor(1,0);
LCD.Print ("Usted deberia");
lcd.setCursor(1,1);
LCD.write ("estar muerto");
}
//////////////////////////////////RESET
IF(Key) {//Volvemos poner todos los valores sv 0 para que inicie de nuevo
Switch (nyckel)
{
fallet "*":
LCD.Clear();
Anette = 0;
mesh = 0;
Anosh = 0;
DIAC = 0;
mesc = 0;
anosc = 0;
anosvividos = 0;
Total = 0;
Val = 0;
bryta;
}
}
//////////////////////////////////FIN
}
ElectroCrea.com