Bug? Problem in SoftRTC

Aamir Shaheen

New Member
hi all,
Recently i am facing problem while dealing with softRTC alarms, i found that alarm for 1 minuts or 15 minuts and also 25 minuts is working fine, but when i use hourly alarm, then its triggering too early. i found that hourly alarm is triggering just after 43 minutes instead of 1 hour.
i am developing egg hatching machine, for that i need to set alarms for every event. so i dont know where the problem is.
here is SoftRTC test Code i am using
SofRTC alarm Code:
Sub Process_Globals
    Public Serial1 As Serial
    Private DT(8) As Byte
    Private rtc As ESP8266rtc
    Private lcd As LiquidCrystal_I2C
    Private beep As Pin
    Private Timer1 As Timer
    Private counter As Int
End Sub
 
Private Sub AppStart
    Serial1.Initialize(115200)
    lcd.Initialize(0x27,16,2)
    lcd.Backlight=True
    
    beep.Initialize(0,beep.MODE_OUTPUT)
    
    Timer1.Initialize("Timer_Tick",1000)
    
    lcd.Write("Started")
    Log("AppStart")

    rtc.Initialize("rtc_Alarm",False)
    Log("RTC Initialised")
    counter=0
    'date .. 10th March 2017   (GMT)
    DT(0) = 20   '21st century (ie 2000)
    DT(1) = 25   'year
    DT(2) = 1     'month
    DT(3) = 1   'day
 

    DT(4) = 0   'hour (0-23)
    DT(5) = 00   'minute
    DT(6) = 00     'seconds
 
    DT(7) = 0    'not required.
 
    rtc.SetClock(DT,0,0)   'offset for Western Australia. DT +08:00
    Log("RTC is set")
 
    Log(rtc.ReadClock(DT))
    Log("RTC: ",DT(0),",",DT(1),",",DT(2),",",DT(3),",",DT(4),",",DT(5),",",DT(6),",",DT(7))
 
    rtc.SetAlarm(3,rtc.Sec2DT(rtc.DT2Sec(DT)+rtc.SECONDS_1MINUTE*15))
    rtc.SetAlarm(4,rtc.Sec2DT(rtc.DT2Sec(DT)+rtc.SECONDS_1MINUTE*30))
    rtc.SetAlarm(5,rtc.Sec2DT(rtc.DT2Sec(DT)+rtc.SECONDS_1HOUR))
    
 
    Timer1.Enabled=True
    Log("RTC is running")
End Sub
 
private Sub rtc_Alarm(index As Byte)
    If index=3 Then
        'tick every second
        rtc.ReadClock(DT)
        lcd.Clear
        lcd.SetCursor(2,0)
        lcd.Write(rtc.Time24(DT))
        lcd.SetCursor(2,1)
        lcd.Write(rtc.ShortDate(DT))

        Log("RTC: ",rtc.ShortDOW(DT),", ",rtc.ShortDate(DT),", ",rtc.Time24(DT))
        counter=counter+1
    
        beep.DigitalWrite(True)
        Delay(2000)
        beep.DigitalWrite(False)
            
    else if index=4 Then
        counter=counter+1
    
        beep.DigitalWrite(True)
        Delay(2000)
        beep.DigitalWrite(False)
    else if index=5 Then
        counter=counter+1
    
        beep.DigitalWrite(True)
        Delay(2000)
        beep.DigitalWrite(False)
            
            
            
    End If
    Log("AlarmEvent:  ",index)
    
    Log(rtc.DT2Sec(DT))
End Sub

private Sub Timer_Tick
    rtc.ReadClock(DT)
    lcd.Clear
    lcd.SetCursor(2,0)
    lcd.Write(rtc.Time24(DT))
    lcd.SetCursor(2,1)
    lcd.Write(counter)
    Log(rtc.Time24(DT))
    
End Sub
 
Top