#include <SPI.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <SoftwareSerial.h>
#include <DFPlayerMega.h>
#include <SD.h>
LiquidCrystal_I2C _lcd1(0x27, 16, 4);
int _dispTempLength1=0;
boolean _isNeedClearDisp1;
File _sd1DF;
String _sd1TS;
int _volsetup= 25;
int _eqsetup= 4;
DFPlayerMega dfPlayerMega= DFPlayerMega ();
int Folder;
long Track;
bool StartTrack;
bool StopTrack;
bool _dfstart1= 0;
bool _dfstart1I= 0;
bool _dfpause1= 0;
bool _dfpause1I= 0;
struct _I2CRealRimeClockTime
{
byte seconds = 0;
byte minutes = 0;
byte Hours = 0;
byte weekday = 0;
byte day = 0;
byte month = 0;
byte year = 0;
unsigned long startTime = 0;
};
_I2CRealRimeClockTime _RTC1;
int _gtv2;
String _gtv5;
bool _gtv6 = 0;
int _disp4oldLength = 0;
int _swi1;
bool _trgrt1 = 0;
bool _trgrt1I = 0;
int _disp1oldLength = 0;
bool _trgrt2 = 0;
bool _trgrt2I = 0;
bool _RTCST_Ost1 = 0;
int _disp5oldLength = 0;
int _swi2;
int _disp2oldLength = 0;
bool _tim1I = 0;
bool _tim1O = 0;
unsigned long _tim1P = 0UL;
int _disp3oldLength = 0;
String _RTC1_GetTime1_StrOut;
byte _RTC1_GetTime1_HourOut = 0;
byte _RTC1_GetTime1_MinOut = 0;
byte _RTC1_GetTime1_SecOut = 0;
byte _RTC1_GetTime1_DayOut = 0;
byte _RTC1_GetTime1_MounthOut = 0;
byte _RTC1_GetTime1_YearOut = 0;
byte _RTC1_GetTime1_DowOut = 0;
bool _sd1SVOS1 = 0;
long _strFunrand1 = 0L;
void setup()
{
pinMode(8, OUTPUT);
digitalWrite(8, 0);
Wire.begin();
delay(10);
Wire.beginTransmission(68);
Wire.write(0x0E);
Wire.write(B00000000);
Wire.write(B10001000);
Wire.endTransmission();
_RTC1.startTime = millis() - 1000;
_lcd1.init();
_lcd1.backlight();
randomSeed(analogRead(1));
SD.begin(9);
SPI.begin();
pinMode(10, OUTPUT);
Serial.begin (9600);
dfPlayerMega.set_serial (Serial);
delay(500);
dfPlayerMega.normal_mode();
delay(500);
dfPlayerMega.set_volume( _volsetup);
delay(500);
dfPlayerMega.set_EQ(_eqsetup);
delay(500);
}
void loop()
{
if (_isNeedClearDisp1) {_lcd1.clear(); _isNeedClearDisp1= 0;}
//:1
if (!(0))
{ if (!(_RTCST_Ost1))
{set3231Date(0x68, &_RTC1, 0, 47, 23, 18, 12, 1972, 1);
get3231Date(0x68, &_RTC1);
_RTCST_Ost1 = 1;
}}
else
{ _RTCST_Ost1 = 0;}
get3231Date(0x68, &_RTC1);
_RTC1_GetTime1_StrOut = ( _convertRealTimeClockNumberToString(_RTC1.day))+
String("-")+
( _convertRealTimeClockNumberToString(_RTC1.month))+
String("-")+
(String("20") +( _convertRealTimeClockNumberToString (_RTC1.year)))+
String(", ")+
( _convertRealTimeClockNumberToString(_RTC1.Hours))+
String(":")+
( _convertRealTimeClockNumberToString(_RTC1.minutes))+
String(":")+
( _convertRealTimeClockNumberToString(_RTC1.seconds));
_RTC1_GetTime1_HourOut = _RTC1.Hours;
_RTC1_GetTime1_MinOut = _RTC1.minutes;
_RTC1_GetTime1_SecOut = _RTC1.seconds;
_RTC1_GetTime1_DayOut = _RTC1.day;
_RTC1_GetTime1_MounthOut = _RTC1.month;
_RTC1_GetTime1_YearOut = _RTC1.year;
_RTC1_GetTime1_DowOut = _RTC1.weekday;
if (!(0)) {
_dispTempLength1 = ((_RTC1_GetTime1_StrOut)).length();
if (_disp1oldLength > _dispTempLength1) {_isNeedClearDisp1 = 1;}
_disp1oldLength = _dispTempLength1;
_lcd1.setCursor(0, 0);
_lcd1.print((_RTC1_GetTime1_StrOut));
} else {
if (_disp1oldLength > 0) {_isNeedClearDisp1 = 1; _disp1oldLength = 0;}
}
_gtv5 = _RTC1_GetTime1_StrOut;
_gtv2 = _RTC1_GetTime1_HourOut;
//:2
if(_gtv6)
{_swi1=1;}
else
{_swi1=0;}
if (!(0)) {
_dispTempLength1 = (((String(_swi1, DEC)))).length();
if (_disp3oldLength > _dispTempLength1) {_isNeedClearDisp1 = 1;}
_disp3oldLength = _dispTempLength1;
_lcd1.setCursor(0, 2);
_lcd1.print(((String(_swi1, DEC))));
} else {
if (_disp3oldLength > 0) {_isNeedClearDisp1 = 1; _disp3oldLength = 0;}
}
if (_gtv6) { if (_trgrt2I) { _trgrt2 = 0;} else {_trgrt2 = 1; _trgrt2I = 1;} } else {_trgrt2 = 0; _trgrt2I = 0;};
if(_trgrt2) {_tim1O = 1; _tim1I = 1;} else { if(_tim1I) {_tim1I = 0; _tim1P = millis();} else { if (_tim1O) {if ( _isTimer(_tim1P, 1000)) _tim1O = 0;}}}
if(_tim1O)
{_swi2=1;}
else
{_swi2=0;}
if (!(0)) {
_dispTempLength1 = (((String(_swi2, DEC)))).length();
if (_disp4oldLength > _dispTempLength1) {_isNeedClearDisp1 = 1;}
_disp4oldLength = _dispTempLength1;
_lcd1.setCursor(4, 2);
_lcd1.print(((String(_swi2, DEC))));
} else {
if (_disp4oldLength > 0) {_isNeedClearDisp1 = 1; _disp4oldLength = 0;}
}
if (_trgrt2) {
_strFunrand1 = random(1, 7);
}
if (!(0)) {
_dispTempLength1 = (((String(_strFunrand1, DEC)))).length();
if (_disp5oldLength > _dispTempLength1) {_isNeedClearDisp1 = 1;}
_disp5oldLength = _dispTempLength1;
_lcd1.setCursor(9, 1);
_lcd1.print(((String(_strFunrand1, DEC))));
} else {
if (_disp5oldLength > 0) {_isNeedClearDisp1 = 1; _disp5oldLength = 0;}
}
Folder = 1;
Track = _strFunrand1;
StartTrack = _trgrt2;
StopTrack = 0;
if (StartTrack) { if (_dfstart1I) { _dfstart1 = 0;} else {_dfstart1 = 1; _dfstart1I = 1;} } else {_dfstart1 = 0; _dfstart1I = 0;};
if( _dfstart1 == true) {dfPlayerMega.start_track ( Folder, Track );};
if (StopTrack) { if (_dfpause1I) { _dfpause1 = 0;} else {_dfpause1 = 1; _dfpause1I = 1;} } else {_dfpause1 = 0; _dfpause1I = 0;};
if( _dfpause1 == true) {dfPlayerMega.pause ();};
//:3
if (!(0)) {
_dispTempLength1 = (((String( (analogRead (0)), DEC)))).length();
if (_disp2oldLength > _dispTempLength1) {_isNeedClearDisp1 = 1;}
_disp2oldLength = _dispTempLength1;
_lcd1.setCursor(0, 1);
_lcd1.print(((String( (analogRead (0)), DEC))));
} else {
if (_disp2oldLength > 0) {_isNeedClearDisp1 = 1; _disp2oldLength = 0;}
}
digitalWrite(8, ( (analogRead (0))) <= (400));
_gtv6 = ( (analogRead (0))) <= (400);
if (_gtv6) { if (_trgrt1I) { _trgrt1 = 0;} else {_trgrt1 = 1; _trgrt1I = 1;} } else {_trgrt1 = 0; _trgrt1I = 0;};
if(_trgrt1)
{if(! _sd1SVOS1) {
_sd1TS = "000;";
_sd1TS+= "String;";
get3231Date(0x68, &_RTC1);
_sd1TS+= String(_RTC1.day);
_sd1TS+= "-";
_sd1TS+= String(_RTC1.month);
_sd1TS+= "-";
_sd1TS+= String(_RTC1.year);
_sd1TS+= " ";
_sd1TS+= String(_RTC1.Hours);
_sd1TS+= ":";
_sd1TS+= String(_RTC1.minutes);
_sd1TS+= ":";
_sd1TS+= String(_RTC1.seconds);
_sd1TS+= ";";
_sd1TS+= _gtv5;
_sd1TS+= ";";
_sd1TS+= String("");
_sd1TS+= ";";
_sd1DF = SD.open("777.log", FILE_WRITE);
if (_sd1DF) {_sd1DF.println(_sd1TS); _sd1DF.close();}
_sd1SVOS1 = 1;}}
else
{if( _sd1SVOS1) {_sd1SVOS1 = 0; }}
}
bool _isTimer(unsigned long startTime, unsigned long period )
{
unsigned long currentTime;
currentTime = millis();
if (currentTime>= startTime) {return (currentTime>=(startTime + period));} else {return (currentTime >=(4294967295-startTime+period));}
}
byte decToBcd(byte val)
{
return ( (val/10*16) + (val%10) );
}
void set3231Date(int addres, struct _I2CRealRimeClockTime *timeStruct, int sec, int minut, int hou, int dat, int mo, int ye, int daW)
{
byte temp;
Wire.beginTransmission(addres);
Wire.write(0x00);
if (sec < 0) {
temp = timeStruct -> seconds;
} else {
temp = sec;
}
Wire.write(decToBcd(temp));
if (minut < 0) {
temp = timeStruct -> minutes;
} else {
temp = minut;
}
Wire.write(decToBcd(temp));
if (hou < 0) {
temp = timeStruct -> Hours;
} else {
temp = hou;
}
Wire.write(decToBcd(temp));
if (daW < 0) {
temp = timeStruct -> weekday;
} else {
temp = daW;
}
Wire.write(decToBcd(temp));
if (dat < 0) {
temp = timeStruct -> day;
} else {
temp = dat;
}
Wire.write(decToBcd(temp));
if (mo < 0) {
temp = timeStruct -> month;
} else {
temp = mo;
}
Wire.write(decToBcd(temp));
if (ye < 0) {
temp = timeStruct -> year;
} else {
temp = ye;
}
Wire.write(decToBcd(temp));
Wire.endTransmission();
timeStruct ->startTime = millis() - 1000;
}
void get3231Date(int addres, struct _I2CRealRimeClockTime *timeStruct)
{
if (!(_isTimer ((timeStruct ->startTime), 250))) {
return;
}
Wire.beginTransmission( addres);
Wire.write(0x00);
Wire.endTransmission();
Wire.requestFrom(addres, 7);
if (Wire.available()) {
byte seconds = Wire.read();
byte minutes = Wire.read();
byte hours = Wire.read();
byte day = Wire.read();
byte date = Wire.read();
byte month = Wire.read();
byte year = Wire.read();
timeStruct -> seconds = (((seconds & B11110000) >> 4) * 10 + (seconds & B00001111));
timeStruct -> minutes = (((minutes & B11110000) >> 4) * 10 + (minutes & B00001111));
timeStruct -> Hours = (((hours & B00110000) >> 4) * 10 + (hours & B00001111));
timeStruct -> weekday = (day & B00000111);
timeStruct -> day = (((date & B00110000) >> 4) * 10 + (date & B00001111));
timeStruct -> month = (((month & B00010000) >> 4) * 10 + (month & B00001111));
timeStruct -> year = (((year & B11110000) >> 4) * 10 + (year & B00001111));
} timeStruct ->startTime = millis();
}
String _convertRealTimeClockNumberToString(byte value)
{
if (value > 9) {
return String(value, DEC);
}
return (String("0") + String(value, DEC));
}
Comments
Please log in or sign up to comment.