#include "pico/stdlib.h"
#include "hardware/gpio.h"
#define LED_PIN 26
#define BUTTON_PIN 15
volatile bool reverse_blinking = false;
void irq_callback(uint gpio, uint32_t events) {
reverse_blinking = !reverse_blinking;
}
void blink_led(int times, uint delay_ms) {
for (int i = 0; i < times; i++) {
gpio_put(LED_PIN, 1);
sleep_ms(delay_ms);
gpio_put(LED_PIN, 0);
sleep_ms(delay_ms);
}
}
int main() {
gpio_init(LED_PIN);
gpio_set_dir(LED_PIN, GPIO_OUT);
gpio_init(BUTTON_PIN);
gpio_set_dir(BUTTON_PIN, GPIO_IN);
gpio_pull_up(BUTTON_PIN);
gpio_set_irq_enabled_with_callback(BUTTON_PIN, GPIO_IRQ_EDGE_FALL, true, &irq_callback);
absolute_time_t start_time = get_absolute_time();
bool should_blink = true;
int blink_count = 0;
while (true) {
absolute_time_t current_time = get_absolute_time();
long elapsed_minutes = absolute_time_diff_us(start_time, current_time) / 60000000;
if (!reverse_blinking) {
if (elapsed_minutes < 1) {
if (should_blink) {
blink_led(10, 1000);
blink_count += 10;
should_blink = false;
}
} else if (elapsed_minutes < 2) {
if (should_blink) {
blink_led(20, 1000);
blink_count += 20;
should_blink = false;
}
} else if (elapsed_minutes < 3) {
if (should_blink) {
blink_led(30, 1000);
blink_count += 30;
should_blink = false;
}
} else {
break;
}
} else {
if (elapsed_minutes < 1) {
if (should_blink) {
blink_led(30, 1000);
blink_count += 30;
should_blink = false;
}
} else if (elapsed_minutes < 2) {
if (should_blink) {
blink_led(20, 1000);
blink_count += 20;
should_blink = false;
}
} else if (elapsed_minutes < 3) {
if (should_blink) {
blink_led(10, 1000);
blink_count += 10;
should_blink = false;
}
} else {
break;
}
}
}
return 0;
}