Paso 3: Parte de Software
cargar el programa en su Microdino-Core + a través de Microduino-FT232R.
----------------------------------
#include "U8glib.h"
U8g(U8G_I2C_OPT_NONE) de U8GLIB_SSD1306_128X64; HW SPI Com: CS = 10, A0 = 9 (Hardware pasadores son SCK = 13 y MOSI = 11)
---ajuste de tamaño de fuente, big|medium|small
#define setFont_L u8g.setFont(u8g_font_7x13)
#define setFont_M u8g.setFont(u8g_font_fixed_v0r)
#define setFont_S u8g.setFont(u8g_font_chikitar)
/*
Fuente:
u8g.SetFont(u8g_font_7x13)
u8g.SetFont(u8g_font_fixed_v0r);
u8g.SetFont(u8g_font_chikitar);
u8g.SetFont(u8g_font_osb21);
*/
#include < Wire.h >
#include < Rtc_Pcf8563.h >
Rtc Rtc_Pcf8563;
int time_nian, time_yue, time_ri, time_shi, time_fen, time_miao, time_zhou;
#include < EtherCard.h >
#define SECONDS_IN_DAY 86400
#define START_YEAR 1900
#define TIME_ZONE + 8
Static int days_in_month [] = {}
31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
MIMAC de estática bytes [] = {}
0 x 00, 0x1A, 0x4B, 0x38, 0x0C, 0x5C};
byte Ethernet::buffer [700];
ntpServer de estática bytes [] = {}
193,204,114,232};
Static byte srcPort = 0;
timeStamp de uint32_t;
NET_TIME_reply Boolean;
#define NET_TIME_INTERVAL 1000
#define para TIME_OUT 10000
#define intervalo 100000
sin firmar largo lastTime = 0, TIME_cache = 0;
void setup () {}
Serial.Begin(57600);
volcdsetup ("carga de red", 0, 15);
Delay(1000);
Si (! ether.begin (sizeof Ethernet::buffer, MIMAC))
Serial.println ("fallado el acceso Ethernet controlador");
otra cosa
Serial.println ("controlador Ethernet inicializada");
Si (! ether.dhcpSetup())
{
Serial.println ("fallo al obtener configuración de DHCP");
volcdsetup ("DHCP Error", 0, 15);
Delay(1000);
}
otra cosa
{
Serial.println ("DHCP configuración hecha");
volcdsetup ("DHCP tiene éxito", 0, 15);
Delay(1000);
}
ether.printIp ("Dirección IP: \t", ether.myip);
ether.printIp ("Netmask:\t", ether.mymask);
ether.printIp ("puerta de enlace: \t", ether.gwip);
//-------------------------------------------------------
volcdsetup ("red tiempo de carga", 0, 15);
Delay(1000);
NET_TIME_reply = true;
vonettime();
if(NET_TIME_reply)
{
volcdsetup ("sincronización de tiempo. Error", 0, 15);
Delay(1000);
}
otra cosa
{
vosettime();
volcdsetup ("sincronización de tiempo. Tener éxito", 0, 15);
Delay(1000);
}
//-------------------------------------------------------
Serial.println();
}
void loop() {}
if(Millis() - lastTime > intervalo)
{
NET_TIME_reply = true;
vonettime();
if(!NET_TIME_reply)
{
vosettime();
}
lastTime = millis();
}
volcd();
}
void volcd()
{
u8g.firstPage();
{}
setFont_M;
u8g.setPrintPos (0, 9);
u8g.Print("Time:");
u8g.Print(RTC.formatDate());
u8g.setPrintPos (0, 20);
u8g.Print(RTC.formatTime());
//-----------------------------------------
u8g.setPrintPos (0, 34);
u8g.Print("Time:");
u8g.Print("20");
u8g.Print(RTC.getYear());
u8g.Print("/");
u8g.Print(RTC.getMonth());
u8g.Print("/");
u8g.Print(RTC.getDay());
u8g.setPrintPos (0, 45);
u8g.Print(RTC.getHour());
u8g.Print(":");
u8g.Print(RTC.getMinute());
u8g.Print(":");
u8g.Print(RTC.getSecond());
SEMANA de la cadena = "";
Switch(RTC.getWeekday())
{
caso 1:
SEMANA = "Lunes";
rotura;
caso 2:
SEMANA = "Martes";
rotura;
caso 3:
SEMANA = "Miércoles";
rotura;
caso 4:
SEMANA = "Jueves";
rotura;
caso 5:
SEMANA = "Viernes";
rotura;
caso 6:
SEMANA = "Sábado";
rotura;
caso 7:
SEMANA = 'Domingo';
rotura;
}
u8g.setPrintPos (60, 45);
u8g.Print(Week);
setFont_S;
u8g.drawFrame (0, 54,128,10);
u8g.setPrintPos (3, 62);
u8g.Print ("Microduino-RTC v1.0 201307");
}
mientras (u8g.nextPage());
}
void vosettime()
{
rtc.initClock(); establecer un tiempo para comenzar con.
rtc.setDate (time_ri, time_zhou, time_yue, 0, time_nian 100%); día, semana, mes, siglo (1 = 1900, 0 = 2000), year(0-99)
rtc.setTime (time_shi, time_fen, time_miao); HR, min, seg.
}
void volcdsetup (char * zi, unsigned int x, int sin signo y)
{
u8g.firstPage();
{}
setFont_L;
u8g.setPrintPos (x, y);
u8g.Print(Zi);
}
mientras (u8g.nextPage());
}
void vonettime()
{
tiempo de espera de uint32_t = millis(); //
mientras que (NET_TIME_reply == true & & millis() - tiempo de espera < para TIME_OUT) / /
{
ether.packetLoop(ether.packetReceive());
if(Millis() - TIME_cache > NET_TIME_INTERVAL) / /
{
ether.ntpRequest (ntpServer, srcPort);
TIME_cache = millis();
NET_TIME_reply = true; 标记发送
}
Si (NET_TIME_reply & & ether.ntpProcessAnswer (& timeStamp, srcPort)) / /
{
printDate (timeStamp + 3600 * TIME_ZONE); //
TIME_cache = millis();
NET_TIME_reply = false; //
}
}
}
void printDate (uint32_t timeStamp) {}
semana larga sin signo = (((timeStamp/3600/24)+1)%7);
Serial.Print ("fecha y hora actual:");
Serial.println(timestamp);
unsigned int año = START_YEAR;
{while(1)}
uint32_t segundos;
if(isLeapYear(Year)) segundos = SECONDS_IN_DAY * 366;
más segundos = SECONDS_IN_DAY * 365;
Si (fecha y hora > = segundos) {}
timeStamp = segundos;
año ++;
}
rotura del otro;
}
unsigned int mes = 0;
{while(1)}
segundos de uint32_t = SECONDS_IN_DAY * days_in_month [mes];
if(isLeapYear(Year) & & mes == 1) segundos = SECONDS_IN_DAY * 29;
Si (fecha y hora > = segundos) {}
timeStamp = segundos;
mes ++;
}
rotura del otro;
}
mes ++;
unsigned int dia = 1;
{while(1)}
Si (fecha y hora > = SECONDS_IN_DAY) {}
fecha y hora-= SECONDS_IN_DAY;
día ++;
}
rotura del otro;
}
unsigned int hora = hora / 3600;
unsigned int minutos = (fecha y hora - hora (uint32_t) * 3600) / 60;
unsigned int segundo = (fecha y hora - hora (uint32_t) * 3600) - minutos * 60;
Serial.Print ("semana:");
Serial.println(Week);
if(Day < 10) Serial.print("0");
Serial.Print(Day);
Serial.Print("/");
if(month < 10) Serial.print("0");
Serial.Print(month);
Serial.Print("/");
Serial.println(Year);
if(hour < 10) Serial.print("0");
Serial.Print(hour);
Serial.Print(":");
if(minute < 10) Serial.print("0");
Serial.Print(minute);
Serial.Print(":");
if(Second < 10) Serial.print("0");
Serial.println(Second);
Serial.println();
time_nian = año;
time_yue = mes;
time_ri = día;
time_shi = hora;
time_fen = minutos;
time_miao = segundo;
time_zhou = semana;
}
{} Boolean isLeapYear (unsigned int año)
volver (año % 4 == 0 & & (año % 100! = 0 || año % 400 == 0));
}
---------------------------