Hello
I don't know if this is programming question or hardware but I'm 99% sure that is a programming question that is why i'm post it here.
So my problem is that program works of some time and after around 12 hours Arduino is kind a stops looping and it block.
Every 6B595 are connected to one 7 segment LED display to control it.
I'm attaching my scheme too.
Here is the code:
#include <SoftwareSerial.h>
#include <TinyGPS.h>
#include <TimeLib.h>
#include <Wire.h>
#include <DallasTemperature.h>
#include <EEPROM.h>
#include <OneWire.h>
#include <Adafruit_Sensor.h>
#include <DHT.h>
#include <DHT_U.h>
#include <DS1307RTC.h>
#include "lastSunday.h"
const int clockPin = 13;
const int latchPin = 10;
const int dataPin = 12;
//temp object - sensors
#define ONE_WIRE_BUS 2 //temperature pin
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
//DHT11 sensor
#define DHTPIN 3 // Pin which is connected to the DHT sensor.
#define DHTTYPE DHT11 // DHT 11
DHT_Unified dht(DHTPIN, DHTTYPE);
//gps object - gps
TinyGPS gps;
//gps data object
SoftwareSerial dataObj(5, 4);
int correctTime();
//creating lastSunday object which find the last sunday of every month
lastSunday ls;
//Water temperature value
int WaterTemp;
int TempDigit = 0;
int minuteDigit;
int hourDigit;
int dateDigit;
int monthDigit;
int i=0;
int prevtemp;
int temp;
int dhttemp;
int dhthum;
//timer turning on/off dots between numbers of the clock
unsigned long prevTimeDots = 0;
boolean turnD = true;
//Parameters for display digits
int splitSecondDigit1, splitSecondDigit2;
int splitMinuteDigit1, splitMinuteDigit2;
int splitHourDigit1, splitHourDigit2;
int splitMonthDigit1, splitMonthDigit2;
int splitDateDigit1, splitDateDigit2;
int splitTemp1, splitTemp2;
int splitWaterTempDigit1, splitWaterTempDigit2;
int splitDHTTemp1, splitDHTTemp2;
int splitDHTHum1, splitDHTHum2;
byte firstSecondDigit, secondSecondDigit;
byte firstMinuteDigit, secondMinuteDigit;
byte firstHourDigit, secondHourDigit;
byte firstDateDigit, secondDateDigit;
byte firstMonthDigit, secondMonthDigit;
byte firstTempDigit, secondTempDigit,thirdTempDigit;
byte firstWaterTempDigit, secondWaterTempDigit;
byte firstDHTTempDigit, secondDHTTempDigit;
byte firstDHTHumDigit, secondDHTHumDigit;
//led digits
//0,1,2,3,4...,9
byte IC1[] = {
B11111100,
B01100000,
B11011010,
B11110010,
B01100110,
B10110110,
B10111110,
B11100000,
B11111110,
B11110110
};
void displayAll(); // Display Time
void setup() {
Serial.begin(115200);
dataObj.begin(9600);
setSyncProvider(RTC.get);
RTC.set(now());
pinMode(clockPin, OUTPUT);
pinMode(latchPin, OUTPUT);
pinMode(dataPin, OUTPUT);
digitalWrite(ButtonUpPin,HIGH);
digitalWrite(ButtonEnterPin,HIGH);
digitalWrite(ButtonDownPin,HIGH);
WaterTemp = EEPROM.read(0);
if (WaterTemp < 15 && WaterTemp > 50) {
WaterTemp = 30;
}
sensors.begin();
dht.begin();
TestDisplay();
}
void loop() {
if (dataObj.available()) { //if gps recieve data
while (dataObj.available()) { //while it is recieving
if (gps.encode(dataObj.read())) { //gps.encode if data is valid
int yearMy;
byte monthMy, dayMy, hourMy, minuteMy, secondMy, hundredthsMy;
unsigned long ageMy;
//take gps data
gps.crack_datetime(&yearMy, &monthMy, &dayMy, &hourMy, &minuteMy, &secondMy, &hundredthsMy, &ageMy);
//data validation
if ((hourMy >= 0) && (minuteMy >= 0)) {
//seting Real Time Clock time according to gps time
//correcting gps UTC time according to BG time
//look at correctTime() function
setTime(hourMy + correctTime(), minuteMy, secondMy, dayMy, monthMy, yearMy);
RTC.set(now());
}
}
}
displayAll();
}
else displayAll(); //if no gps available display Real Time Clock time
delay(1000);
}
//Test all display with 8 beside minus symbol
void TestDisplay() {
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, LSBFIRST, B00000010);
shiftOut(dataPin, clockPin, LSBFIRST, B11111111);
shiftOut(dataPin, clockPin, LSBFIRST, B11111111);
shiftOut(dataPin, clockPin, LSBFIRST, B11111111);
shiftOut(dataPin, clockPin, LSBFIRST, B11111111);
shiftOut(dataPin, clockPin, LSBFIRST, B11111111);
shiftOut(dataPin, clockPin, LSBFIRST, B11111111);
shiftOut(dataPin, clockPin, LSBFIRST, B11111111);
shiftOut(dataPin, clockPin, LSBFIRST, B11111111);
shiftOut(dataPin, clockPin, LSBFIRST, B11111111);
shiftOut(dataPin, clockPin, LSBFIRST, B11111111);
shiftOut(dataPin, clockPin, LSBFIRST, B11111111);
shiftOut(dataPin, clockPin, LSBFIRST, B11111111);
shiftOut(dataPin, clockPin, LSBFIRST, B11111111);
shiftOut(dataPin, clockPin, LSBFIRST, B11111111);
shiftOut(dataPin, clockPin, LSBFIRST, B11111111);
shiftOut(dataPin, clockPin, LSBFIRST, B11111111);
digitalWrite(latchPin, HIGH);
digitalWrite(latchPin, LOW);
delay(1000);
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, LSBFIRST, B00000010);
shiftOut(dataPin, clockPin, LSBFIRST, B11111111);
shiftOut(dataPin, clockPin, LSBFIRST, B11111111);
shiftOut(dataPin, clockPin, LSBFIRST, B11111111);
shiftOut(dataPin, clockPin, LSBFIRST, B11111111);
shiftOut(dataPin, clockPin, LSBFIRST, B11111111);
shiftOut(dataPin, clockPin, LSBFIRST, B11111111);
shiftOut(dataPin, clockPin, LSBFIRST, B11111111);
shiftOut(dataPin, clockPin, LSBFIRST, B11111111);
shiftOut(dataPin, clockPin, LSBFIRST, B11111111);
shiftOut(dataPin, clockPin, LSBFIRST, B11111111);
shiftOut(dataPin, clockPin, LSBFIRST, B11111111);
shiftOut(dataPin, clockPin, LSBFIRST, B11111111);
shiftOut(dataPin, clockPin, LSBFIRST, B11111111);
shiftOut(dataPin, clockPin, LSBFIRST, B11111111);
shiftOut(dataPin, clockPin, LSBFIRST, B11111111);
shiftOut(dataPin, clockPin, LSBFIRST, B11111111);
digitalWrite(latchPin, HIGH);
digitalWrite(latchPin, LOW);
delay(500);
}