// Salcedo, Ju;ie Erica I. 
// BS CpE 3A
// Prelim Activity 2 - Programming for Embedded Systems
// https://wokwi.com/projects/389524785197297665

#include "stm32c0xx_hal.h"

void SystemClock_Config(void);
void MX_GPIO_Init(void);

int main(void) {

  HAL_Init();
  SystemClock_Config();
  MX_GPIO_Init();

  uint8_t btnState1;
  uint8_t btnState2;
  uint8_t btnState3;
  uint8_t btnState4;
  uint8_t btnState5;


  while (1) {
  
    btnState1 = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_5);
    btnState2 = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_8);
    btnState3 = HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_15);
    btnState4 = HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_14);
    btnState5 = HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_13);

    if (btnState1 == GPIO_PIN_SET) {

        HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_2); 
      }

    if (btnState2 == GPIO_PIN_SET) {

        HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_7); 
      }
  
    if (btnState3 == GPIO_PIN_SET) {

        HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_6); 
      }

  if (btnState4 == GPIO_PIN_SET) {
        HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_15); 
      }
  
  if (btnState5 == GPIO_PIN_SET) {

        HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_3); 
      }
  }
}

void SystemClock_Config(void) {
    RCC_OscInitTypeDef RCC_OscInitStruct = {0};
    RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};

    __HAL_RCC_PWR_CLK_ENABLE();
  
    RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
    RCC_OscInitStruct.HSIState = RCC_HSI_ON;
    RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;

    if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) {
        Error_Handler();
    }
}

void MX_GPIO_Init(void) {
  
  // Initialize GPIO strucures
  GPIO_InitTypeDef GPIO_InitStruct = {0};

  // Enables GPIO Port A & B clock
  __HAL_RCC_GPIOA_CLK_ENABLE();
  __HAL_RCC_GPIOB_CLK_ENABLE();
  __HAL_RCC_GPIOC_CLK_ENABLE();
  __HAL_RCC_GPIOF_CLK_ENABLE();


  //FOR OUTPUT OF LED PIN
  // Configure GPIO PA3, PC15
  GPIO_InitStruct.Pin = GPIO_PIN_2 | GPIO_PIN_7| GPIO_PIN_6 | GPIO_PIN_15 | GPIO_PIN_3;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
  HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
  HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
  
  //FOR INPUT OF SWITCH PIN
  // Configure GPIO PA5, PA8
  GPIO_InitStruct.Pin = GPIO_PIN_5 | GPIO_PIN_8 ;
  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

  // Configure GPIO PB15, PB,14, PB13
  GPIO_InitStruct.Pin = GPIO_PIN_15 | GPIO_PIN_14 | GPIO_PIN_13;
  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);


}
$abcdeabcde151015202530354045505560fghijfghij