Dormir ciclo reloj despertador con Sensor de movimiento (4 / 5 paso)

Paso 4: Programar el reloj

Cómo cada componente del programa:

Reloj en tiempo real
Después de ejecutar el SetTime inicial, es muy fácil de utilizar del DS1307. Asegúrese de incluir los archivos DS1307RTC.h y el Time.h e incluir la declaración "tmElements_t tm";. Para leer la hora del reloj, crear un if declaración diciendo "if(RTC.read(tm))" para comprobar si se puede leer el tiempo RTC. En eso si declaración puede obtener cualquier poción del tiempo escribiendo a cualquiera de los siguientes:
TM. Hora
TM. Minutos
TM. Día
TM. Mes
TM. Año

Zumbador
Usar la función tone() de Arduino para jugar notas de diferente frecuencia y duración en mi zumbador piezoeléctrico. PIN 9 sirve como una salida para el zumbador. La función de tono debe escribirse como sigue:
tono (pin, frecuencia, duración);
Me pareció que la mejor manera de jugar y la canción entera a crear 3 matrices que cuyos elementos individuales se accede en un bucle for. Fue un arreglo de discos para las frecuencias de cada nota, uno era para la duración de cada nota, y el último fue para las pausas entre las notas. Encontré toda esta información para el tema de Super Mario desde el puesto por recrear en este foro:
http://Arduino.CC/Forum/index.php/Topic, 8409.0.html
Él o ella utiliza una biblioteca separada de tono en su código, por lo que acaba de copiar las frecuencias, duraciones y pausas en mis propios arreglos. También he añadido 100 milisegundos a cada pausa y duración ya que la melodía era un poco rápida.

Pantalla LCD
Descargar la biblioteca Adafruit RGB LCD protector encontrado en el siguiente enlace:
https://github.com/Adafruit/Adafruit-RGB-LCD-Shield-Library
En el código, son Adafruit_MCP23017.h y Adafruit_RGBLCDShield.h para manipular la pantalla LCD.

Cómo debería funcionar el producto final:

La pantalla inicial en la pantalla LCD debe leer "Pulse Select". Tecla select cambiará el reloj del modo de alarma de reloj normal o volver al modo reloj. Una vez en modo de alarma, pulsar el botón derecho le permitirá configurar la alarma activar o desactivar (controlado por el botón izquierdo), la hora de la alarma (controlada por el botón UP) o ajustar los minutos de la alarma (controlado por el botón de abajo). No te preocupes si todo esto no tiene sentido todavía. Cada paso tiene instrucciones sobre qué botón pulsar en el camino.

Una vez que la alarma se va, usted puede desactivarlo pulsando simplemente el botón extra (atado en el frente de mi reloj).

El código completo:

Mi bucle es bastante complicado, pero el reloj funciona! Si tiene sugerencias sobre cómo simplificar el código, me avisas. Me resultó más difícil para programar que el botón presiona como acciones separadas y para conseguir el reloj para imprimir la fecha y hora para que continuamente actualizaría.
Esperemos que podrá entender en el caso de que desee realizar ajustes para sus los propios en el reloj!

#include < DS1307RTC.h >
#include < Time.h >
#include < Wire.h >
#include < Adafruit_MCP23017.h >
#include < Adafruit_RGBLCDShield.h >

Código para un ciclo de sueño despertador
Utiliza la pantalla LCD, botón, sensor de movimiento PIR, zumbador piezoeléctrico, reloj en tiempo Real

Estos #defines hacerlo fácil establecer el color de luz de fondo
#define rojo 0 x 1
#define amarillo 0x3
#define verde 0 x 2
#define verde azulado 0x6
#define azul 0x4
#define violeta 0x5
#define blanco 0x7

Frecuencias de tonos en la melodía de la alarma
melodía de int [] = {660,660,510,660,770,380,510,380,320,440,480,450,
430,380,660,760,860,700,760,660,520,580,480,510,380,320,440,480,
450,430,380,660,760,860,700,760,660,520,580,480,500,760,720,680,
620,650,380,430,500,430,500,570,500,760,720};

duración de los tonos jugados en la melodía de la alarma de
duración de int [] = {200,200,200,200,200,200,200,200,200,200,180,200,
200,200,180,150,200,180,150,180,180,180,180,200,200,200,200,180,
200,200,200,180,150,200,180,150,180,180,180,180,200,200,200,200,
250,250,200,200,200,200,200,200,200,200,200};

