[아두이노] 아두이노 코딩 변수

IOT/아두이노기초문법|2019. 4. 10. 09:00

[아두이노] 아두이노 코딩 변수



오늘은 예전에 아두이노 변수란 포스팅을 한 적이 있습니다. 불가피하게 이번 연재한 포스트의 흐름을 이여가기 위해서 약간은 중복된 내용이 포함되게 되었네요. 참고로 오늘 내용은 변수에 대해서 간단히 살펴보고 변수를 사용하여 코딩하는 것 까지 다루도록 하겠습니다.

1. 아두이노의 변수


이 부분은 자세히 참고 포스트에서 설명했지만 처음부터 다시 시작한다는 기분으로 간단히 복습 차원으로 짧게 기초만 알아둘 것만 정리하겠습니다.


자료형은 담을 수 있는 그릇이고 변수는 그 그릇의 이름입니다. C에서는 변수를 선언할때 변수의 크기인 자료형을 선언해줘야 합니다. 사용할 변수에는 자료형이 무조건 선언된다고 암기해 주세요.

char A = 'a';

char은 문자형 그릇이고 A라는 이름을 가집니다. A라는 그릇에 'a'라는 문자를 저장합니다.

int B = 123;

int은 정수형 그릇이고 B라는 이름을 가집니다. B라는 그릇에 '123' 이라는 숫자를 저장합니다.

float C = 123,12;

float은 실수형 그릇이고 C라는 이름을 가집니다. C라는 그릇에 '123.12'이라는 실수를 저장합니다.


위의 그림처럼 그릇의 크기가 대충 이런 느낌이라고 생각하시면 됩니다.


자료형 범위

  • 1 Bytes => -128~127
  • 2 Bytes => -32768~32767
  • 4 Bytes => -2147483648 ~2.147.483.647

그냥 작은수, 큰수, 실수 이정도로만 생각하시고 넘어가세요. 나중에 코딩하다보면 자연스럽게 자료형을 뭘 써야지 알게 됩니다. 아두이노에서 핀번호를 지정한다면 byte로 하면 가장 알맞겠죠. 그리고 아날로그 출력은 0~255 사이의 값이니깐 대충 int 변수겠죠. 아날로그입력도 0~1024니깐 int 정도면 되겠죠. 뭔가 복잡한 실수 계산이 들어가면 float 실수형으로 선언하면 되겠죠.

간단히, 작은 정수는 byte, 큰 정수면 int or long , 실수면 float or double 형으로 선택하셔서 자료형을 선언한다고 머리속에 넣어두세요.

그외,

boolean D = true; //참거짓에 사용되는 자료형
byte E =1;  //1byte 크기의 자료형
long F = 123; //int자료형과 같은데 그릇의 크기가 4byte으로 int형보다 더 크다.
double G =123,23; //float형보다 더 큰 그릇인데 아두이노에서 4byte 크기로 동일하게 나오네요. 

결론, 변수는 값을 담는 그릇이라고 생각하시면 됩니다.

[ 코딩 ]

void setup()
{
  Serial.begin(9600);

  char A = 'a';
  int B =123;
  float C =123.23;

  Serial.println(A);
  Serial.println(B);
  Serial.println(C);  

}
void loop()
{  
}

결과만 보기 위해서 처음 한번만 수행하는 setup()함수에 코딩했습니다. 각 자료형 별 변수들에 저장된 값들을 시리얼모니터로 출력을 하면 아래와 같습니다.


변수에 값을 저장할 수 있고 그 값을 이제 시리얼모니터에 출력할 수 있게 되었습니다. 여기까지 따라오셨나요.

2. 사칙연산 코딩


프로그램 코딩은 수학과 아주 밀접한 관계가 있습니다. 덧셈을 하나 생각해 볼까요.

예) 임의의 두 수 a, b를 더하는 식을 만드세요.

S = a + b

