3D프린터와 아두이노/아두이노

제어문 - 조건문 : if문

메카럽 2020. 9. 9. 10:12

안녕하세요. 메카럽입니다.

이번 포스팅에서는 프로그래밍을 할 때 조건을 부여하는 방법으로 "만약"이라는 조건에 대해 알아보려 합니다.

조건문과 반복문은 작은 마이크로컨트롤러를 활용한 장치, 시제품에 빠지지 않고 들어가는 중요한 구문입니다. 조건문은 if, else if, 그리고 else로 만들어지며 센서로 측정한 결과값, 시간의 흐름 등 사전에 설정된 어떤 조건에 의해 다음 구문이 실행됩니다. 어떤 조건을 주고 해당 조건에 도달하면 미리 약속된 실행을 수행하는 것입니다. 또는 어떤 조건에서 반복하는 구문을 for나 while 함수를 이용해 만들어 볼 수도 있습니다.

 

■ 조건문 : if문

if와 else if, else로 이루어진 구문을 if문이라고 하며, 이는 주어진 조건을 확인하고 그 조건이 "참"이면 해당하는 영역의 코드를 실행합니다. 다음 코드는 기본적인 if문의 구조를 나타내고 있습니다. if뒤에 소괄호 ( ) 내에 조건을 만들고, 해당 조건이 일치하면 그 뒤의 중괄호 { } 내의 코드를 실행합니다. 만약 if 뒤의 조건이 맞지 않으면 그 다음에 있는 else if 문을 검사하고, 이 조건 또한 맞지 않으면 else 문 내의 코드를 실행 시킵니다.

앞으로 발생할 수 있는 모든 상황에 관한 결과를 설정해주는 것으로 생각해보겠습니다. 가위바위보 게임에서 상대방의 수를 예측하고 나의 수를 알려주는 프로그램이 있다고 가정해보면 먼저 가위바위보 게임에서는 "가위", "바위", "보" 외에 다른 상태는 존재하지 않습니다. 상대방이 가위를 내면 나는 바위를, 바위를 내면 보를 , 보를 내면 가위를 내는 것이 이기는 구조입니다. 서로 비기게 만들거나 내가 지는 조건도 있습니다.

기본적인 if문 구조

if (조건 1)
{
  조건 1이 참일 때 수행할 코드
}

else if (조건 2)
{
  조건 2가 참일 때 수행할 코드
}

else
{
  나머지 조건(조건 1과 조건 2에도 해당하지 않는 나머지 모든 조건)에서 수행할 코드
}

다음은 상대방의 수를 보고 가위바위보 게임을 이기는 조건을 if문으로 나타내었습니다. 가위바위보 게임에서 가위와 바위를 제외한 상태는 "보"밖에 없으므로 마지막 조건은 else 하나로 구성할 수 있습니다.

if 상대방이 가위이면
{
  나는 바위를 낸다.
}

else if 상대방이 바위이면
{
  나는 보를 낸다.
}

else
{
  나는 가위를 낸다.
}

조건문 if문 하나만 있거나, if, else문 각 하나씩 있거나, if, esle if,  else문이 각각 있거나, if, else if, 또다른 else if..., else문 등 여러 가지의 조건으로도 존재할 수 있습니다. 다음의 코드는 k값에 따라 LED를 제어하는(HIGH 또는 LOW) 슈도 코드로 조건문의 기본적인 형태를 나타내고 있습니다.

if k > 500
{
  LED_1 HIGH;  // k가 500보다 크면 LED_1을 켜고(HIGH)
}

else if k < 500
{
  LED_2 LOW;  // k가 500보다 작으면 LED_1을 끄고(LOW)
}

else
{
  LED_1 HIGH;  // k값이 500이면(500보다 크거나, 작은 경우를 제외하면 같은 경우만 남습니다.)
  delay(1000);
  LED_1 LOW;  // 1000ms 단위로 LED_1을 켰다가 끄기를 반복합니다.
  delay(1000);
}

이번에는 센서를 활용하는 if문과 LED 제어를 다뤄보겠습니다. 주위 조도에 비례하여 0~1023의 값을 출력하는 조도센서가 있다고 가정하고, 해당 센서에서 출력되는 결과값을 아두이노로 입력받아 여러 개의 디지털 핀에 연결된 개별 LED 스위치를 제어합니다.

조도센서는 A0핀에 연결되어 있으며, 주변의 조도 변화에 따른 전압의 변화, 즉 아날로그 포트를 통해 아날로그값을 출력합니다. 네 개의 LED는 각각 D3, D5, D6, D9에 연결됩니다.

조도센서와 LED제어

const int Sensor = A0;

const int LED_1 = 3;

const int LED_2 = 5;
const int LED_3 = 6;
const int LED_4 = 9;

int Sensor_Value = 0;

void setup( )
{
  pinMode(Sensor, INPUT);
  pinMode(LED_1, OUTPUT);
  pinMode(LED_2, OUTPUT);
  pinMode(LED_3, OUTPUT);
  pinMode(LED_4, OUTPUT);
}

void loop( )
{
  digitalWrite(LED_1, LOW);
  digitalWrite(LED_2, LOW);
  digitalWrite(LED_3, LOW);
  digitalWrite(LED_4, LOW);

  Sensor_Value = analogRead(Sensor);

  if ((0<= Sensor_Value)&&(Sensor_Value<250))
  {
    digitalWrite(LED_1, HIGH);
    delay(3000);
  }

  else if ((250 <= Sensor_Value)&&(Sensor_Value < 500))
  {
    digitalWrite(LED_2, HIGH);
    delay(3000);
  }

  else if ((500<=Sensor_Value)&&(Sensor_Value < 750))
  {
    digitalWrite(LED_3, HIGH);
    delay(3000);
  }

  else if ((750<=Sensor_Value)&&(Sensor_Value < 1000))
  {
    digitalWrite(LED_4, HIGH);
    delay(3000);
  }

  else
  {
    digitalWrite(LED_4, HIGH);
    delay(1000);
    digitalWrite(LED_4, LOW);
    delay(3000);
  }
}

이번 포스팅에서는 if문에 대해 알아보았습니다. 조건부를 부여하는 것이라고 이해하시면 될 것 같습니다. 우리가 사용하는 제품에는 여러가지 조건이 부여로 인해 작동이 되고 있어 이번 포스팅은 공부하면서도 이해가 크게 어렵지 않았던 것 같습니다. 다음 포스팅에서는 반복문 for문에 대해 알아보도록 하겠습니다.

오늘 하루도 행복하세요.

728x90