retardo entre tonos
int delayTime [] = {175,250,250,150,250,375,387,325,300,350,250,265,
175,250,200,200,175,250,175,275,250,175,175,275,375,300,350,250,265,
175,250,200,200,275,250,175,275,250,175,175,350,250,150,175,175,250,
250,175,175,250,175,150,210,250,150};

int switchPin = 5;
pirPin int = 6;
int buzzerPin = 9;

Selecciona ya sea alarma modo juego o reloj
int accesibilidadseleccionar;
entero de elegir que parte de la alarma para configurar
int alarmSelect;
Entero para configurar la alarma a on o off
int alarmSetOnInt;
Entero para la hora del ajuste de alarma
int alarmHourSet;
Número entero de minutos de alarma
int alarmMinSet;
Entero que indica si el botón ha sido presionado
int buttonVal;
Movimiento de seguimiento detectada entero
int motionDetected;

Si es o no la alarma en
pérdidaEn boolean = false;
Si va o no el alam actualmente
Boolean alarmGoingOff = false;
valor booleano que es true una vez que ha pasado el tiempo de alarma
Boolean alarmCanGoOff = false;

tmElements_t tm;
Lcd de Adafruit_RGBLCDShield = Adafruit_RGBLCDShield();

void setup() {}

Wire.Begin();
Serial.Begin(9600);
LCD.Begin(16,2);

Set backlight y mensaje inicial
lcd.setBacklight(VIOLET);
lcd.setCursor(1,1);
LCD.Print ("presionar seleccionar");

pinMode (pirPin, entrada);
accesibilidadseleccionar = 0;
alarmSelect = 0;
alarmSetOnInt = 0;
alarmHourSet = -1;
alarmMinSet = -1;
motionDetected = 0;
alarmGoingOff = false;

uint8_t i = 0;

}

void loop() {}
botones de uint8_t = lcd.readButtons();

buttonVal = digitalRead(switchPin);
if(buttonVal == High) {}
LCD.Clear();
pérdidaEn = false;
alarmCanGoOff = false;
alarmGoingOff = false;
}

Si la alarma no se va, imprimir la fecha normal y el tiempo
{if(!alarmGoingOff)}
printDateTime();
}

Si es que la alarma se apaga y no es la hora de alarma, la alarma continúa
Si (alarmGoingOff & tm. Minuto! = alarmMinSet) {}
LCD.Clear();
pérdidaEn =! pérdidaEn;
alarmGoingOff =! alarmGoingOff;
}

If {}
Si select botón, elija un modo de
if(Buttons & BUTTON_SELECT) {}
if(modeSelect>1) {}
accesibilidadseleccionar = 0;
}
LCD.Clear();
accesibilidadseleccionar accesibilidadseleccionar = 1;
alarmSelect = 0;
Delay(1000);
if(modeSelect == 1) {}
LCD.Clear();
lcd.setCursor(1,0);
LCD.Print ("Alarm Set");
lcd.setCursor(1,1);
LCD.Print ("prensa de derecha");
Delay(1000);
}

}
Si el modo seleccionado, es alarma, habilitar a configuración de alarma
if(modeSelect == 1) {}
if(Buttons & BUTTON_RIGHT) {}
if(alarmSelect>2) {}
alarmSelect = 0;
}
alarmSelect = alarmSelect + 1;
Delay(1000);
Mostrar si la alarma está activada o desactivada
if(alarmSelect == 1) {}
LCD.Clear();
{if(!alarmOn)}
lcd.setCursor(1,0);
LCD.Print ("alarma desactivada");
lcd.setCursor(1,1);
LCD.Print ("prensa de izquierda");
Delay(1000);
} else {} if(alarmOn)
lcd.setCursor(1,0);
LCD.Print ("alarma activada");
print2digits(alarmHourSet,10,0);
lcd.setCursor(12,0);
LCD.Print(":");
print2digits(alarmMinSet,13,0);
}
} else if(alarmSelect == 2) {}
LCD.Clear();
lcd.setCursor(1,0);
LCD.Print ("hora fijada");
lcd.setCursor(1,1);
LCD.Print ("presionar para arriba");
} else if(alarmSelect == 3) {}
LCD.Clear();
lcd.setCursor(1,0);
LCD.Print "(minutos juego del);
lcd.setCursor(1,1);
LCD.Print ("Presione");
}
}
}

Si la alarma está activada o desactivada
if(alarmSelect == 1) {}
if(Buttons & BUTTON_LEFT) {}
pérdidaEn =! pérdidaEn;
LCD.Clear();
Delay(1000);
{if(alarmOn)}
LCD.Print ("alarma activada");
} else {} if(!alarmOn)
LCD.Print ("alarma desactivada");
}
}
}

