diff --git a/alarm.c b/alarm.c new file mode 100644 index 0000000000000000000000000000000000000000..5d1b762afeeb76a457a8b60348881317772dea34 --- /dev/null +++ b/alarm.c @@ -0,0 +1,137 @@ +/** + * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#include "pico/stdlib.h" +#include "lib/fonts.h" +#include "lib/st7735.h" + +int main() { +#ifndef PICO_DEFAULT_LED_PIN + #warning blink example requires a board with a regular LED +#else + //TODO: Create uints for the pins you are using + const uint LED_PIN = PICO_DEFAULT_LED_PIN; + const uint BUTTON_PIN_1 = 20; + const uint BUTTON_PIN_2 = 21; + const uint BUTTON_PIN_3 = 22; + + //TODO: Initialise the pins + gpio_init(LED_PIN); + gpio_init(BUTTON_PIN_1); + gpio_init(BUTTON_PIN_2); + gpio_init(BUTTON_PIN_3); + + //TODO: Set the pins to in/out + gpio_set_dir(LED_PIN, GPIO_OUT); + gpio_set_dir(BUTTON_PIN_1, GPIO_IN); + gpio_set_dir(BUTTON_PIN_2, GPIO_IN); + gpio_set_dir(BUTTON_PIN_3, GPIO_IN); + + //TODO: Initialise ST7735 + ST7735_Init(); + + while (true) { + //TODO: Start screen and create variables + ST7735_FillScreen(ST7735_BLACK); + ST7735_WriteString(5, 20, "HI", Font_16x26, ST7735_WHITE, ST7735_BLACK); + + sleep_ms(500); + gpio_put(LED_PIN, 1); + sleep_ms(3000); + gpio_put(LED_PIN, 0); + + int minutes = 0; + char minutesString[5]; + int seconds = 0; + char secondsString[5]; + bool start = false; + + while (!start) { + //TODO: Display screen with current time, and set up each of the buttons to add a minute, remove a minute and start the timer + ST7735_FillScreen(ST7735_BLACK); + sprintf(minutesString, "%d", minutes); + ST7735_WriteString(5, 20, minutesString, Font_16x26, ST7735_WHITE, ST7735_BLACK); + ST7735_WriteString(5, 45, "Min", Font_16x26, ST7735_WHITE, ST7735_BLACK); + ST7735_WriteString(5, 70, "0", Font_16x26, ST7735_WHITE, ST7735_BLACK); + ST7735_WriteString(5, 95, "Sec", Font_16x26, ST7735_WHITE, ST7735_BLACK); + if (!gpio_get(BUTTON_PIN_1)) { + gpio_put(LED_PIN, 1); + minutes = minutes + 1; + sleep_ms(200); + } + else + { + gpio_put(LED_PIN, 0); + } + if (!gpio_get(BUTTON_PIN_2)) { + gpio_put(LED_PIN, 1); + if (minutes != 0) { + minutes = minutes - 1; + } + sleep_ms(200); + } + else + { + gpio_put(LED_PIN, 0); + } + if (!gpio_get(BUTTON_PIN_3)) + { + start = true; + break; + } + } + while (start) { + //TODO: Display the countdown timer going down, in minutes and seconds + ST7735_FillScreen(ST7735_BLACK); + sprintf(minutesString, "%d", minutes); + sprintf(secondsString, "%d", seconds); + ST7735_WriteString(5, 20, minutesString, Font_16x26, ST7735_WHITE, ST7735_BLACK); + ST7735_WriteString(5, 45, "Min", Font_16x26, ST7735_WHITE, ST7735_BLACK); + ST7735_WriteString(5, 70, secondsString, Font_16x26, ST7735_WHITE, ST7735_BLACK); + ST7735_WriteString(5, 95, "Sec", Font_16x26, ST7735_WHITE, ST7735_BLACK); + sleep_ms(1000); + if (seconds == 0) { + if (minutes == 0) { + start = false; + break; + } + else { + seconds = 59; + minutes = minutes - 1; + } + } + else { + seconds = seconds - 1; + } + + } + while (true) { + //TODO: Display a message to alert the user the timer is done (possibly flashing) which stops when a button is pressed + ST7735_FillScreen(ST7735_BLACK); + ST7735_WriteString(5, 20, "DONE", Font_16x26, ST7735_WHITE, ST7735_BLACK); + ST7735_WriteString(5, 45, "DONE", Font_16x26, ST7735_WHITE, ST7735_BLACK); + ST7735_WriteString(5, 70, "DONE", Font_16x26, ST7735_WHITE, ST7735_BLACK); + ST7735_WriteString(5, 95, "DONE", Font_16x26, ST7735_WHITE, ST7735_BLACK); + sleep_ms(200); + if (gpio_get(BUTTON_PIN_1)) { + break; + } + if (gpio_get(BUTTON_PIN_2)) { + break; + } + if (gpio_get(BUTTON_PIN_3)) { + break; + } + ST7735_FillScreen(ST7735_WHITE); + ST7735_WriteString(5, 20, "DONE", Font_16x26, ST7735_BLACK, ST7735_WHITE); + ST7735_WriteString(5, 45, "DONE", Font_16x26, ST7735_BLACK, ST7735_WHITE); + ST7735_WriteString(5, 70, "DONE", Font_16x26, ST7735_BLACK, ST7735_WHITE); + ST7735_WriteString(5, 95, "DONE", Font_16x26, ST7735_BLACK, ST7735_WHITE); + sleep_ms(200); + } + } +#endif +}