61 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			61 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/**
 | 
						|
 * Copyright (c) 2021 Raspberry Pi (Trading) Ltd.
 | 
						|
 *
 | 
						|
 * SPDX-License-Identifier: BSD-3-Clause
 | 
						|
 */
 | 
						|
 | 
						|
#include <stdio.h>
 | 
						|
#include "hardware/rtc.h"
 | 
						|
#include "pico/stdlib.h"
 | 
						|
#include "pico/util/datetime.h"
 | 
						|
 | 
						|
static volatile bool fired = false;
 | 
						|
 | 
						|
static void alarm_callback(void) {
 | 
						|
    datetime_t t = {0};
 | 
						|
    rtc_get_datetime(&t);
 | 
						|
    char datetime_buf[256];
 | 
						|
    char *datetime_str = &datetime_buf[0];
 | 
						|
    datetime_to_str(datetime_str, sizeof(datetime_buf), &t);
 | 
						|
    printf("Alarm Fired At %s\n", datetime_str);
 | 
						|
    stdio_flush();
 | 
						|
    fired = true;
 | 
						|
}
 | 
						|
 | 
						|
int main() {
 | 
						|
    stdio_init_all();
 | 
						|
    printf("RTC Alarm Repeat!\n");
 | 
						|
 | 
						|
    // Start on Wednesday 13th January 2021 11:20:00
 | 
						|
    datetime_t t = {
 | 
						|
        .year  = 2020,
 | 
						|
        .month = 01,
 | 
						|
        .day   = 13,
 | 
						|
        .dotw  = 3, // 0 is Sunday, so 3 is Wednesday
 | 
						|
        .hour  = 11,
 | 
						|
        .min   = 20,
 | 
						|
        .sec   = 00
 | 
						|
    };
 | 
						|
 | 
						|
    // Start the RTC
 | 
						|
    rtc_init();
 | 
						|
    rtc_set_datetime(&t);
 | 
						|
 | 
						|
    // Alarm once a minute
 | 
						|
    datetime_t alarm = {
 | 
						|
        .year  = -1,
 | 
						|
        .month = -1,
 | 
						|
        .day   = -1,
 | 
						|
        .dotw  = -1,
 | 
						|
        .hour  = -1,
 | 
						|
        .min   = -1,
 | 
						|
        .sec   = 00
 | 
						|
    };
 | 
						|
 | 
						|
    rtc_set_alarm(&alarm, &alarm_callback);
 | 
						|
 | 
						|
    // Alarm will keep firing forever
 | 
						|
    while(1);
 | 
						|
 | 
						|
    return 0;
 | 
						|
} |