BG MVC Model View Controller eğitim serisi yayında...

Ana sayfa > Programlama > C Gömülü Programlama > Led işlemleri (USER buton ile)

Led işlemleri (USER buton ile)

Bu bölümde, elimizdeki F401-RE kart üzerindeki USER buton ile LED'i yakıp söndürmemizi sağlayan programı Mbed ve STM32CubeIDE yoluyla yazmaya çalışacağız.

USER buton ile kart üzerindeki LED'i yakıp söndürme (Mbed ile)

Kart üzerindeki USER butonunun durumuna bağlı olarak LED'i yakıp söndürür.

Kart üzerindeki kullanıcı LED’ini yakıp söndürmek için DigitalOut kontrolü için kart üzerindeki USER butonu kullanılır.

1. Önce buradaki talimatları uygulayarak, Mbed OS online geliştirme ortamında yeni bir program oluşturalım.

2. main.cpp dosyası içine aşağıdaki kodları yazarak kaydedelim:


#include "mbed.h"

DigitalIn myButton(USER_BUTTON);
DigitalOut myLED(LED3);

int main() {
    while (1) {
      if (!myButton) { // Butona basıldığında 0 gönderir.
          myLED = 1; // LED yanar.
          wait(0.5); // 500 ms. bekleme
          myLED = 0; // LED söner.
          wait(0.5); // 500 ms. bekleme
      }
    }
    
	return 0;
}

3. Programı derleyelim ve elde ettiğimiz .bin uzantılı dosyayı bilgisayarımıza kaydedelim.

4. Bilgisayarımıza kaydettiğimiz .bin uzantılı dosyayı, kart bilgisayara bağlandığında Windows Explorer’da görünen flash bellek içine kopyalayalım.

5. Windows Explorer'da kartı temsil eden sürücüye kopyaladığımız .bin uzantılı dosya kart tarafından otomatik olarak okunarak çalıştırılır. Kart kendini resetler ve .bin uzantılı dosya silinir.

6. Program çalışmaya başladığında, kart üzerindeki USER butonuna bastığımızda LED 500 msn aralıklarla yanıp söner, butonu bıraktığımızda yanıp sönme işlemi sona erer.

USER buton ile kart üzerindeki LED'i yakıp söndürme (STM32CubeIDE ile)

1. Önce buradaki talimatları uygulayarak, STM32CubeIDE ortamında yeni bir proje oluşturalım.

2. main.c dosyasının içindeki kodları aşağıdaki şekilde düzenleyerek kaydedelim:


int main(void)
{
  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* Configure the system clock */
  SystemClock_Config();

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_USART2_UART_Init();

  /* USER CODE BEGIN 2 */
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */
	if(!HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_13)) { // !(GPIOC->IDR & (1<<13))
	   HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET); // GPIOA->ODR |= (1<<5);
	   HAL_Delay(500);
	   HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET); // GPIOA->ODR &= ~(1<<5);
	   HAL_Delay(500);
	}
    /* USER CODE BEGIN 3 */
  }
}

LED'in yanma ve sönük kalma süresi aynı ise, while döngüsü içindeki kodları aşağıdaki şekilde de düzenleyebiliriz:


while (1)
{
  /* USER CODE END WHILE */
  if(!HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_13)) {
     HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5);
     HAL_Delay(500);
  }
}

3. Programı derleyelim.

4. Doğrudan Run butonuna basarak veya elde ettiğimiz .bin uzantılı dosyayı, kart bilgisayara bağlandığında Windows Explorer’da görünen flash bellek içine kopyalayalım.

5. Program kart tarafından otomatik olarak okunarak çalıştırılır. Kart kendini resetler.

6. Program çalışmaya başladığında, kart üzerindeki USER butonuna bastığımızda LED 500 msn aralıklarla yanıp söner, butonu bıraktığımızda yanıp sönme işlemi sona erer.