59 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			59 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /**
 | |
|  * Copyright (c) 2020 Raspberry Pi (Trading) Ltd.
 | |
|  *
 | |
|  * SPDX-License-Identifier: BSD-3-Clause
 | |
|  */
 | |
| 
 | |
| #include <stdio.h>
 | |
| #include "pico/stdlib.h"
 | |
| 
 | |
| /// \tag::timer_example[]
 | |
| volatile bool timer_fired = false;
 | |
| 
 | |
| int64_t alarm_callback(alarm_id_t id, void *user_data) {
 | |
|     printf("Timer %d fired!\n", (int) id);
 | |
|     timer_fired = true;
 | |
|     // Can return a value here in us to fire in the future
 | |
|     return 0;
 | |
| }
 | |
| 
 | |
| bool repeating_timer_callback(struct repeating_timer *t) {
 | |
|     printf("Repeat at %lld\n", time_us_64());
 | |
|     return true;
 | |
| }
 | |
| 
 | |
| int main() {
 | |
|     stdio_init_all();
 | |
|     printf("Hello Timer!\n");
 | |
| 
 | |
|     // Call alarm_callback in 2 seconds
 | |
|     add_alarm_in_ms(2000, alarm_callback, NULL, false);
 | |
| 
 | |
|     // Wait for alarm callback to set timer_fired
 | |
|     while (!timer_fired) {
 | |
|         tight_loop_contents();
 | |
|     }
 | |
| 
 | |
|     // Create a repeating timer that calls repeating_timer_callback.
 | |
|     // If the delay is > 0 then this is the delay between the previous callback ending and the next starting.
 | |
|     // If the delay is negative (see below) then the next call to the callback will be exactly 500ms after the
 | |
|     // start of the call to the last callback
 | |
|     struct repeating_timer timer;
 | |
|     add_repeating_timer_ms(500, repeating_timer_callback, NULL, &timer);
 | |
|     sleep_ms(3000);
 | |
|     bool cancelled = cancel_repeating_timer(&timer);
 | |
|     printf("cancelled... %d\n", cancelled);
 | |
|     sleep_ms(2000);
 | |
| 
 | |
|     // Negative delay so means we will call repeating_timer_callback, and call it again
 | |
|     // 500ms later regardless of how long the callback took to execute
 | |
|     add_repeating_timer_ms(-500, repeating_timer_callback, NULL, &timer);
 | |
|     sleep_ms(3000);
 | |
|     cancelled = cancel_repeating_timer(&timer);
 | |
|     printf("cancelled... %d\n", cancelled);
 | |
|     sleep_ms(2000);
 | |
|     printf("Done\n");
 | |
|     return 0;
 | |
| }
 | |
| /// \end::timer_example[]
 |