Tugas Pendahuluan 2





1. Prosedur  [Kembali]

  1. Buka web WOKWI.COM dan cari STM 32 NUCLEO C031C6
  2. Rangkai komponen sesuai dengan gambar rangkaian di modul
  3. Klik pada Library Manager untuk membuat file baru yang bernama main.h dan main.c
  4. Masukan program yang telah di buat sesuai kondisi pada kedua file tersebut
  5. Simulasikan

2. Hardware dan Diagram Blok  [Kembali]

1. STM32 NUCLEO-G474RE



2. Float Switch



3. Infrared Sensor


4. Resistor


5. Buzzer



6. LED 

7. Push Button

 Diagram Blok 

3. Rangkaian Simulasi dan Prinsip Kerja  [Kembali]




  • Pemicu Awal: Begitu Switch digeser ke posisi ON, aliran arus memberikan sinyal input ke mikrokontroler untuk memulai urutan perintah.

  • Siklus Cahaya: Sistem secara otomatis mengeksekusi transisi warna pada LED RGB, dimulai dari Merah, beralih ke Hijau, dan berakhir di Biru, dengan masing-masing warna menetap tepat selama 0,5 detik.

  • Sinyal Suara: Segera setelah siklus cahaya selesai, Buzzer memberikan respon auditif berupa dua kali bunyi pendek ("Beep-Beep") sebagai indikasi bahwa sistem telah aktif sepenuhnya.

  • Kondisi Akhir: Rangkaian kemudian berada dalam posisi siaga (standby), menunggu instruksi atau perubahan logika selanjutnya dari interaksi pengguna.

4. Flowchart dan Listing Program  [Kembali]

 a. Flowchart 




 b. Listing Program

main.c :
#include "main.h"

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

int main(void)
{
  HAL_Init();
  SystemClock_Config();
  MX_GPIO_Init();
 
  // Variabel untuk melacak status switch sebelumnya (Edge Detection)
  uint8_t prev_switch_state = GPIO_PIN_RESET;

  while (1)
  {
    // Baca status switch saat ini
    uint8_t current_switch_state = HAL_GPIO_ReadPin(BUTTON_REVERSE_GPIO_Port, BUTTON_REVERSE_Pin);

    // KONDISI 1: Switch baru saja berubah dari OFF ke ON (Rising Edge)
    if (current_switch_state == GPIO_PIN_SET && prev_switch_state == GPIO_PIN_RESET)
    {
      // Matikan semua output terlebih dahulu
      HAL_GPIO_WritePin(LED_RED_GPIO_Port, LED_RED_Pin, GPIO_PIN_RESET);
      HAL_GPIO_WritePin(LED_GREEN_GPIO_Port, LED_GREEN_Pin, GPIO_PIN_RESET);
      HAL_GPIO_WritePin(LED_BLUE_GPIO_Port, LED_BLUE_Pin, GPIO_PIN_RESET);
      HAL_GPIO_WritePin(BUZZER_GPIO_Port, BUZZER_Pin, GPIO_PIN_RESET);

      // 1. Merah menyala 0.5 detik
      HAL_GPIO_WritePin(LED_RED_GPIO_Port, LED_RED_Pin, GPIO_PIN_SET);
      HAL_Delay(500);
      HAL_GPIO_WritePin(LED_RED_GPIO_Port, LED_RED_Pin, GPIO_PIN_RESET);

      // 2. Hijau menyala 0.5 detik
      HAL_GPIO_WritePin(LED_GREEN_GPIO_Port, LED_GREEN_Pin, GPIO_PIN_SET);
      HAL_Delay(500);
      HAL_GPIO_WritePin(LED_GREEN_GPIO_Port, LED_GREEN_Pin, GPIO_PIN_RESET);

      // 3. Biru menyala 0.5 detik
      HAL_GPIO_WritePin(LED_BLUE_GPIO_Port, LED_BLUE_Pin, GPIO_PIN_SET);
      HAL_Delay(500);
      HAL_GPIO_WritePin(LED_BLUE_GPIO_Port, LED_BLUE_Pin, GPIO_PIN_RESET);

      // 4. Buzzer berbunyi pendek 2 kali ("Beep-Beep")
      for(int i = 0; i < 2; i++) {
        HAL_GPIO_WritePin(BUZZER_GPIO_Port, BUZZER_Pin, GPIO_PIN_SET);
        HAL_Delay(100); // Bunyi
        HAL_GPIO_WritePin(BUZZER_GPIO_Port, BUZZER_Pin, GPIO_PIN_RESET);
        HAL_Delay(100); // Jeda
      }
    }

    // KONDISI 2: Logika utama berjalan saat Switch dalam posisi ON
    if (current_switch_state == GPIO_PIN_SET)
    {
      // Cek sensor IR
      if (HAL_GPIO_ReadPin(IR_SENSOR_GPIO_Port, IR_SENSOR_Pin) == GPIO_PIN_RESET)
      {
        // Asumsi: RESET berarti tidak ada objek (Sesuai coding awalmu)
        HAL_GPIO_WritePin(LED_GREEN_GPIO_Port, LED_GREEN_Pin, GPIO_PIN_SET);
        HAL_GPIO_WritePin(LED_RED_GPIO_Port, LED_RED_Pin, GPIO_PIN_RESET);
        HAL_GPIO_WritePin(LED_BLUE_GPIO_Port, LED_BLUE_Pin, GPIO_PIN_RESET);
        HAL_GPIO_WritePin(BUZZER_GPIO_Port, BUZZER_Pin, GPIO_PIN_RESET);
      }
      else
      {
        // Asumsi: SET berarti ada objek terdeteksi
        HAL_GPIO_WritePin(LED_GREEN_GPIO_Port, LED_GREEN_Pin, GPIO_PIN_RESET);
        HAL_GPIO_WritePin(LED_RED_GPIO_Port, LED_RED_Pin, GPIO_PIN_SET);
        HAL_GPIO_WritePin(LED_BLUE_GPIO_Port, LED_BLUE_Pin, GPIO_PIN_RESET);
        HAL_GPIO_WritePin(BUZZER_GPIO_Port, BUZZER_Pin, GPIO_PIN_SET);
      }
    }
    // KONDISI 3: Switch dalam posisi OFF (Stanby)
    else
    {
      HAL_GPIO_WritePin(LED_GREEN_GPIO_Port, LED_GREEN_Pin, GPIO_PIN_RESET);
      HAL_GPIO_WritePin(LED_RED_GPIO_Port, LED_RED_Pin, GPIO_PIN_RESET);
      HAL_GPIO_WritePin(LED_BLUE_GPIO_Port, LED_BLUE_Pin, GPIO_PIN_RESET);
      HAL_GPIO_WritePin(BUZZER_GPIO_Port, BUZZER_Pin, GPIO_PIN_RESET);
    }
 
    // Simpan status switch saat ini untuk iterasi loop berikutnya
    prev_switch_state = current_switch_state;
   
    HAL_Delay(50); // Debounce delay
  }
}
 