위 식은 초등학교 기초 수학시간에 배웠을 꺼에요. 이 표현은 코딩에서는 어떻게 표현되냐면 변경없이 그대로 적용됩니다.

S = a + b;

이렇게 세미콜론(;)만 뒤에 붙이고 그대로 코딩하시면 됩니다. 바뀐건 세미콜론(;) 하나 추가된 것 밖에 없죠. 어떻게 보면 코딩은 우리가 처리하고자 하는 명령들을 수학공식과 같은 형식으로 식을 만들고 그 식을 그대로 코딩하는 거라고 생각하시면 쉬울꺼에요.

그러면, 수학 사칙연산 프로그램을 만들어 볼까요.


사칙연산 표현을 그대로 그냥 동일하게 표현 하시면 됩니다. 덧셈, 뺄셈, 곱셈, 나눗셈을 하고 그 값을 저장하는 변수만 선언해주면 됩니다.

void setup()
{
  Serial.begin(9600);

  int A = 10;
  int B = 2;
  int addAB = 0;
  int subAB = 0;
  int mulAB = 0;
  int divAB = 0;
  
  addAB = A + B;
  subAB = A - B;
  mulAB = A * B;
  divAB = A / B;
  
  Serial.println(addAB);
  Serial.println(subAB);
  Serial.println(mulAB);  
  Serial.println(divAB);  

}

addAB, subAB, mulAB, divAB라는 4개의 저장변수를 선언했고 해당 식을 수행하면 아래과 같은 결과가 시리얼 모니터로 출력됩니다.


10+2 = 12
10-2 = 8
10*2 = 20
10/2 = 5 

여기까지 따라 오셨나요.

3. 삼각형의 넓이 구하는 프로그램을 만들자



  • 공식 : S= 1/2ah

수학시간에 배우셨죠. 삼각형의 넓이 공식을 떠올려 보세요. 위 공식이 프로그램 전부입니다. 이걸 코딩을 하면

S= (float)1/2*a*h;

세미콜론(;)만 붙이고 곱셈부분은 곱셈기호(*)를 붙여 줍니다. 그리고 계산된 값이 실수 형태로 저장될려면 (float)을 붙여줘야 합니다. 그 이유는 정수/정수는 결과가 정수가 되기 때문에 실수형으로 저장하기 위해서는 이 문장을 표현해야 합니다. 그냥 단순한 수학 공식인데 세미콜론(;)을 붙이니깐 프로그램 로직 명령어가 되었네요. 이렇게 수학적인 표현을 하는게 코딩입니다. 이건 순수 수학의 표현이고요. 이런 의미로 일상의 표현 특정한 동작의 표현을 공식으로 만들고 그걸 그대로 코딩하면 프로그램 코딩이 됩니다. 어렵게 생각하실 필요가 없어요.

실제 돌아가는걸 확인해 볼까요. 공식을 보면 필요한 변수가 3개 입니다. 밑변, 높이, 삼각형넓이 변수가 필요합니다.

void setup()
{
  Serial.begin(9600);

  int a = 10;
  int h = 5;
  float S =0;
    
    //삼각형 넓이 공식
    S = (float) 1/2*a*h;
    
  Serial.print("base : ");
  Serial.println(a);
  Serial.print("height  : ");
  Serial.println(h);
  Serial.println("Area of triangles : ");  
  Serial.println(S);  

}


[ 결과 ]


밑변(a)와 높이(h)의 값만 바꾸면 모든 삼각형의 넓이를 구할 수 있는 프로그램을 완성했습니다. 그렇게 어렵지 않죠. 이렇게 식을 만들고 그 식을 그대로 코딩하면 그게 프로그램이 됩니다. 이 의미만 오늘 기억하시면 됩니다.

(float) 1/2 * a * b

이부분이 약간 햇갈릴 수 있기 때문에 다시 설명합니다. C언어에서는 정수/정수는 정수가 출력됩니다. 즉, 실수값이 나와도 그 값은 정수형으로 나와버린다는 것이죠. 실수값을 얻기 위해서는 다음과 같은 표현으로 식을 만들어야 합니다.

정수/실수 or 실수/정수 or (flaot) 정수/정수

이렇게 세가지 표현 중에서 하나를 선택해서 표현 하시면 됩니다. 입력값이 a, h가 정수임으로 위 나눗셈이 들어간 식에서는 저장변수가 실수변수여서 식 앞에 (float)형으로 선언하게 된 것이죠. 이 표현은 해당 자료형으로 저장하겠되는 의미입니다.

여러분들도 한번 생각 나는 수학공식을 제가 코딩했던 스타일로 표현을 해 보세요. 위에서 사칙연산을 수행한 계산 값을 출력했는데 뭘 계산한지 모르잖아요 보기 좋게 하기 위해서 이번에는 print(), println()함수로 어떤 값들을 계산했고 결과가 뭔지 출력문에 담았습니다. 이런 표현들을 꼭 숙지하시고 이해해 주세요.

이렇게 해서 대충 변수를 사용하는 방식을 알아 봤습니다.

4. 코딩의 과정



  • 입력단계 : 변수를 선언해서 그 값을 직접 입력하거나 아니면 외부로 부터 값을 입력을 받는다.
  • 처리단계 : 입력된 값을 위에서 수행한 사칙연산과 같은 원하는 동작의 계산식을 만든다.
  • 출력단계 : 결과를 외부로 보내거나 특정한 위치에 출력한다.

무조건 이 과정으로 코딩을 한다는 점 꼭 기억해 주세요. 그러면 아두이노를 생각해 볼까요. 예를 든다면 아두이노에서 센서의 값을 읽으면 입력부분이 되고 그 입력된 센서의 값을 특정한 동작을 수행하도록 하는 표현식(계산식)이 처리단계가 됩니다. 그 결과를 실질적으로 보여지는게 출력 단계입니다.

여러분들이 이제 코딩을 하게 되면 "입력 ->처리->출력" 이걸 머리속에 꼭 담고 코딩를 해주세요.

어떤 값을 받을 것인지!
그 값을 받았으면 어떻게 처리할 것인지!
최종적으로 어떻게 보여질 것인지!

이 개념을 머리속에 담고 코딩을 전개해 나가시면 됩니다.

마무리


오늘은 변수의 자료형인 문자형, 정수형, 실수형 표현을 배웠으며 그 변수를 이용하여 수학공식을 프로그램 코딩을 해 보았습니다. 그리고 마지막으로 코딩은 어떤식으로 이루어지는지 그 과정을 간단히 살펴보았습니다.

프로그램 언어를 배우면 젤 먼저 사칙연산을 코딩하게 됩니다. 그리고 더 관심이 생기면 이 원리를 이용해서 공업용 계산기를 만들기도 합니다. 저도 처음에 사칙연산을 배우고 나서 젤 먼저 공업용 계산기를 코딩을 해 봤고 더 나아가 전자 회로로 계산기도 응용해서 표현을 해 봤네요. 뭔가 원리를 배우면 이걸 어디에다 써먹을까 상상의 나래를 잘 펼치거든요. 여러분들도 오늘 사칙연산과 삼각형의 넓이 구하는 식을 코딩으로 배웠습니다.
여러분들은 이걸 토대로 상상의 나래를 펼쳐보세요. 난 이 원리로 뭘 만들어 볼까하고 계속 상상을 하셔야 응용력이 생겨 새로운것을 만들 수 있게 됩니다.

더 내용을 추가 할 부분이 있었지만 너무 많이 설명하고 깊게 들어가면 오히려 역효과가 날 것 같아서 이부분은 이정도로 마무리 하겠습니다.

프로그램 코딩을 너무 어렵게 생각하지 마시고 그냥 수학식을 하나 만든다고 생각하시고 그 식을 그대로 코딩하면 그게 코딩이 되니깐 어렵게 생각 안하셔도 돼요.

댓글()