// Hobby Projects // NodemcuNtpPropAnaClock041019A.ino #include #include #include const char *ssid = "Your Router SSID Name"; const char *password = "Your_Router_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 hours = 12; byte minutes = 15; byte seconds = 30; byte hours_analog; byte Day; byte z = 0; unsigned int n,dl,propeller_posn; unsigned long tc,to,previousTime = 0; int val; WiFiUDP ntpUDP; NTPClient timeClient(ntpUDP, "pool.ntp.org", utcOffsetInSeconds, 300000); 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); digitalWrite(LED1,HIGH); pinMode(sensorPin,INPUT_PULLUP); if(hours > 11) hours_analog = hours - 12; else hours_analog = hours; 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,FALLING); } void loop() { if(z == 0) { val = digitalRead(sensorPin); if(val == LOW) { z = 1; update_time(); propeller_posn=45; n=0; while(n < 60) { drawMinuteMarker(); if ((propeller_posn==0) || (propeller_posn==5) || (propeller_posn==10) || (propeller_posn==15) || (propeller_posn==20) || (propeller_posn==25) || (propeller_posn==30) || (propeller_posn==35) || (propeller_posn==40) || (propeller_posn==45) || (propeller_posn==50) || (propeller_posn==55)) drawHourMarker(); if ((propeller_posn==0) || (propeller_posn==15) || (propeller_posn==30) || (propeller_posn==45)) drawQuarterMarker(); if(propeller_posn == hours_analog*5 - 1) digitalWrite(LED2,HIGH); if((propeller_posn == hours_analog*5) || (( propeller_posn == 0 ) && (hours_analog == 0))) drawHoursHand(); if(propeller_posn == hours_analog*5 + 1) digitalWrite(LED2,HIGH); if((propeller_posn == 59) && (hours_analog*5 == 0)) digitalWrite(LED2,HIGH); if(propeller_posn == minutes-1) digitalWrite(LED3,HIGH); if(propeller_posn == minutes) drawMinutesHand(); if(propeller_posn == minutes+1) digitalWrite(LED3,HIGH); if((propeller_posn == 0) && (minutes == 59)) digitalWrite(LED3,HIGH); if((propeller_posn == 59) && (minutes == 0)) digitalWrite(LED3,HIGH); if(propeller_posn == seconds-1) digitalWrite(LED4,HIGH); if(propeller_posn == seconds) drawSecondsHand(); if(propeller_posn == seconds+1) digitalWrite(LED4,HIGH); if((propeller_posn == 0) && (seconds == 59)) digitalWrite(LED4,HIGH); if((propeller_posn == 59) && (seconds == 0)) digitalWrite(LED4,HIGH); delayMicroseconds(dl); displayClear(); if(propeller_posn != 44) //delayMicroseconds(dl/5); //else delayMicroseconds(dl*4); n++; propeller_posn++; if(propeller_posn == 60) propeller_posn=0; } } } if(z == 1) { val = digitalRead(sensorPin); if(val == HIGH) { z = 0; } } } void displayClear() { digitalWrite(LED1,HIGH); digitalWrite(LED2,LOW); digitalWrite(LED3,LOW); digitalWrite(LED4,LOW); digitalWrite(LED5,LOW); digitalWrite(LED6,LOW); digitalWrite(LED7,LOW); digitalWrite(LED8,LOW); } void drawMinuteMarker() { digitalWrite(LED8,HIGH); } void drawHourMarker() { digitalWrite(LED7,HIGH); } void drawQuarterMarker() { digitalWrite(LED6,HIGH); } void drawHoursHand() { digitalWrite(LED1,LOW); digitalWrite(LED2,HIGH); digitalWrite(LED3,HIGH); } void drawMinutesHand() { digitalWrite(LED1,LOW); digitalWrite(LED2,HIGH); digitalWrite(LED3,HIGH); digitalWrite(LED4,HIGH); } void drawSecondsHand() { digitalWrite(LED1,LOW); digitalWrite(LED2,HIGH); digitalWrite(LED3,HIGH); digitalWrite(LED4,HIGH); digitalWrite(LED5,HIGH); } void update_time() { timeClient.update(); Day = timeClient.getDay(); hours=timeClient.getHours(); if(hours > 11) hours_analog = hours - 12; else hours_analog = hours; minutes=(timeClient.getMinutes()); seconds=(timeClient.getSeconds()); } void usdl() { tc = micros()-to; to = micros(); dl = tc/307; }