void SystemClock_Config(void)
{
  RCC_OscInitTypeDef RCC_OscInitStruct = {0};
  RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
 
  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();
  }
 
  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK |
RCC_CLOCKTYPE_SYSCLK
                              | RCC_CLOCKTYPE_PCLK1;
 
  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;
  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;

  if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK)
  {
    Error_Handler();
  }
}
 
static void MX_GPIO_Init(void)
{
  GPIO_InitTypeDef GPIO_InitStruct = {0};
 
  __HAL_RCC_GPIOA_CLK_ENABLE();
  __HAL_RCC_GPIOB_CLK_ENABLE();
 
  // Inisialisasi Input (Switch di PA0, IR Sensor di PA1)
  GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1;
  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  GPIO_InitStruct.Pull = GPIO_PULLDOWN;
  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
 
  // Inisialisasi Output (Ditambahkan GPIO_PIN_3 untuk LED Biru)
  GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
}
 
void Error_Handler(void)
{
  __disable_irq();
  while (1)
  {
  }
}

main.h
#ifndef __MAIN_H
#define __MAIN_H

#ifdef __cplusplus
extern "C" {
#endif

#include "stm32c0xx_hal.h"

void Error_Handler(void);

#define BUTTON_REVERSE_Pin       GPIO_PIN_0
#define BUTTON_REVERSE_GPIO_Port GPIOA

#define IR_SENSOR_Pin            GPIO_PIN_1
#define IR_SENSOR_GPIO_Port      GPIOA  

#define LED_GREEN_Pin            GPIO_PIN_0
#define LED_GREEN_GPIO_Port      GPIOB

#define LED_RED_Pin              GPIO_PIN_1
#define LED_RED_GPIO_Port        GPIOB

#define BUZZER_Pin               GPIO_PIN_2
#define BUZZER_GPIO_Port         GPIOB

// Tambahan pin untuk LED Biru
#define LED_BLUE_Pin             GPIO_PIN_3
#define LED_BLUE_GPIO_Port       GPIOB

#ifdef __cplusplus
}
#endif

#endif


5. Video Demo  [Kembali]


6. Kondisi  [Kembali]

Buatlah rangkaian seperti pada gambar percobaan 2 dengan kondisi ketika Switch baru saja berubah dari OFF ke ON, seluruh warna LED RGB (Merah, Hijau, Biru) menyala bergantian selama 0,5 detik dan Buzzer berbunyi pendek 2 kali ("Beep-Beep").

7. Video Simulasi  [Kembali]


8. Download File  [Kembali]

 Rangkaian Simulasi Link



Komentar

Postingan populer dari blog ini

Tugas Besar

Cover