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

Ana sayfa > Programlama > C Gömülü Programlama > Led işlemleri (4x4 keypad ile)

Led işlemleri (4x4 keypad ile)

Bu bölümde, 4x4 matrix keypad üzerinde yer alan butonlardan birine (bu örnekte ilk buton) basarak, elimizdeki F401-RE kart üzerindeki LED'i yakıp söndürmemizi sağlayan programı Mbed ve STM32CubeIDE yoluyla yazmaya çalışacağız.

  • Mikrodenetleyiciye dijital bir giriş sinyali verilir, sonuç LED3 yakılarak kontrol edilir.
  • Bu işlem için, mikrodenetleyici kartı ile 4x4 matrix keypad arasında bağlantı sağlamak için bir adet breadboard, bir adet 1 K direnç ve 5 adet bağlantı kablosuna (3 adet erkek-erkek ve 2 adet erkek-dişi) ihtiyacımız var.
  • Dijital sinyal girişi (Digital I/O) almak için kart üzerindeki POWER out portunu kullanacağız.

Program için kullanacağımız devre aşağıdaki şekilde gösterildiği şekilde hazırlanacaktır:

4x4 matrix keypad ile kart üzerindeki LED'i yakıp söndürme (Mbed ile)

4x4 matrix keypad üzerinde yer alan butonlardan birine (bu örnekte ilk buton) bastığımızda, F401-RE kart üzerinden dijital bir giriş sinyali verilir ve LED yanıp sönmeye başlar. Butonu bıraktığımızda LED'in yanp sönme işlemi sona erer.

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 myInput(D2);
DigitalOut myLED(LED3);

int main() {
    while (1) {
       if (!myInput) {
           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, 4x4 matrix keypad üzerinde yer alan butonlardan birine 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.

4x4 matrix keypad 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. Projemize verdiğimizin isme sahip .ioc uzantılı dosyaya tıkladığımızda karşımıza gelen pencerede PA10 kutusuna tıkladığımızda karşımza gelen seçeneklerden GPIO_Input seçeneğini seçelim:

3. Bu işlemi gerçekleştirdiğimizde, aşağıda gösterilen kodlar projemizin main.c dosyası içindeki MX_GPIO_Init fonksiyonunun sonuna eklenir.


  /*Configure GPIO pin : PA10 */
  GPIO_InitStruct.Pin = GPIO_PIN_10;
  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

4. 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(GPIOA, GPIO_PIN_10)) { // Keypad üzerindeki buton basılı ise yanıp sönme işlemi gerçekleşir.
	   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(GPIOA, GPIO_PIN_10)) { // Keypad üzerindeki buton basılı ise yanıp sönme işlemi gerçekleşir.
     HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5);
     HAL_Delay(500);
  }	 
}

5. Programı derleyelim.

6. 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.

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

8. Program çalışmaya başladığında, 4x4 matrix keypad üzerinde yer alan butonlardan birine 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.