Ajustar hora
if(alarmSelect == 2) {}
if(Buttons & BUTTON_UP) {}
LCD.Clear();
alarmHourSet = alarmHourSet + 1;
if(alarmHourSet>24) {}
alarmHourSet = 0;
}
Delay(500);
}
print2digits(alarmHourSet,14,0);
}

Minutos
if(alarmSelect == 3) {}
if(Buttons & BUTTON_DOWN) {}
LCD.Clear();
alarmMinSet = alarmMinSet + 1;
if(alarmMinSet>59) {}
alarmMinSet = 0;
}
Delay(100);
}
print2digits(alarmMinSet,14,0);
}

}

Alarma puede ir una vez que el tiempo de alarma es igual a la hora actual
Si (pérdidaEn & alarmMinSet == tm. Minutos y alarmHourSet == tm. Hora & accesibilidadseleccionar! = 1) {}
alarmCanGoOff = true;
Serial.println ("alarma pueda");
}

Si la alarma puede apagarse, y que el reloj está en modo de reloj, la alarma
apagará después de 3 consecutivas detecciones de movimiento
Si (alarmCanGoOff & accesibilidadseleccionar! = 1) {}
Serial.println(alarmCanGoOff);
pirVal int = digitalRead(pirPin);
if(pirVal == High) {}
motionDetected ++;
Serial.println ("movimiento detectado");
Delay(1000);
}
if(pirVal == Low) {}
motionDetected = 0;
}
{if(alarmCanGoOff)}
Si (motionDetected > 2 || tm. Hora == alarmHourSet + 1) {}
Alarm();
motionDetected = 0;
}
}

}

}

Método de alarma. Cambia la pantalla y toca la melodía
{} void alarm()
LCD.Clear();
lcd.setCursor(1,0);
LCD.Print ("WAKE UPPPP!");
alarmGoingOff = true;
para (int i = 0; i < 54; i ++) {}
buttonVal = digitalRead(switchPin);
{if(buttonVal!=High)}
Delay(delayTime[i]);
tono (buzzerPin, melody[i],duration[i]);
}
}

}

imprimir la fecha y hora
void printDateTime() {}
if(RTC.Read(TM) & accesibilidadseleccionar == 2) {}
print2digits(TM. Hora, 1, 0);
lcd.setCursor(3,0);
LCD.Print(":");
print2digits(TM. Minutos, 4, 0);
lcd.setCursor(6,0);
LCD.Print(":");
print2digits(TM. Segundo, 7, 0);
print2digits(TM. Mes, 1, 1);
lcd.setCursor(3,1);
LCD.Print("/");
print2digits(TM. Día, 4, 1);
Serial.println (tm. Día);
}
}

Imprimir números en una ubicación utilizando dos dígitos (para el formato de reloj apropiado)
void print2digits (int number, int columna, int fila) {}
Si (número > = 0 & & número < 10) {}
lcd.setCursor(column,row);
LCD.Print('0');
lcd.setCursor(column+1,row);
LCD.Print(Number);
}
else if (cantidad > = 10) {}
lcd.setCursor(column,row);
LCD.Print(Number);
}
}

Artículos Relacionados

Buglar alarma con SENSOR de movimiento PIR

Buglar alarma con SENSOR de movimiento PIR

En este INSTRUCTABLEVamos a hacer una simple BUGLAR alarma con SENSOR de movimiento PIR y ARDUINONo se olvide esto votar para el concurso del Sensor! : D(Se puede ver un botón de voto cerca de la medalla en la parte superior)Para más proyectos de int
Sistema de iluminación bricolaje habitación inteligente con Sensor de movimiento PIR y Arduino

Sistema de iluminación bricolaje habitación inteligente con Sensor de movimiento PIR y Arduino

Hola amigos, tema de hoy es el sistema inteligente luz de la habitación y como sensor de movimiento PIR detecta el movimiento y el trabajo por consiguiente. Voy a contarles sobre el proyecto en el que usted aprenderá cómo puede auto encendido la luz
Reloj despertador con infrarrojo y Bluetooth altavoces

Reloj despertador con infrarrojo y Bluetooth altavoces

INTRODUCCIÓNHola, mi nombre es Ben Hur Gonçalves, soy Ingeniero Mecatrónico graduado en Universidade de São Paulo, Brasil en 2010. Hoy en día trabajo con bienes raíces, pero hacer estos proyectos con arduino en fines de semana, sólo por diversión. Es
Completo reloj Digital con Sensor de presencia (RTC - alarma - PIR - temperatura - humedad - punto de rocío)

