/*
* To reverse blinking pattern, press and hold button until message is displayed on standard output
*/
#include <stdio.h>
#include <stdlib.h>
#include "pico/stdlib.h"
#define LED_PIN 1
#define BTN_PIN 17
bool control(int state, int interval, bool *reverse) {
gpio_put(LED_PIN, state);
sleep_ms(interval);
if(gpio_get(BTN_PIN)) {
*reverse = !(*reverse);
return true;
}
return false;
}
void blink(int minute, int times, int *count, bool *reverse) {
printf("Blinking LED %d times in minute %d\n", times, minute);
int interval = 60000 / (times * 2);
for(int i = 0; i < times; i++) {
if(control(1, interval, reverse) || control(0, interval, reverse)) {
return;
}
}
(*count)++;
}
int main() {
stdio_init_all();
gpio_init(LED_PIN);
gpio_set_dir(LED_PIN, GPIO_OUT);
gpio_init(BTN_PIN);
gpio_set_dir(BTN_PIN, GPIO_IN);
bool reverse = false;
int count = 0;
int minute[] = {1, 2, 3}, times[] = {10, 20, 30}, rtimes[] = {30, 20, 10};
if(sizeof(minute) > sizeof(times) || sizeof(minute) > sizeof(rtimes)) {
printf("Pattern error. Exiting...");
return EXIT_FAILURE;
}
while(1) {
if(reverse) {
blink(minute[count], rtimes[count], &count, &reverse);
}
else {
blink(minute[count], times[count], &count, &reverse);
}
if(count == sizeof(minute) / sizeof(minute[0])) {
count = 0;
}
}
return EXIT_SUCCESS;
}