Advertisement
Guest User

Untitled

a guest
Oct 12th, 2016
162
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 5.16 KB | None | 0 0
  1. #include <Wire.h>
  2. #include <ESP8266WiFi.h>
  3. #include <NTP.h>
  4. #include <Time.h>
  5. #include <TimeLib.h>
  6. #include <LiquidCrystal_I2C.h>
  7. LiquidCrystal_I2C lcd(0x27 , 16, 2);//3F
  8. byte timecode[60];
  9. void setup() {
  10.     pinMode(14, OUTPUT) ;
  11.     Serial.begin(115200);
  12.     Wire.begin(0, 2); // (D3_0_SDA),(D4_2_SCL)
  13.     lcd.begin ();
  14.     lcd.print("Waite.....");
  15.     WiFi.begin("xxxxx", "xxxxx");
  16.     while (WiFi.status() != WL_CONNECTED) {
  17.         delay(500);
  18.         Serial.print(".");
  19.     }
  20.     lcd.clear();
  21.     Serial.println("");
  22.     Serial.println("WiFi connected");
  23.     lcd.print(WiFi.localIP());
  24.     Serial.println(WiFi.localIP());
  25.     delay(2000);
  26.     lcd.setBacklight(HIGH);
  27.     ntp_begin(2390); // 2390 はローカルのUDPポート。
  28.     lcd.clear();
  29. }
  30. void display_time() {
  31.     time_t n = now();
  32.     time_t t;
  33.     t = localtime(n, 9);
  34.     char s[10];
  35.     const char* format = "%02d/%02d/%02d";
  36.     sprintf(s, format, year(t), month(t), day(t));
  37.     lcd.setCursor (0, 0);
  38.     lcd.print(s);
  39.     char s1[14];
  40.     const char* format1 = "%02d:%02d:%02d";
  41.     sprintf(s1, format1, hour(t), minute(t), second(t));
  42.     lcd.setCursor(8, 1);
  43.     lcd.print(s1);
  44. }
  45. void loop() {
  46.     display_time();
  47.     my_TransmitJJY();
  48.     lcd.setCursor(0, 1);
  49.     lcd.print("JJY");
  50. }
  51. void my_TransmitJJY()
  52. {
  53.     int wait_start = second();
  54.     while (wait_start == second()); // wait until time is corrected
  55.     unsigned long startTime = millis(); // generate 40khz
  56.     tone(14, 80000); //40khz
  57.     int ms = calcTimeCodeDuration(); // wait ms and stop
  58.     while (millis() - startTime < ms);
  59.     noTone(14);
  60. }
  61. unsigned int calcTimeCodeDuration()
  62. {
  63.     int s = second();
  64.     if (s == 0)
  65.         setupTimeCode();
  66.     return timecode[s] * 100;
  67. }
  68. void setupTimeCode()
  69. {
  70.     int i;
  71.     memset(timecode, 8, sizeof(timecode));
  72.     setupTimeCode100(minute(), 0);
  73.     timecode[0] = 2;
  74.     setupTimeCode100(hour() + 9, 10);
  75.     int d = dayOfYear();
  76.     setupTimeCode100(d / 10, 20);
  77.     setupTimeCode100(d % 10 * 10, 30);
  78.     int parity1 = 0, parity2 = 0;
  79.     for (i = 12; i < 20; i++) parity1 ^= timecode[i] == 5;
  80.     for (i = 1; i < 10; i++) parity2 ^= timecode[i] == 5;
  81.     timecode[36] = parity1 ? 5 : 8;
  82.     timecode[37] = parity2 ? 5 : 8;
  83.     setupTimeCode100(year() % 100, 40);
  84.     for (i = 44; i > 40; i--)
  85.         timecode[i] = timecode[i - 1];
  86.     timecode[40] = 8;
  87.     int w = weekday() - 1;
  88.     timecode[50] = (w & 4) ? 5 : 8;
  89.     timecode[51] = (w & 2) ? 5 : 8;
  90.     timecode[52] = (w & 1) ? 5 : 8;
  91.     timecode[59] = 2;
  92. }
  93. void setupTimeCode100(int m, int i)
  94. {
  95.     timecode[i + 0] = ((m / 10) & 8) ? 5 : 8;
  96.     timecode[i + 1] = ((m / 10) & 4) ? 5 : 8;
  97.     timecode[i + 2] = ((m / 10) & 2) ? 5 : 8;
  98.     timecode[i + 3] = ((m / 10) & 1) ? 5 : 8;
  99.     timecode[i + 4] = 8;
  100.     timecode[i + 5] = ((m % 10) & 8) ? 5 : 8;
  101.     timecode[i + 6] = ((m % 10) & 4) ? 5 : 8;
  102.     timecode[i + 7] = ((m % 10) & 2) ? 5 : 8;
  103.     timecode[i + 8] = ((m % 10) & 1) ? 5 : 8;
  104.     timecode[i + 9] = 2;
  105. }
  106. int dayOfYear()
  107.     tmElements_t tm = {0, 0, 0, 0, 1, 1, CalendarYrToTm(year())};
  108. time_t t = makeTime(tm);
  109. return (now() - t) / SECS_PER_DAY + 1;
  110. }
  111. void my_TransmitJJY()
  112. {
  113.     int wait_start = second();
  114.     while (wait_start == second()); // wait until time is corrected
  115.     unsigned long startTime = millis(); // generate 40khz
  116.     tone(14, 80000); //40khz
  117.     int ms = calcTimeCodeDuration(); // wait ms and stop
  118.     while (millis() - startTime < ms);
  119.     noTone(14);
  120. }
  121. unsigned int calcTimeCodeDuration()
  122. {
  123.     int s = second();
  124.     if (s == 0)
  125.         setupTimeCode();
  126.     return timecode[s] * 100;
  127. }
  128. void setupTimeCode()
  129. {
  130.     int i;
  131.     memset(timecode, 8, sizeof(timecode));
  132.     setupTimeCode100(minute(), 0);
  133.     timecode[0] = 2;
  134.     setupTimeCode100(hour() + 9, 10);
  135.     int d = dayOfYear();
  136.     setupTimeCode100(d / 10, 20);
  137.     setupTimeCode100(d % 10 * 10, 30);
  138.     int parity1 = 0, parity2 = 0;
  139.     for (i = 12; i < 20; i++) parity1 ^= timecode[i] == 5;
  140.     for (i = 1; i < 10; i++) parity2 ^= timecode[i] == 5;
  141.     timecode[36] = parity1 ? 5 : 8;
  142.     timecode[37] = parity2 ? 5 : 8;
  143.     setupTimeCode100(year() % 100, 40);
  144.     for (i = 44; i > 40; i--)
  145.         timecode[i] = timecode[i - 1];
  146.     timecode[40] = 8;
  147.     int w = weekday() - 1;
  148.     timecode[50] = (w & 4) ? 5 : 8;
  149.     timecode[51] = (w & 2) ? 5 : 8;
  150.     timecode[52] = (w & 1) ? 5 : 8;
  151.     timecode[59] = 2;
  152. }
  153. void setupTimeCode100(int m, int i) {
  154.     timecode[i + 0] = ((m / 10) & 8) ? 5 : 8;
  155.     timecode[i + 1] = ((m / 10) & 4) ? 5 : 8;
  156.     timecode[i + 2] = ((m / 10) & 2) ? 5 : 8;
  157.     timecode[i + 3] = ((m / 10) & 1) ? 5 : 8;
  158.     timecode[i + 4] = 8;
  159.     timecode[i + 5] = ((m % 10) & 8) ? 5 : 8;
  160.     timecode[i + 6] = ((m % 10) & 4) ? 5 : 8;
  161.     timecode[i + 7] = ((m % 10) & 2) ? 5 : 8;
  162.     timecode[i + 8] = ((m % 10) & 1) ? 5 : 8;
  163.     timecode[i + 9] = 2;}
  164. int dayOfYear()
  165.     tmElements_t tm = {0, 0, 0, 0, 1, 1, CalendarYrToTm(year())};
  166. time_t t = makeTime(tm);
  167. return (now() - t) / SECS_PER_DAY + 1;}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement