' Program uses RTC and MP3 player to sound out time every minute test R1
#picaxe 20m2
#NO_DATA
#terminal 4800
SETFREQ M4
let dirsB = %10001000
Symbol BAUD_FREQ = M8
Symbol BAUD = T9600_8
Symbol TX = B.3 ' ---> to MP3 pin RX
'RTC = SDA to picaxe B.5
'RTC = SCL to picaxe B.7
SYMBOL index = b0
SYMBOL hours = b1
SYMBOL mins = b2
SYMBOL secs = b3
SYMBOL day = b7 ' not used
SYMBOL date = b4
SYMBOL month = b5
SYMBOL year = b6
SYMBOL CommonYear = b8
SYMBOL DayNumber = W6
SYMBOL DSTstart = W7
SYMBOL DSTend = W8 : SYMBOL DayS = W8
Symbol cmd = b19
Symbol arg = w10 ; b21:b20
Symbol arg.lsb = b20
Symbol arg.msb = b21
Symbol varA = w11
#Define BcdToDec(bcd) bcd / $10 * 250 + bcd
#Macro Send_mp3
{ SetFreq BAUD_FREQ
Pause 10
SerOut TX, BAUD, ( $7E, $FF, $06, cmd, $00, arg.msb, arg.lsb, $EF )
SetFreq MDEFAULT
#EndMacro}
#Macro Initmp3
{High TX ; set TX pin high for idle high serial
Pause 200
cmd = $09
arg = $0002 Send_mp3
Pause 2000
cmd = $06
arg = 25 Send_mp3
Pause 100
#EndMacro}
#Macro Sound_PM 'sound out "PM" from mp3 #0017
{ cmd = $03
arg = 0017 Send_mp3
Pause 1500
#EndMacro}
#Macro Sound_AM 'sound out "AM" from mp3 #0016
{ cmd = $03
arg = 0016 Send_mp3
Pause 1500
#EndMacro}
#Macro Sound_Greeting 'sound out "At the time,the time will be" from mp3 #0015
{cmd = $03
arg = 15 Send_mp3
pause 3500
#EndMacro}
#Macro Sound_hour_or_minute
{ cmd = $03
arg = varA Send_mp3 'sound out minute 10s digit of time (0014 = OH)from mp3 sd card
Pause 1500
#EndMacro}
'==========SET TIME on RTC==============
' HI2Csetup I2Cmaster, %11010000, I2CSLOW, I2Cbyte ' Set DS1307 to 100kbps
'HI2Cout $0 , ( $30, $09, $17,day, $09 , $04 , $18) ' program DS1307 with GMT
Power_Reset:
Initmp3
Main: '===================Main Program================================
Gosub WaitForMinuteTick
Gosub Sound_out_time
Goto Main
WaitForMinuteTick:
{ HI2cSetup I2CMASTER, %11010000, I2CSLOW, I2CBYTE
Do
Pause 100
HI2cIn $0, (secs,mins,hours,day,date,month,year)
Loop Until secs = $00
mins = BcdToDec( mins )
hours = BcdToDec( hours )
date = BcdToDec( date )
month = BcdToDec( month )
year = BcdToDec( year )
Gosub EastDaylightTime}
Return
EastDaylightTime: 'Code from Marks for United States
{ CommonYear = year //4 +3 /4 ' CommonYear =1
DayNumber = month +9 /12
DayNumber = CommonYear + DayNumber * DayNumber
DayNumber = month *275 /9 +date -30 -DayNumber
DayS = year *512 **46752 ' year =1 to 99
DSTstart = Days +72//7
DSTstart = 74 -CommonYear -DSTstart ' Second SunDay in March
DSTend = DSTstart +238 ' First SunDay in November
IF DayNumber < DSTstart OR DayNumber > DSTend THEN Display
IF DayNumber = DSTstart AND hours <2 THEN Display ' DST starts at 0200
IF DayNumber = DSTend AND hours >1 THEN Display ' DST ends at 0200
IF hours =23 THEN : INC date
IF month =4 or month =6 or month =9 and date =31 OR date=32 THEN : date =1 INC month: ENDIF
ENDIF : hours =hours +1//24
Sertxd ("EDT ") : GOTO DateTime ' DST +1
Display:Sertxd ("EST ") ' StandardTime
DateTime:
sertxd ("20",#year,"/",#month,"/",#date," ") ' Date 20yy/mm/dd
index = mins/10 :mins = mins//10
sertxd (#hours,".",#index,#mins) ' 24hr time hh/mm/ss
}
Return
[color=Black]Sound_out_time: [/color][color=Green]'sound out " Thetimewillbe,hour,minute,minute,pm or am "[/color]
[color=Black]Sound_Greeting[/color]
[color=Gray]{[/color][color=Blue]lookup [/color][color=Purple]hours[/color][color=Black],[/color][color=Blue]([/color][color=Navy]0013[/color][color=Black],[/color][color=Navy]0002[/color][color=Black],[/color][color=Navy]0003[/color][color=Black],[/color][color=Navy]0004[/color][color=Black],[/color][color=Navy]0005[/color][color=Black],[/color][color=Navy]0006[/color][color=Black],[/color][color=Navy]0007[/color][color=Black],[/color][color=Navy]0008[/color][color=Black],[/color][color=Navy]0009[/color][color=Black],[/color][color=Navy]0010[/color][color=Black],[/color][color=Navy]0011[/color][color=Black],[/color][color=Navy]0012[/color][color=Black],[/color][color=Navy]0013[/color][color=Black],[/color][color=Navy]0002[/color][color=Black],[/color][color=Navy]0003[/color][color=Black],[/color][color=Navy]0004[/color][color=Black],[/color][color=Navy]0005[/color][color=Black],[/color][color=Navy]0006[/color][color=Black],[/color][color=Navy]0007[/color][color=Black],[/color][color=Navy]0008[/color][color=Black],[/color][color=Navy]0009[/color][color=Black],[/color][color=Navy]0010[/color][color=Black],[/color][color=Navy]0011[/color][color=Black],[/color][color=Navy]0012[/color][color=Blue])[/color][color=Black],[/color][color=Purple]varA
[/color][color=Green]'12 1 2 3 4 5 6 7 8 9 10 11 12 1 2 3 4 5 6 7 8 9 10 11 = word sound
'0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 = hour value[/color]
[color=Black]Sound_hour_or_minute[/color]
[color=Blue]lookup [/color][color=Purple]index[/color][color=Black],[/color][color=Blue]([/color][color=Navy]0014[/color][color=Black],[/color][color=Navy]0002[/color][color=Black],[/color][color=Navy]0003[/color][color=Black],[/color][color=Navy]0004[/color][color=Black],[/color][color=Navy]0005[/color][color=Black],[/color][color=Navy]0006[/color][color=Black],[/color][color=Navy]0007[/color][color=Black],[/color][color=Navy]0008[/color][color=Black],[/color][color=Navy]0009[/color][color=Black],[/color][color=Navy]0010[/color][color=Black],[/color][color=Navy]0011[/color][color=Black],[/color][color=Navy]0012[/color][color=Black],[/color][color=Navy]0013[/color][color=Blue])[/color][color=Black],[/color][color=Purple]varA [/color]
[color=Black]Sound_hour_or_minute [/color]
[color=Blue]lookup [/color][color=Purple]mins[/color][color=Black],[/color][color=Blue]([/color][color=Navy]0001[/color][color=Black],[/color][color=Navy]0002[/color][color=Black],[/color][color=Navy]0003[/color][color=Black],[/color][color=Navy]0004[/color][color=Black],[/color][color=Navy]0005[/color][color=Black],[/color][color=Navy]0006[/color][color=Black],[/color][color=Navy]0007[/color][color=Black],[/color][color=Navy]0008[/color][color=Black],[/color][color=Navy]0009[/color][color=Black],[/color][color=Navy]0010[/color][color=Black],[/color][color=Navy]0011[/color][color=Black],[/color][color=Navy]0012[/color][color=Black],[/color][color=Navy]0013[/color][color=Blue])[/color][color=Black],[/color][color=Purple]varA [/color]
[color=Black]Sound_hour_or_minute[/color]
[color=Blue]If [/color][color=Purple]hours [/color][color=DarkCyan]=< [/color][color=Navy]11 [/color][color=Blue]then [/color][color=Black]Sound_AM [/color][color=Blue]endif
If [/color][color=Purple]hours [/color][color=DarkCyan]=> [/color][color=Navy]12 [/color][color=Blue]then [/color][color=Black]Sound_PM [/color][color=Blue]endif [/color][color=Gray]}[/color]
[color=Blue]Return [/color]