Completo reloj Digital con Sensor de presencia (RTC - alarma - PIR - temperatura - humedad - punto de rocío)

HolaYa he hecho algunos proyectos de relojes digitales con Arduino como pantallas LED y LCD, pero este es más especial porque he introducido una novedad con un sensor de movimiento (PIR).Ver VIDEOCaracterísticas principalesPIR (Sensor infrarrojo de p
Hackear tu tira de LED con Sensor de movimiento y temporizador

Hackear tu tira de LED con Sensor de movimiento y temporizador

Me parece que la medida de un Instructable buena es las ideas que inspira, razón por la cual disfruté Instructable de Liam.great98 titulado "Dar tu Neon cama!" Nunca habría pensado de añadir una tira de LED en la parte inferior de una cama de ot
Lámpara de noche con sensor de movimiento y de la oscuridad

Lámpara de noche con sensor de movimiento y de la oscuridad

Este es un proyecto de bricolaje con alimentación a batería. El dispositivo se cambia automáticamente en cuando se detecta movimiento. Puede ser utilizado en dormitorios, baños, closets o corte oscuro etc. que luz si es necesario, no hay alimentación
Con sensor de movimiento de la iluminación del gabinete

Con sensor de movimiento de la iluminación del gabinete

El sensor de movimiento de una lámpara al aire libre fue agregado a la iluminación existente. Las instrucciones para el cableado vienen con la unidad. Para mantener el perfil bajo, he quitado la caja de ensambladura y había blindado gabinete con chap
Reloj despertador con Tetris para demostrar que estás despierto

Reloj despertador con Tetris para demostrar que estás despierto

esto es un Arduino powered despertador que después de golpear dos veces la alarma de repetición de alarma no se cancelará hasta que el usuario ha autorizado 4 líneas en el juego Tetris. Físicamente gire el reloj lateral, por lo que la pantalla es ver
Reloj despertador con Evive

Reloj despertador con Evive

Queremos hacer un reloj de alarma analógico y digital combinado. Reloj de tiempo real es esencial para el reloj mantener el tiempo, incluso si está apagada. Pero comúnmente disponibles tableros de microcontrolador como Arduino o frambuesa Pi no tiene
3D impreso pulsera LED con sensor de movimiento

3D impreso pulsera LED con sensor de movimiento

Este proyecto comenzado cuando imprimí Diagrid pulsera por nervoussystem y tuvo la idea de añadirle algunos LED. Diseñé el modelo using123D diseño. Una baratija de Adafruit (Attiny85) es controlar una franja de Neopixel 144 LED/m y valor de la lectur
SENSOR de movimiento de uso MOTOR de SERVO de CONTROL

SENSOR de movimiento de uso MOTOR de SERVO de CONTROL

HI !!!!!!!!! En este instructables estoy enseñando sobre el control del motor servo con sensor de movimiento. Se utiliza en la pistola de nerf. Vamos a empezar sin perder el tiempo. Siga me para HTML y CSS, proyectos de Arduino. Si tuvieras alguna du
El reloj de la historia: Arduino LCD con sensores de la tapa

El reloj de la historia: Arduino LCD con sensores de la tapa

Este es aún otro Arduino LCD reloj, pero con un giro; Este reloj sabe algunas fiestas y cumpleaños, realizar cálculos sobre la marcha de a qué edad una persona es y entonces Mostrar la información en la pantalla LCD. Me inspiré a hacer este reloj por
Sensor de movimiento inalámbrico portátil ha activado la alarma con un timbre inalámbrico y un sensor de movimiento de airwick

Sensor de movimiento inalámbrico portátil ha activado la alarma con un timbre inalámbrico y un sensor de movimiento de airwick

tuvo la idea de combinar estos dos elementos por una cierta hora ahora, así que cuando una tienda tiene el timbre inalámbrico para unos 11, 50USD yo solo tenía que comprarlo...Piezas y herramientas necesarias:Estación de soldaduraDestornilladorAlgo p
Circuito del Sensor con LED de movimiento

Circuito del Sensor con LED de movimiento

Aquí es un circuito de sensor de movimiento minúsculo, que permite para cambiar algo cuando alguien se mueve delante del sensor.Paso 1: Obtener MaterialMateriales necesarios:PowerSourceMotion Sensor HC-SR501Resistencia (tal vez)LEDPuente de alambrePa