Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <Wire.h>
- #include <ESP8266WiFi.h>
- #include <NTP.h>
- #include <Time.h>
- #include <TimeLib.h>
- #include <LiquidCrystal_I2C.h>
- LiquidCrystal_I2C lcd(0x27 , 16, 2);//3F
- byte timecode[60];
- void setup() {
- pinMode(14, OUTPUT) ;
- Serial.begin(115200);
- Wire.begin(0, 2); // (D3_0_SDA),(D4_2_SCL)
- lcd.begin ();
- lcd.print("Waite.....");
- WiFi.begin("xxxxx", "xxxxx");
- while (WiFi.status() != WL_CONNECTED) {
- delay(500);
- Serial.print(".");
- }
- lcd.clear();
- Serial.println("");
- Serial.println("WiFi connected");
- lcd.print(WiFi.localIP());
- Serial.println(WiFi.localIP());
- delay(2000);
- lcd.setBacklight(HIGH);
- ntp_begin(2390); // 2390 はローカルのUDPポート。
- lcd.clear();
- }
- void display_time() {
- time_t n = now();
- time_t t;
- t = localtime(n, 9);
- char s[10];
- const char* format = "%02d/%02d/%02d";
- sprintf(s, format, year(t), month(t), day(t));
- lcd.setCursor (0, 0);
- lcd.print(s);
- char s1[14];
- const char* format1 = "%02d:%02d:%02d";
- sprintf(s1, format1, hour(t), minute(t), second(t));
- lcd.setCursor(8, 1);
- lcd.print(s1);
- }
- void loop() {
- display_time();
- my_TransmitJJY();
- lcd.setCursor(0, 1);
- lcd.print("JJY");
- }
- void my_TransmitJJY()
- {
- int wait_start = second();
- while (wait_start == second()); // wait until time is corrected
- unsigned long startTime = millis(); // generate 40khz
- tone(14, 80000); //40khz
- int ms = calcTimeCodeDuration(); // wait ms and stop
- while (millis() - startTime < ms);
- noTone(14);
- }
- unsigned int calcTimeCodeDuration()
- {
- int s = second();
- if (s == 0)
- setupTimeCode();
- return timecode[s] * 100;
- }
- void setupTimeCode()
- {
- int i;
- memset(timecode, 8, sizeof(timecode));
- setupTimeCode100(minute(), 0);
- timecode[0] = 2;
- setupTimeCode100(hour() + 9, 10);
- int d = dayOfYear();
- setupTimeCode100(d / 10, 20);
- setupTimeCode100(d % 10 * 10, 30);
- int parity1 = 0, parity2 = 0;
- for (i = 12; i < 20; i++) parity1 ^= timecode[i] == 5;
- for (i = 1; i < 10; i++) parity2 ^= timecode[i] == 5;
- timecode[36] = parity1 ? 5 : 8;
- timecode[37] = parity2 ? 5 : 8;
- setupTimeCode100(year() % 100, 40);
- for (i = 44; i > 40; i--)
- timecode[i] = timecode[i - 1];
- timecode[40] = 8;
- int w = weekday() - 1;
- timecode[50] = (w & 4) ? 5 : 8;
- timecode[51] = (w & 2) ? 5 : 8;
- timecode[52] = (w & 1) ? 5 : 8;
- timecode[59] = 2;
- }
- void setupTimeCode100(int m, int i)
- {
- timecode[i + 0] = ((m / 10) & 8) ? 5 : 8;
- timecode[i + 1] = ((m / 10) & 4) ? 5 : 8;
- timecode[i + 2] = ((m / 10) & 2) ? 5 : 8;
- timecode[i + 3] = ((m / 10) & 1) ? 5 : 8;
- timecode[i + 4] = 8;
- timecode[i + 5] = ((m % 10) & 8) ? 5 : 8;
- timecode[i + 6] = ((m % 10) & 4) ? 5 : 8;
- timecode[i + 7] = ((m % 10) & 2) ? 5 : 8;
- timecode[i + 8] = ((m % 10) & 1) ? 5 : 8;
- timecode[i + 9] = 2;
- }
- int dayOfYear()
- tmElements_t tm = {0, 0, 0, 0, 1, 1, CalendarYrToTm(year())};
- time_t t = makeTime(tm);
- return (now() - t) / SECS_PER_DAY + 1;
- }
- void my_TransmitJJY()
- {
- int wait_start = second();
- while (wait_start == second()); // wait until time is corrected
- unsigned long startTime = millis(); // generate 40khz
- tone(14, 80000); //40khz
- int ms = calcTimeCodeDuration(); // wait ms and stop
- while (millis() - startTime < ms);
- noTone(14);
- }
- unsigned int calcTimeCodeDuration()
- {
- int s = second();
- if (s == 0)
- setupTimeCode();
- return timecode[s] * 100;
- }
- void setupTimeCode()
- {
- int i;
- memset(timecode, 8, sizeof(timecode));
- setupTimeCode100(minute(), 0);
- timecode[0] = 2;
- setupTimeCode100(hour() + 9, 10);
- int d = dayOfYear();
- setupTimeCode100(d / 10, 20);
- setupTimeCode100(d % 10 * 10, 30);
- int parity1 = 0, parity2 = 0;
- for (i = 12; i < 20; i++) parity1 ^= timecode[i] == 5;
- for (i = 1; i < 10; i++) parity2 ^= timecode[i] == 5;
- timecode[36] = parity1 ? 5 : 8;
- timecode[37] = parity2 ? 5 : 8;
- setupTimeCode100(year() % 100, 40);
- for (i = 44; i > 40; i--)
- timecode[i] = timecode[i - 1];
- timecode[40] = 8;
- int w = weekday() - 1;
- timecode[50] = (w & 4) ? 5 : 8;
- timecode[51] = (w & 2) ? 5 : 8;
- timecode[52] = (w & 1) ? 5 : 8;
- timecode[59] = 2;
- }
- void setupTimeCode100(int m, int i) {
- timecode[i + 0] = ((m / 10) & 8) ? 5 : 8;
- timecode[i + 1] = ((m / 10) & 4) ? 5 : 8;
- timecode[i + 2] = ((m / 10) & 2) ? 5 : 8;
- timecode[i + 3] = ((m / 10) & 1) ? 5 : 8;
- timecode[i + 4] = 8;
- timecode[i + 5] = ((m % 10) & 8) ? 5 : 8;
- timecode[i + 6] = ((m % 10) & 4) ? 5 : 8;
- timecode[i + 7] = ((m % 10) & 2) ? 5 : 8;
- timecode[i + 8] = ((m % 10) & 1) ? 5 : 8;
- timecode[i + 9] = 2;}
- int dayOfYear()
- tmElements_t tm = {0, 0, 0, 0, 1, 1, CalendarYrToTm(year())};
- time_t t = makeTime(tm);
- return (now() - t) / SECS_PER_DAY + 1;}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement