#include <LiquidCrystal.h>
#include <Metro.h>
#include <Wire.h>
LiquidCrystal lcd(9, 8, 6, 5, 4, 3);
#if defined(ARDUINO) && ARDUINO >= 100
#include "Arduino.h"
#define printByte(args) write((byte)args)
#else
#include "WProgram.h"
#define printByte(args) print(args,BYTE)
#endif
uint8_t nian[8]= {0x08,0x0F,0x12,0x0F,0x0A,0x1F,0x02,0x02};
uint8_t yue[8]= {0x0F,0x09,0x0F,0x09,0x0F,0x09,0x0B,0x11};
uint8_t ri[8] = {0x1F,0x11,0x11,0x1F,0x11,0x11,0x1F,0x11};
const int blinkPin1 = 13;
int key = 2;
boolean blink1State = false;
Metro blink1Metro = Metro(1000);
int timeWidth = 0, dataOut = 0, lostData = 0, flag = 0;
int P0 = 0, P1 = 0, P2 = 0, P3 = 0, P4 = 0;
int BPChour = 0, BPCminute = 0, BPCsecond = 0;
int BPCweek = 0, BPCday = 0, BPCmonth = 0, BPCyear = 0;
int BPCArray[19] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
void setup() {
Serial.begin(9600);
lcd.begin(16, 2);
pinMode(13, OUTPUT);
pinMode(2, INPUT);
lcd.createChar(0, nian);
lcd.createChar(1, yue);
lcd.createChar(2, ri);
}
void loop() {
if( digitalRead(key)==LOW)
{
if(blink1Metro.check()){
blink1State = !blink1State;
digitalWrite(blinkPin1, blink1State);
}
int sensorValue = analogRead(A0);
while(lostData<12)
{
int sensorValue = analogRead(A0);
if(sensorValue>300)
{
lostData++;
Serial.print(lostData);
Serial.print(" ");
Serial.print(sensorValue);
Serial.println("");
}
else
{
lostData=0;
Serial.print(lostData);
Serial.print(" ");
Serial.print(sensorValue);
Serial.println("");
}
delay(100);
}
if (sensorValue<300){
timeWidth++;
}
else if (timeWidth != 0){
dataOut = timeWidth - 1;
//Serial.print(dataOut);
BPCArray[flag] = dataOut;
flag++;
timeWidth = 0;
}
else{
BPCArray[18] = dataOut;
if (flag==19){
Serial.println("");
int i;
for (i = 0; i < 19; i = i + 1) {
Serial.print(BPCArray[i]);
}
Serial.println("");
P1 = BPCArray[0];
P2 = BPCArray[1];
P3 = BPCArray[9];
P4 = BPCArray[18];
if (BPCArray[0] * 20 + 20 == 60){
BPCsecond = 0;
BPCminute = BPCArray[4] * 16 + BPCArray[5] * 4 + BPCArray[6] + 1;
}
else{
BPCsecond = BPCArray[0] * 20 + 20;
BPCminute = BPCArray[4] * 16 + BPCArray[5] * 4 + BPCArray[6];
}
if (BPCminute == 60){
BPChour = BPCArray[2] * 4 + BPCArray[3] + 1;
BPCminute = 0;
}
else{
BPChour = BPCArray[2] * 4 + BPCArray[3];
}
if (BPChour == 0){ //noon 12
BPChour = 12;
}
BPCweek = BPCArray[7] * 4 + BPCArray[8];
BPCday = BPCArray[10] * 16 + BPCArray[11] * 4 + BPCArray[12];
BPCmonth = BPCArray[13] * 4 + BPCArray[14];
BPCyear = 2000 + BPCArray[15] * 16 + BPCArray[16] * 4 + BPCArray[17];
Serial.print(BPCyear);
lcd.setCursor(0,0);lcd.print(BPCyear);
Serial.printByte(0);
lcd.setCursor(4, 0);
lcd.printByte(0);
Serial.print(BPCmonth);
if (BPCmonth<10)
{
lcd.setCursor(5, 0); lcd.print("0");
lcd.setCursor(6, 0); lcd.print(BPCmonth);
}
else{
lcd.setCursor(5, 0); lcd.print(BPCmonth);
}
Serial.printByte(1);
lcd.setCursor(7, 0);
lcd.printByte(1);
Serial.print(BPCday);
if (BPCday<10)
{
lcd.setCursor(8, 0); lcd.print("0");
lcd.setCursor(9, 0); lcd.print(BPCday);
}
else{
lcd.setCursor(8, 0); lcd.print(BPCday);
}
Serial.printByte(2);
lcd.setCursor(10, 0);
lcd.printByte(2);
lcd.setCursor(11, 0); lcd.print(" ");
Serial.print(BPCweek);
switch (BPCweek)
{
case 1:
lcd.setCursor(12, 0); lcd.print("Mon");
break;
case 2:
lcd.setCursor(12, 0); lcd.print("Tue");
break;
case 3:
lcd.setCursor(12, 0); lcd.print("Wed");
break;
case 4:
lcd.setCursor(12, 0); lcd.print("Thu");
break;
case 5:
lcd.setCursor(12, 0); lcd.print("Fri");
break;
case 6:
lcd.setCursor(12, 0); lcd.print("Sat");
break;
case 7:
lcd.setCursor(12, 0); lcd.print("Sun");
break;
default:
break;
}
Serial.print(" ");
lcd.setCursor(15, 0); lcd.print(" ");
Serial.print(" ");
lcd.setCursor(0, 1); lcd.print(" ");
Serial.print(BPChour);
if (BPChour<10)
{
lcd.setCursor(3, 1); lcd.print("0");
lcd.setCursor(4, 1); lcd.print(BPChour);
}
else{
lcd.setCursor(3, 1); lcd.print(BPChour);
}
Serial.print(":");
lcd.setCursor(5, 1); lcd.print(":");
Serial.print(BPCminute);
if (BPCminute<10)
{
lcd.setCursor(6, 1); lcd.print("0");
lcd.setCursor(7, 1); lcd.print(BPCminute);
}
else{
lcd.setCursor(6, 1); lcd.print(BPCminute);
}
Serial.print(":");
lcd.setCursor(8, 1); lcd.print(":");
Serial.print(BPCsecond);
if (BPCsecond<10)
{
lcd.setCursor(9, 1); lcd.print("0");
lcd.setCursor(10, 1); lcd.print(BPCsecond);
}
else{
lcd.setCursor(9, 1); lcd.print(BPCsecond);
}
Serial.print(" ");
lcd.setCursor(11, 1); lcd.print(" ");
if (P3<2)
{
Serial.print("AM");
lcd.setCursor(12, 1); lcd.print("AM");
}
else{
Serial.print("PM");
lcd.setCursor(12, 1); lcd.print("PM");
}
Serial.print(" ");
lcd.setCursor(14, 1); lcd.print(" ");
Serial.println("");
Serial.println("------------------------------------");
flag = 0;
lostData = 0;
}
}
delay(100);
}
else{
digitalWrite(13,HIGH);
}
}