Closed. This question is not about programming or software development. It is not currently accepting answers.
This question does not appear to be about a specific programming problem, a software algorithm, or software tools primarily used by programmers. You can edit the question so it's on-topic or see if it can be answered on another Stack Exchange site, but be sure to read the on-topic page for a site before posting there.
Closed 3 days ago.
Edit questionDelete question
I am working on a project where I need to interface RTC Ds3231 with the esp32 and then display the time on 4 digit 7 segment.
Now, this seems a pretty much straight forward and easy task and everything works fine until the esp32 is powered using an external power supply say mobile charger of 5v2amp.
When esp32 is powered externally it starts loosing time. The time loss always varies but for a general concept 5-10 minutes over 1 hour are lost.
programming of the Esp32 is As Follows
#include "RTClib.h"
RTC_DS3231 rtc;
char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
//For 7 Segment
int A = 14;
int B = 13 ;
int C = 27;
int D = 26;
int E = 25;
int F = 33;
int G =12;
int D1 = 4; //DIGIT 1 ON PIN 1
int D2 = 5;
int D3 = 18;
int D4 = 19;
long starttimeforserial = 0;
boolean ftime = true;
long starttime = 0;
int h1;
int h2;
int m1;
int m2;
void setup()
{
pinMode(A,OUTPUT);
pinMode(B,OUTPUT);
pinMode(C,OUTPUT);
pinMode(D,OUTPUT);
pinMode(E,OUTPUT);
pinMode(F,OUTPUT);
pinMode(G,OUTPUT);
pinMode(D1,OUTPUT);
pinMode(D2,OUTPUT);
pinMode(D3,OUTPUT);
pinMode(D4,OUTPUT);
Serial.begin(115200);
if (! rtc.begin()) {
Serial.println("Couldn't find RTC");
while (1);
}
rtc.adjust(DateTime(__DATE__, __TIME__));
Serial.print(" Clock ");
delay(3000);
}
void loop()
{
DateTime now = rtc.now();
Serial.print("Second: ");
Serial.println(now.second(), DEC);
Serial.print("Minutes; ");
Serial.println(now.minute(), DEC);
Serial.print("Hour: ");
Serial.println(now.hour(), DEC);
Serial.print("Days");
Serial.println(now.day(), DEC);
Serial.println(now.year(), DEC);
Serial.print(daysOfTheWeek[now.dayOfTheWeek()]);
Serial.println("");
printLocalTime();
}
void Segment_7(int a, int b,int c, int d)
{
int x[4];
x[0] =a; x[1]=b; x[2] =c; x[3] =d;
for(int i=0;i<=3;i++)
{
if(i==0){digitalWrite(D1, LOW);}
else if(i==1){digitalWrite(D2, LOW);}
else if(i==2){digitalWrite(D3, LOW);}
else if(i==3){digitalWrite(D4, LOW);}
switch(x[i]){
//0
case 0:
digitalWrite(A,HIGH);
digitalWrite(B,HIGH);
digitalWrite(C,HIGH);
digitalWrite(D,HIGH);
digitalWrite(E,HIGH);
digitalWrite(F,HIGH);
break;
//1
case 1:
digitalWrite(B,HIGH);
digitalWrite(C,HIGH);
break;
case 2:
digitalWrite(A,HIGH);
digitalWrite(B,HIGH);
digitalWrite(G,HIGH);
digitalWrite(E,HIGH);
digitalWrite(D,HIGH);
break;
case 3:
digitalWrite(A,HIGH);
digitalWrite(B,HIGH);
digitalWrite(C,HIGH);
digitalWrite(D,HIGH);
digitalWrite(G,HIGH);
break;
case 4:
digitalWrite(F,HIGH);
digitalWrite(G,HIGH);
digitalWrite(B,HIGH);
digitalWrite(C,HIGH);
break;
case 5:
digitalWrite(A,HIGH);
digitalWrite(F,HIGH);
digitalWrite(G,HIGH);
digitalWrite(C,HIGH);
digitalWrite(D,HIGH);
break;
case 6:
digitalWrite(A,HIGH);
digitalWrite(F,HIGH);
digitalWrite(E,HIGH);
digitalWrite(G,HIGH);
digitalWrite(D,HIGH);
digitalWrite(C,HIGH);
break;
case 7:
digitalWrite(A,HIGH);
digitalWrite(B,HIGH);
digitalWrite(C,HIGH);
break;
case 8:
digitalWrite(A,HIGH);
digitalWrite(B,HIGH);
digitalWrite(C,HIGH);
digitalWrite(D,HIGH);
digitalWrite(E,HIGH);
digitalWrite(F,HIGH);
digitalWrite(G,HIGH);
break;
case 9:
digitalWrite(A,HIGH);
digitalWrite(F,HIGH);
digitalWrite(G,HIGH);
digitalWrite(B,HIGH);
digitalWrite(C,HIGH);
digitalWrite(D,HIGH);
break;
}
delayMicroseconds(700);
digitalWrite(D1, HIGH);
digitalWrite(D2, HIGH);
digitalWrite(D3, HIGH);
digitalWrite(D4, HIGH);
digitalWrite(A,LOW);
digitalWrite(B,LOW);
digitalWrite(C,LOW);
digitalWrite(D,LOW);
digitalWrite(E,LOW);
digitalWrite(F,LOW);
digitalWrite(G,LOW);
}
}
void printLocalTime()
{
DateTime now = rtc.now();
if((millis()-starttimeforserial)>1000)
{
starttimeforserial = millis();
Serial.print("RTC DateTime: ");
//delay(1000);
if(millis()-starttime>200)
{
starttime =millis();
if(now.hour()>9)
{
String temp = String(now.hour());
char temp1 = temp.charAt(0);
char temp2 = temp.charAt(1);
h1 = temp1- '0';
h2 = temp2 - '0';
Serial.printf("h1 & h2 are => %d, %d \n", h1, h2);
}
else
{
String temp = String(now.hour());
char temp1 = temp.charAt(0);
char temp2 = temp.charAt(1);
h1 = 0;
h2 = temp1 - '0';
}
if((now.minute())>9)
{
String temp = String(now.minute());
char temp1 = temp.charAt(0);
char temp2 = temp.charAt(1);
m1= temp1 - '0';
m2 = temp2 - '0';
Serial.printf("m1 & m2 are => %d, %d \n", m1, m2);
}
else
{
String temp = String(now.minute());
char temp1 = temp.charAt(0);
char temp2 = temp.charAt(1);
m1= 0;
m2 = temp1 - '0';
Serial.printf("m1 & m2 are => %d, %d \n", m1, m2);
}
}
}
Segment_7(h1,h2,m1,m2);
}

