チャオチャオ!
久しぶりになりましたけれど、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);
}