蛍光表示管プロジェクト NTP連携できたよの話
チャオチャオ!
久しぶりになりましたけれど、Twitter facebook的には適宜報告中でした。
ということで今日は蛍光表示管プロジェクト(今回初めて出してみた)の経過報告をします!
先に表示まで出来ましたっと報告しました。
蛍光表示管を使う話(2017年3月20日)
っと、今回は手っ取り早く、NTPサーバーまで接続出来ました!
いらないソースを入れて、こんな感じ。
# NTPサーバとの接続周りで現在不具合発生中のため。
#include#define PIN_a 2 #define PIN_b 3 #define PIN_c 4 #define PIN_d 5 #define PIN_e 6 #define PIN_f 7 #define PIN_g 8 #define PIN_dot 9 #define PIN_q1 A0 #define PIN_q2 A1 #define PIN_q3 A2 #define PIN_q4 A3 #define PIN_q5 A4 #define PIN_q6 A5 long timeZoneOffset = 9 * 3600L; static byte ntpServer[] = {202, 234, 233, 109}; static byte mymac[] = { 0x74, 0x69, 0x69, 0x2D, 0x30, 0x31 }; //Change this in a unique mac adres for your network byte Ethernet::buffer[700]; unsigned long unixtime = 0L; unsigned int timeDelay = 0; long lastUpdate = 0L; unsigned long lastNtpAccessTime = 0L; unsigned long ntpAccessDelay = 5 * 60L; void setup () { Serial.begin(115200); pinMode(PIN_a, OUTPUT); pinMode(PIN_b, OUTPUT); pinMode(PIN_c, OUTPUT); pinMode(PIN_d, OUTPUT); pinMode(PIN_e, OUTPUT); pinMode(PIN_f, OUTPUT); pinMode(PIN_g, OUTPUT); pinMode(PIN_dot, OUTPUT); pinMode(PIN_q6, OUTPUT); pinMode(PIN_q5, OUTPUT); pinMode(PIN_q4, OUTPUT); pinMode(PIN_q3, OUTPUT); pinMode(PIN_q2, OUTPUT); pinMode(PIN_q1, OUTPUT); resetNumber(); analogWrite(PIN_q1, 0); analogWrite(PIN_q2, 0); analogWrite(PIN_q3, 0); analogWrite(PIN_q4, 0); analogWrite(PIN_q5, 0); analogWrite(PIN_q6, 0); Serial.print("MAC: "); for (byte i = 0; i < 6; ++i) { Serial.print(mymac[i], HEX); if (i < 5) Serial.print(':'); } Serial.println(); int i = 1; int DHCP = 0; //Try to get dhcp settings 3 times before giving up Serial.println("Resolve dhcp ..."); while ( DHCP == 0 && i < 3) { Serial.print("Trying to resolve DHCP attempt nr. "); Serial.println(i); DHCP = ether.begin(sizeof Ethernet::buffer, mymac); delay(1000); i++; } //Serial.println(F("Setting up DHCP")); if (!ether.dhcpSetup()) { Serial.println(F("DHCP failed")); } ether.printIp(ether.myip); Serial.println(); unixtime = getNtpTime(); lastNtpAccessTime = unixtime; Serial.println(); printTimestamp(unixtime); Serial.print('('); printTimestamp((lastNtpAccessTime + ntpAccessDelay) ); Serial.print(')'); } unsigned long getNtpTime() { unsigned long timeFromNTP = unixtime; const unsigned long seventy_years = 2208988800UL; unsigned long processDelay = millis(); Serial.print(unixtime); Serial.print(" "); timeFromNTP = unixtime; Serial.print("Server:"); for (byte i = 0; i < 4; ++i) { Serial.print(ntpServer[i], DEC); if (i < 3) Serial.print('.'); } Serial.println(); for (int i = 0 ; i < 60 ; i ++) { ether.ntpRequest(ntpServer, 123); analogWrite(PIN_q2, 0); analogWrite(PIN_q3, 0); analogWrite(PIN_q4, 0); analogWrite(PIN_q5, 0); analogWrite(PIN_q6, 0); resetNumber(); if (i % 2 == 0) { analogWrite(PIN_q1, 1023); digitalWrite(PIN_dot, HIGH); } else { analogWrite(PIN_q1, 0); digitalWrite(PIN_dot, LOW); } Serial.print("."); int length = ether.packetReceive(); ether.packetLoop(length); Serial.print("["); Serial.print(length); Serial.print("]"); if ( ether.ntpProcessAnswer(&timeFromNTP, 0)) { Serial.print(" : NTP reply received : "); Serial.println(timeFromNTP); return timeFromNTP; } delay(500); } Serial.println("NTP reply failed"); Serial.println(millis() - processDelay); return unixtime + millis() - processDelay; } void loop() { writeNumber(PIN_q1, getSecound() % 10); writeNumber(PIN_q2, getSecound() / 10L); writeNumber(PIN_q3, getMinute() % 10); writeNumber(PIN_q4, getMinute() / 10L); writeNumber(PIN_q5, getHour() % 10); writeNumber(PIN_q6, getHour() / 10L); if ((millis() - lastUpdate) >= 1000) { unixtime += 1; lastUpdate = millis(); } if (( unixtime - lastNtpAccessTime) >= ntpAccessDelay) { unixtime = getNtpTime(); lastNtpAccessTime = unixtime; printTimestamp(lastNtpAccessTime); Serial.print('('); printTimestamp((lastNtpAccessTime + ntpAccessDelay) ); Serial.print(')'); } delay(5); } unsigned long getUnixTime() { return unixtime + timeZoneOffset; } long getSecound() { long secound = getUnixTime() % 60L ; return secound; } long getMinute() { long minute = (getUnixTime() / 60L) % 60L; return minute; } long getHour() { long hour = ((getUnixTime() / (60L * 60L))) % 24L; return hour; } void printTimestamp(unsigned long time) { Serial.print(((time / (60L * 60L)) + 9) % 24L); Serial.print(":"); Serial.print((time / 60L) % 60L); Serial.print(":"); Serial.print( time % 60L ); } void writeNumber(int pin, int num) { analogWrite(pin, 1023); writeNumber(num); delay(1); digitalWrite(pin, LOW); } void writeNumber(int num) { switch (num) { case 0 : digitalWrite(PIN_a, HIGH); digitalWrite(PIN_b, HIGH); digitalWrite(PIN_c, HIGH); digitalWrite(PIN_d, HIGH); digitalWrite(PIN_e, HIGH); digitalWrite(PIN_f, HIGH); digitalWrite(PIN_g, LOW); return ; case 1 : digitalWrite(PIN_a, LOW); digitalWrite(PIN_b, HIGH); digitalWrite(PIN_c, HIGH); digitalWrite(PIN_d, LOW); digitalWrite(PIN_e, LOW); digitalWrite(PIN_f, LOW); digitalWrite(PIN_g, LOW); return ; case 2 : digitalWrite(PIN_a, HIGH); digitalWrite(PIN_b, HIGH); digitalWrite(PIN_c, LOW); digitalWrite(PIN_d, HIGH); digitalWrite(PIN_e, HIGH); digitalWrite(PIN_f, LOW); digitalWrite(PIN_g, HIGH); return ; case 3 : digitalWrite(PIN_a, HIGH); digitalWrite(PIN_b, HIGH); digitalWrite(PIN_c, HIGH); digitalWrite(PIN_d, HIGH); digitalWrite(PIN_e, LOW); digitalWrite(PIN_f, LOW); digitalWrite(PIN_g, HIGH); return ; case 4 : digitalWrite(PIN_a, LOW); digitalWrite(PIN_b, HIGH); digitalWrite(PIN_c, HIGH); digitalWrite(PIN_d, LOW); digitalWrite(PIN_e, LOW); digitalWrite(PIN_f, HIGH); digitalWrite(PIN_g, HIGH); return ; case 5 : digitalWrite(PIN_a, HIGH); digitalWrite(PIN_b, LOW); digitalWrite(PIN_c, HIGH); digitalWrite(PIN_d, HIGH); digitalWrite(PIN_e, LOW); digitalWrite(PIN_f, HIGH); digitalWrite(PIN_g, HIGH); return ; case 6 : digitalWrite(PIN_a, HIGH); digitalWrite(PIN_b, LOW); digitalWrite(PIN_c, HIGH); digitalWrite(PIN_d, HIGH); digitalWrite(PIN_e, HIGH); digitalWrite(PIN_f, HIGH); digitalWrite(PIN_g, HIGH); return ; case 7 : digitalWrite(PIN_a, HIGH); digitalWrite(PIN_b, HIGH); digitalWrite(PIN_c, HIGH); digitalWrite(PIN_d, LOW); digitalWrite(PIN_e, LOW); digitalWrite(PIN_f, HIGH); digitalWrite(PIN_g, LOW); return ; case 8 : digitalWrite(PIN_a, HIGH); digitalWrite(PIN_b, HIGH); digitalWrite(PIN_c, HIGH); digitalWrite(PIN_d, HIGH); digitalWrite(PIN_e, HIGH); digitalWrite(PIN_f, HIGH); digitalWrite(PIN_g, HIGH); return ; case 9 : digitalWrite(PIN_a, HIGH); digitalWrite(PIN_b, HIGH); digitalWrite(PIN_c, HIGH); digitalWrite(PIN_d, LOW); digitalWrite(PIN_e, LOW); digitalWrite(PIN_f, HIGH); digitalWrite(PIN_g, HIGH); return ; } return ; } void resetNumber() { digitalWrite(PIN_a, LOW); digitalWrite(PIN_b, LOW); digitalWrite(PIN_c, LOW); digitalWrite(PIN_d, LOW); digitalWrite(PIN_e, LOW); digitalWrite(PIN_f, LOW); digitalWrite(PIN_g, LOW); }