diff --git a/Lab5/Src/button.c b/Lab5/Src/button.c
index 57f411b429abe12847e46dbd0bda29afbef543d7..52434aeef40a57be1daec11c7e3b48f01670bbb5 100644
--- a/Lab5/Src/button.c
+++ b/Lab5/Src/button.c
@@ -14,70 +14,45 @@
 #include "main.h"
 #include <stdio.h>
 
-//  pins and clock for the LED
+// Declaration for LED1
+#define LED1_PIN GPIO_PIN_5
+#define LED1_GPIO_PORT GPIOA
+#define LED1_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE()
 
-#define LED2_PIN                         GPIO_PIN_14
-#define LED2_GPIO_PORT                   GPIOB
-#define LED2_GPIO_CLK_ENABLE()           __HAL_RCC_GPIOB_CLK_ENABLE()
-#define LED2_GPIO_CLK_DISABLE()          __HAL_RCC_GPIOB_CLK_DISABLE()
+// Declaration for LED2
+#define LED2_PIN GPIO_PIN_14
+#define LED2_GPIO_PORT GPIOB
+#define LED2_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE()
 
-//declaration for the GPIO pins for the wakeup Button
+// Declaration for Blue Button (B2)
+#define BLUE_BUTTON_PIN GPIO_PIN_13
+#define BLUE_BUTTON_GPIO_PORT GPIOC
+#define BLUE_BUTTON_GPIO_CLK_ENABLE() __HAL_RCC_GPIOC_CLK_ENABLE()
 
-#define BLUE_BUTTON_PIN                   GPIO_PIN_13
-#define BLUE_BUTTON_GPIO_PORT             GPIOC
-#define BLUE_BUTTON_GPIO_CLK_ENABLE()     __HAL_RCC_GPIOC_CLK_ENABLE()
-#define BLUE_BUTTON_GPIO_CLK_DISABLE()    __HAL_RCC_GPIOC_CLK_DISABLE()
-
-// pins and clocks for USART
-
-#define DISCOVERY_COM1                          USART1
-#define DISCOVERY_COM1_CLK_ENABLE()             __HAL_RCC_USART1_CLK_ENABLE()
-#define DISCOVERY_COM1_CLK_DISABLE()            __HAL_RCC_USART1_CLK_DISABLE()
-
-#define DISCOVERY_COM1_TX_PIN                   GPIO_PIN_6
-#define DISCOVERY_COM1_TX_GPIO_PORT             GPIOB
-#define DISCOVERY_COM1_TX_GPIO_CLK_ENABLE()     __HAL_RCC_GPIOB_CLK_ENABLE()   
-#define DISCOVERY_COM1_TX_GPIO_CLK_DISABLE()    __HAL_RCC_GPIOB_CLK_DISABLE()  
-#define DISCOVERY_COM1_TX_AF                    GPIO_AF7_USART1
-
-#define DISCOVERY_COM1_RX_PIN                   GPIO_PIN_7
-#define DISCOVERY_COM1_RX_GPIO_PORT             GPIOB
-#define DISCOVERY_COM1_RX_GPIO_CLK_ENABLE()     __HAL_RCC_GPIOB_CLK_ENABLE()   
-#define DISCOVERY_COM1_RX_GPIO_CLK_DISABLE()    __HAL_RCC_GPIOB_CLK_DISABLE()  
-#define DISCOVERY_COM1_RX_AF                    GPIO_AF7_USART1
-
-UART_HandleTypeDef hDiscoUart;
 EXTI_HandleTypeDef hexti;
 EXTI_ConfigTypeDef pEXTiConfig;
 
-/* Private function prototypes -----------------------------------------------*/
-static void SystemClock_Config(void);
+// Function prototypes
+void SystemClock_Config(void);
+void LED1_Init(void);
+void LED1_On(void);
+void LED1_Off(void);
 void LED2_Init(void);
-void BSP_COM_Init( UART_HandleTypeDef *);
-void LED2_Toggle(void);
-int __io_putchar(int);
+void LED2_On(void);
+void LED2_Off(void);
 HAL_StatusTypeDef Blue_PB_EXT_Init(void);
