Tutorial 7 - Working with Switch part 2

STM32F4Discovery Tutorial 7 - Switch part 2

This is the second part of the previous tutorial. In this tutorial we will be actually writing the code. We have already setup the circuit in the previous tutorial. So in this we will directly start with writing the code for working with switch. We will make program in such a way that we will be controlling the leds with the switch. In this tutorial we will also learn about a new term called de bouncing effect. And how we can solve that problem with the help of few lines of code. All this we will learn in this tutorial.

#include "stm32f4xx.h"

GPIO_InitTypeDef GPIO_InitLed;

void Delay(__IO uint32_t nCount){
        while(nCount--){
        }
}

int press = 0;

int main(void)
{

        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);

        GPIO_InitLed.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3;
        GPIO_InitLed.GPIO_Mode = GPIO_Mode_OUT;
        GPIO_InitLed.GPIO_OType = GPIO_OType_PP;
        GPIO_InitLed.GPIO_PuPd = GPIO_PuPd_NOPULL;
        GPIO_InitLed.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOD, &GPIO_InitLed);

        GPIO_InitLed.GPIO_Pin = GPIO_Pin_1;
        GPIO_InitLed.GPIO_Mode = GPIO_Mode_IN;
        GPIO_InitLed.GPIO_OType = GPIO_OType_PP;
        GPIO_InitLed.GPIO_PuPd = GPIO_PuPd_DOWN;
        GPIO_InitLed.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOA, &GPIO_InitLed);

  while (1)
  {
          if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_1) == Bit_SET)
          {
                  if(press == 0)
                  {
                          press = 1;
                  }
                  else
                  {
                          press = 0;
                  }
                  Delay(3000000);
          }

          if(press == 0)
          {
                  GPIO_WriteBit(GPIOD, GPIO_Pin_0, Bit_SET);
                  GPIO_WriteBit(GPIOD, GPIO_Pin_1, Bit_SET);
                  GPIO_WriteBit(GPIOD, GPIO_Pin_2, Bit_RESET);
                  GPIO_WriteBit(GPIOD, GPIO_Pin_3, Bit_RESET);
          }
          else
          {
                  GPIO_WriteBit(GPIOD, GPIO_Pin_0, Bit_RESET);
                  GPIO_WriteBit(GPIOD, GPIO_Pin_1, Bit_RESET);
                  GPIO_WriteBit(GPIOD, GPIO_Pin_2, Bit_SET);
                  GPIO_WriteBit(GPIOD, GPIO_Pin_3, Bit_SET);
          }
  }
}