// Hobby Projects // 30-08-2019 NodeMcu_NTP_Propeller_Clock. (using 44E/A3144 Hall Sensor) #include #include #include const char *ssid = "Your_SSID"; const char *password = "Your_PASSWORD"; const long utcOffsetInSeconds = 19800; // Calculating Time with Time Zones: https://docstore.mik.ua/orelly/webprog/pcook/ch03_12.htm int LED1 = D0; int LED2 = D1; int LED3 = D2; int LED4 = D3; int LED5 = D4; int LED6 = D5; int LED7 = D6; int LED8 = D8; int sensorPin = D7; byte Day,hours,minutes,seconds = 0; byte a,c,z = 0; unsigned int k,dl,nm; unsigned long tc,to = 0; int i,val; char s; const PROGMEM unsigned char data[]={ 0x3e,0x45,0x49,0x51,0x3e,0x00,0x00,0x21,0x7f,0x01,0x00,0x00,0x21,0x43,0x45,0x49,0x31,0x00,0x42,0x41,0x51,0x69,0x46,0x00, 0x0c,0x14,0x24,0x7f,0x04,0x00,0x72,0x51,0x51,0x51,0x5e,0x00,0x1e,0x29,0x49,0x49,0x06,0x00,0x40,0x47,0x48,0x50,0x60,0x00, 0x36,0x49,0x49,0x49,0x36,0x00,0x30,0x49,0x49,0x4a,0x3c,0x00,0x00,0x36,0x36,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x31,0x49,0x49,0x49,0x46,0x00,0x1e,0x01,0x01,0x02,0x1f,0x00,0x1f,0x08,0x10,0x10,0x0f,0x00,0x0e,0x11,0x11,0x09,0x7f,0x00, 0x02,0x15,0x15,0x15,0x0f,0x00,0x18,0x05,0x05,0x05,0x1e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x7f,0x20,0x18,0x20,0x7f,0x00,0x0e,0x11,0x11,0x11,0x0e,0x00,0x1f,0x08,0x10,0x10,0x0f,0x00, 0x0e,0x11,0x11,0x09,0x7f,0x00,0x02,0x15,0x15,0x15,0x0f,0x00,0x18,0x05,0x05,0x05,0x1e,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x40,0x7f,0x40,0x40,0x00,0x1e,0x01,0x01,0x02,0x1f,0x00, 0x0e,0x15,0x15,0x15,0x0c,0x00,0x09,0x15,0x15,0x15,0x02,0x00,0x0e,0x11,0x11,0x09,0x7f,0x00,0x02,0x15,0x15,0x15,0x0f,0x00, 0x18,0x05,0x05,0x05,0x1e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7e,0x01,0x0e,0x01,0x7e,0x00,0x0e,0x15,0x15,0x15,0x0c,0x00, 0x0e,0x11,0x11,0x09,0x7f,0x00,0x1f,0x08,0x10,0x10,0x0f,0x00,0x0e,0x15,0x15,0x15,0x0c,0x00,0x09,0x15,0x15,0x15,0x02,0x00, 0x0e,0x11,0x11,0x09,0x7f,0x00,0x02,0x15,0x15,0x15,0x0f,0x00,0x18,0x05,0x05,0x05,0x1e,0x00,0x40,0x40,0x7f,0x40,0x40,0x00, 0x7f,0x08,0x10,0x10,0x0f,0x00,0x1e,0x01,0x01,0x02,0x1f,0x00,0x1f,0x08,0x10,0x10,0x08,0x00,0x09,0x15,0x15,0x15,0x02,0x00, 0x0e,0x11,0x11,0x09,0x7f,0x00,0x02,0x15,0x15,0x15,0x0f,0x00,0x18,0x05,0x05,0x05,0x1e,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x7f,0x48,0x48,0x48,0x40,0x00,0x1f,0x08,0x10,0x10,0x08,0x00,0x00,0x11,0x5f,0x01,0x00,0x00, 0x0e,0x11,0x11,0x09,0x7f,0x00,0x02,0x15,0x15,0x15,0x0f,0x00,0x18,0x05,0x05,0x05,0x1e,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x31,0x49,0x49,0x49,0x46,0x00,0x02,0x15,0x15,0x15,0x0f,0x00,0x10,0x7e,0x11,0x01,0x02,0x00, 0x1e,0x01,0x01,0x02,0x1f,0x00,0x1f,0x08,0x10,0x10,0x08,0x00,0x0e,0x11,0x11,0x09,0x7f,0x00,0x02,0x15,0x15,0x15,0x0f,0x00, 0x18,0x05,0x05,0x05,0x1e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7e,0x01,0x0e,0x01,0x7e,0x00, 0x0e,0x15,0x15,0x15,0x0c,0x00,0x00,0x41,0x7f,0x01,0x00,0x00,0x0e,0x11,0x11,0x11,0x02,0x00,0x0e,0x11,0x11,0x11,0x0e,0x00, 0x1f,0x10,0x0c,0x10,0x0f,0x00,0x0e,0x15,0x15,0x15,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7e,0x01,0x0e,0x01,0x7e,0x00, 0x7e,0x01,0x0e,0x01,0x7e,0x00,0x7e,0x01,0x0e,0x01,0x7e,0x00,0x00,0x03,0x03,0x00,0x00,0x00,0x7f,0x08,0x10,0x10,0x0f,0x00, 0x0e,0x11,0x11,0x11,0x0e,0x00,0x7f,0x09,0x11,0x11,0x0e,0x00,0x7f,0x09,0x11,0x11,0x0e,0x00,0x18,0x05,0x05,0x05,0x1e,0x00, 0x1f,0x14,0x14,0x14,0x08,0x00,0x1f,0x08,0x10,0x10,0x08,0x00,0x0e,0x11,0x11,0x11,0x0e,0x00,0x02,0x01,0x11,0x5e,0x00,0x00, 0x0e,0x15,0x15,0x15,0x0c,0x00,0x0e,0x11,0x11,0x11,0x02,0x00,0x10,0x7e,0x11,0x01,0x02,0x00,0x09,0x15,0x15,0x15,0x02,0x00, 0x00,0x03,0x03,0x00,0x00,0x00,0x0e,0x11,0x11,0x11,0x02,0x00,0x0e,0x11,0x11,0x11,0x0e,0x00,0x1f,0x10,0x0c,0x10,0x0f,0x00}; WiFiUDP ntpUDP; NTPClient timeClient(ntpUDP, "pool.ntp.org", utcOffsetInSeconds); void setup(){ pinMode(LED1,OUTPUT); pinMode(LED2,OUTPUT); pinMode(LED3,OUTPUT); pinMode(LED4,OUTPUT); pinMode(LED5,OUTPUT); pinMode(LED6,OUTPUT); pinMode(LED7,OUTPUT); pinMode(LED8,OUTPUT); pinMode(sensorPin,INPUT_PULLUP); Serial.begin(9600); WiFi.begin(ssid, password); while ( WiFi.status() != WL_CONNECTED ) { delay ( 500 ); Serial.print ( "." ); digitalWrite(LED2,HIGH); delay(250); digitalWrite(LED2,LOW); delay(250); } timeClient.begin(); update_time(); Serial.println(timeClient.getFormattedTime()); attachInterrupt(digitalPinToInterrupt(sensorPin),usdl,RISING); } void loop() { if(z == 0) { val = digitalRead(sensorPin); if(val == LOW) { z = 1; update_time(); k = Day * 54; i = 0; while(i < 54) { c = (pgm_read_byte(&(data+k+66)[i])); display_col(); delayMicroseconds(dl); displayClear(); delayMicroseconds(dl*2); i++; } delayMicroseconds(dl*45); nm = seconds; nm = nm%10; display1(); delayMicroseconds(dl*2); nm = seconds/10; nm = nm%10; display1(); delayMicroseconds(dl*2); nm = 10; display1(); delayMicroseconds(dl*2); nm = minutes; nm = nm%10; display1(); delayMicroseconds(dl*2); nm = minutes/10; nm = nm%10; display1(); delayMicroseconds(dl*2); nm = 10; display1(); delayMicroseconds(dl*2); nm = hours; nm = nm%10; display1(); delayMicroseconds(dl*2); nm = hours/10; nm = nm%10; display1(); } } if(z == 1) { val = digitalRead(sensorPin); if(val == HIGH) { z = 0; } } } void display1() { k = nm*6; i = 5; while(i >= 0) { c = (pgm_read_byte(&(data+k)[i])); s=0; for(a = 0; a < 8; a++) { s <<= 1; s |= c & 1; c >>= 1; } s >>= 1; c = s; display_col(); delayMicroseconds(dl); displayClear(); delayMicroseconds(dl*2); i--; } } void displayClear() { digitalWrite(LED1,LOW); digitalWrite(LED2,LOW); digitalWrite(LED3,LOW); digitalWrite(LED4,LOW); digitalWrite(LED5,LOW); digitalWrite(LED6,LOW); digitalWrite(LED7,LOW); digitalWrite(LED8,LOW); } void display_col() { if(c & 1) digitalWrite(LED2,HIGH); else digitalWrite(LED2,LOW); if(c & 2) digitalWrite(LED3,HIGH); else digitalWrite(LED3,LOW); if(c & 4) digitalWrite(LED4,HIGH); else digitalWrite(LED4,LOW); if(c & 8) digitalWrite(LED5,HIGH); else digitalWrite(LED5,LOW); if(c & 16) digitalWrite(LED6,HIGH); else digitalWrite(LED6,LOW); if(c & 32) digitalWrite(LED7,HIGH); else digitalWrite(LED7,LOW); if(c & 64) digitalWrite(LED8,HIGH); else digitalWrite(LED8,LOW); } void update_time() { timeClient.update(); Day = timeClient.getDay(); hours=timeClient.getHours(); minutes=(timeClient.getMinutes()); seconds=(timeClient.getSeconds()); } void usdl() { tc = micros()-to; to = micros(); dl = tc/450; }