+void EXTI15_10_IRQHandler(void);
+int __io_putchar(int ch);
+
+UART_HandleTypeDef hDiscoUart;
+
+/* Main function */
+int main(void) {
+    HAL_Init();
+    SystemClock_Config();
 
-int main(void)
-{
-  
-/* STM32L4xx HAL library initialization:
-       - Configure the Flash prefetch, Flash preread and Buffer caches
-       - Systick timer is configured by default as source of time base, but user 
-             can eventually implement his proper time base source (a general purpose 
-             timer for example or other time source), keeping in mind that Time base 
-             duration should be kept 1ms since PPP_TIMEOUT_VALUEs are defined and 
-             handled in milliseconds basis.
-       - Low Level Initialization
-     */
-  HAL_Init();
-
-  /* Configure the System clock to have a frequency of 80 MHz */
-  SystemClock_Config();
-
-  
-    /* Initialize all configured peripherals */
-    hDiscoUart.Instance = DISCOVERY_COM1;
+    // UART for debugging
+    hDiscoUart.Instance = USART1;  // Adjust based on your board
     hDiscoUart.Init.BaudRate = 115200;
     hDiscoUart.Init.WordLength = UART_WORDLENGTH_8B;
     hDiscoUart.Init.StopBits = UART_STOPBITS_1;
@@ -85,167 +60,158 @@ int main(void)
     hDiscoUart.Init.Mode = UART_MODE_TX_RX;
     hDiscoUart.Init.HwFlowCtl = UART_HWCONTROL_NONE;
     hDiscoUart.Init.OverSampling = UART_OVERSAMPLING_16;
-    hDiscoUart.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
-    hDiscoUart.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
-
-    BSP_COM_Init(&hDiscoUart);
-
-  /* Configure the User LED */
-  LED2_Init();
-  printf("Welcome to button interrupts !\n");
-  if ( Blue_PB_EXT_Init() == HAL_ERROR )
-    printf("set up button interrupt failed\n");
-  else
-      for ( ; ;)
-	{
-	}
-  printf("Bye Bye \n");
+    HAL_UART_Init(&hDiscoUart);
+
+    printf("Welcome to the dual LED toggle program!\n");
+
+    // Initialize LEDs and Button
+    LED1_Init();
+    LED2_Init();
+
+    if (Blue_PB_EXT_Init() == HAL_ERROR) {
+        printf("Button interrupt configuration failed!\n");
+        while (1);
+    }
+
+    // Start with LED1 on and LED2 off
+    LED1_On();
+    LED2_Off();
+
+    // Main loop (interrupt-driven)
+    while (1) {
+    }
 }
 
-static void SystemClock_Config(void)
-{
-  RCC_ClkInitTypeDef RCC_ClkInitStruct;
-  RCC_OscInitTypeDef RCC_OscInitStruct;
-
-  /* MSI is enabled after System reset, activate PLL with MSI as source */
-  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_MSI;
-  RCC_OscInitStruct.MSIState = RCC_MSI_ON;
-  RCC_OscInitStruct.MSIClockRange = RCC_MSIRANGE_6;
-  RCC_OscInitStruct.MSICalibrationValue = RCC_MSICALIBRATION_DEFAULT;
-  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
-  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_MSI;
-  RCC_OscInitStruct.PLL.PLLM = 1;
-  RCC_OscInitStruct.PLL.PLLN = 40;
-  RCC_OscInitStruct.PLL.PLLR = 2;
-  RCC_OscInitStruct.PLL.PLLP = 7;
-  RCC_OscInitStruct.PLL.PLLQ = 4;
-  if(HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
-  {
-    /* Initialization Error */
-    while(1);
-  }
-  
-  /* Select PLL as system clock source and configure the HCLK, PCLK1 and PCLK2 
-     clocks dividers */
-  RCC_ClkInitStruct.ClockType = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2);
-  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
-  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
-  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;  
-  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;  
-  if(HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_4) != HAL_OK)
-  {
-    /* Initialization Error */
-    while(1);
-  }
+/* EXTI15_10 IRQ Handler */
+void EXTI15_10_IRQHandler(void) {
+    static uint8_t activeLED = 1;
+
+    if (activeLED == 1) {
+        LED1_Off();
+        LED2_On();
+        activeLED = 2; // Switch to LED2
+    } else {
+        LED2_Off();
+        LED1_On();
+        activeLED = 1; // Switch to LED1
+    }
+
+    // Clean up interrupt
+    HAL_EXTI_IRQHandler(&hexti);
 }
 
-/*
-Inititalise the LED2 GPIO port
-*/
-
-void LED2_Init(void)
-{
-
-   GPIO_InitTypeDef  gpio_init_structure;
-  
-  LED2_GPIO_CLK_ENABLE();
-  /* Configure the GPIO_LED pin */
-  gpio_init_structure.Pin   = LED2_PIN;
-  gpio_init_structure.Mode  = GPIO_MODE_OUTPUT_PP;
-  gpio_init_structure.Pull  = GPIO_NOPULL;
-  gpio_init_structure.Speed = GPIO_SPEED_FREQ_HIGH;
-  
-  HAL_GPIO_Init(LED2_GPIO_PORT, &gpio_init_structure);
+/* LED1 Initialization */
+void LED1_Init(void) {
+    GPIO_InitTypeDef gpio_init_structure;
+
+    LED1_GPIO_CLK_ENABLE();
+
+    gpio_init_structure.Pin = LED1_PIN;
+    gpio_init_structure.Mode = GPIO_MODE_OUTPUT_PP;
+    gpio_init_structure.Pull = GPIO_NOPULL;
+    gpio_init_structure.Speed = GPIO_SPEED_FREQ_HIGH;
+
+    HAL_GPIO_Init(LED1_GPIO_PORT, &gpio_init_structure);
 }
 
-/*
- initialise the COM port
-*/
-
-void BSP_COM_Init(UART_HandleTypeDef *huart)
-{
-  GPIO_InitTypeDef gpio_init_structure;
-
-  /* Enable GPIO RX/TX clocks */
-  DISCOVERY_COM1_TX_GPIO_CLK_ENABLE();
-  DISCOVERY_COM1_RX_GPIO_CLK_ENABLE();
-
-  /* Enable USART clock */
-  DISCOVERY_COM1_CLK_ENABLE();
-
-  /* Configure USART Tx as alternate function */
-  gpio_init_structure.Pin = DISCOVERY_COM1_TX_PIN;
-  gpio_init_structure.Mode = GPIO_MODE_AF_PP;
-  gpio_init_structure.Speed = GPIO_SPEED_FREQ_HIGH;
-  gpio_init_structure.Pull = GPIO_NOPULL;
-  gpio_init_structure.Alternate = DISCOVERY_COM1_TX_AF;
-  HAL_GPIO_Init(DISCOVERY_COM1_TX_GPIO_PORT, &gpio_init_structure);
-
-  /* Configure USART Rx as alternate function */
-  gpio_init_structure.Pin = DISCOVERY_COM1_RX_PIN;
-  gpio_init_structure.Mode = GPIO_MODE_AF_PP;
-  gpio_init_structure.Alternate = DISCOVERY_COM1_RX_AF;
-  HAL_GPIO_Init(DISCOVERY_COM1_RX_GPIO_PORT, &gpio_init_structure);
-
-  /* USART configuration */
-  huart->Instance = DISCOVERY_COM1;
-  HAL_UART_Init(huart);
+/* LED1 On */
+void LED1_On(void) {
+    HAL_GPIO_WritePin(LED1_GPIO_PORT, LED1_PIN, GPIO_PIN_SET);
 }
-/* set up blue button ISR */
-HAL_StatusTypeDef Blue_PB_EXT_Init()
-{
-  GPIO_InitTypeDef gpio_init_structure;
-  
-  /* Enable the BUTTON clock */
-  BLUE_BUTTON_GPIO_CLK_ENABLE();
-  __HAL_RCC_SYSCFG_CLK_ENABLE();
- 
-  /* Configure Button pin as input */
-  gpio_init_structure.Pin = BLUE_BUTTON_PIN;
-  gpio_init_structure.Mode = GPIO_MODE_INPUT;
-  gpio_init_structure.Pull = GPIO_PULLUP;
-  gpio_init_structure.Speed = GPIO_SPEED_FREQ_HIGH;
-  HAL_GPIO_Init(BLUE_BUTTON_GPIO_PORT, &gpio_init_structure);
-  
-  hexti.Line = EXTI_LINE_13;
-
-  pEXTiConfig.Line = EXTI_LINE_13;
-  pEXTiConfig.Mode = EXTI_MODE_INTERRUPT;
-  pEXTiConfig.Trigger = EXTI_TRIGGER_RISING;
-  pEXTiConfig.GPIOSel = EXTI_GPIOC;
-  /* Configure interrupts for button */ 
-  if ( HAL_EXTI_SetConfigLine(&hexti, &pEXTiConfig) == HAL_ERROR)
-    return HAL_ERROR;
-  //set ISR priority
-  HAL_NVIC_SetPriority(EXTI15_10_IRQn, 0, 0U);
-  //enable IRQ
-  HAL_NVIC_EnableIRQ(EXTI15_10_IRQn);
-
-  return HAL_OK;
+
+/* LED1 Off */
+void LED1_Off(void) {
+    HAL_GPIO_WritePin(LED1_GPIO_PORT, LED1_PIN, GPIO_PIN_RESET);
 }
 
+/* LED2 Initialization */
+void LED2_Init(void) {
+    GPIO_InitTypeDef gpio_init_structure;
 
-//EXTI15_10_IRQHandler ISR
-void  EXTI15_10_IRQHandler() 
+    LED2_GPIO_CLK_ENABLE();
 
-{ 
-    LED2_Toggle();
-    //clean up 
-    HAL_EXTI_IRQHandler(&hexti);
+    gpio_init_structure.Pin = LED2_PIN;
+    gpio_init_structure.Mode = GPIO_MODE_OUTPUT_PP;
+    gpio_init_structure.Pull = GPIO_NOPULL;
+    gpio_init_structure.Speed = GPIO_SPEED_FREQ_HIGH;
 
-} 
+    HAL_GPIO_Init(LED2_GPIO_PORT, &gpio_init_structure);
+}
 
-void LED2_Toggle(void)
-{
-  HAL_GPIO_TogglePin(LED2_GPIO_PORT, LED2_PIN);
+/* LED2 On */
+void LED2_On(void) {
+    HAL_GPIO_WritePin(LED2_GPIO_PORT, LED2_PIN, GPIO_PIN_SET);
 }
 
-int __io_putchar(int ch)
-{
-  /* write a character to the serial port and Loop until the end of transmission */
-  while (HAL_OK != HAL_UART_Transmit(&hDiscoUart, (uint8_t *) &ch, 1, 30000))
-  {
-    ;
-  }
-  return ch;
+/* LED2 Off */
+void LED2_Off(void) {
+    HAL_GPIO_WritePin(LED2_GPIO_PORT, LED2_PIN, GPIO_PIN_RESET);
 }
+
+/* Button Interrupt Initialization */
+HAL_StatusTypeDef Blue_PB_EXT_Init(void) {
+    GPIO_InitTypeDef gpio_init_structure;
+
+    BLUE_BUTTON_GPIO_CLK_ENABLE();
+    __HAL_RCC_SYSCFG_CLK_ENABLE();
+
+    gpio_init_structure.Pin = BLUE_BUTTON_PIN;
+    gpio_init_structure.Mode = GPIO_MODE_INPUT;
+    gpio_init_structure.Pull = GPIO_PULLUP;
+    gpio_init_structure.Speed = GPIO_SPEED_FREQ_HIGH;
+
+    HAL_GPIO_Init(BLUE_BUTTON_GPIO_PORT, &gpio_init_structure);
+
+    hexti.Line = EXTI_LINE_13;
+    pEXTiConfig.Line = EXTI_LINE_13;
+    pEXTiConfig.Mode = EXTI_MODE_INTERRUPT;
+    pEXTiConfig.Trigger = EXTI_TRIGGER_RISING;
+    pEXTiConfig.GPIOSel = EXTI_GPIOC;
+
+    if (HAL_EXTI_SetConfigLine(&hexti, &pEXTiConfig) == HAL_ERROR) {
+        return HAL_ERROR;
+    }
+
+    HAL_NVIC_SetPriority(EXTI15_10_IRQn, 0, 0U);
+    HAL_NVIC_EnableIRQ(EXTI15_10_IRQn);
+
+    return HAL_OK;
+}
+
+/* UART Output Function */
+int __io_putchar(int ch) {
+    while (HAL_UART_Transmit(&hDiscoUart, (uint8_t *)&ch, 1, HAL_MAX_DELAY) != HAL_OK) {
+    }
+    return ch;
+}
+
+/* System Clock Configuration */
+void SystemClock_Config(void) {
+    RCC_OscInitTypeDef RCC_OscInitStruct = {0};
+    RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
+
+    __HAL_RCC_PWR_CLK_ENABLE();
+    __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
+
+    RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_MSI;
+    RCC_OscInitStruct.MSIState = RCC_MSI_ON;
+    RCC_OscInitStruct.MSICalibrationValue = RCC_MSICALIBRATION_DEFAULT;
+    RCC_OscInitStruct.MSIClockRange = RCC_MSIRANGE_6; // 4 MHz
+    RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
+
+    if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) {
+        while (1);
+    }
+
+    RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK |
+                                  RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2;
+    RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_MSI;
+    RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
+    RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
+    RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
+
+    if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK) {
+        while (1);
+    }
+}
+