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

C언어 기초 문법(아두이노 스케치 기본 구성)

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

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

이번 포스팅부터는 C언어 기초에 대해 포스팅하도록 하겠습니다. 기계만 다루었던 제가 C언어를 만지게 될 줄은 꿈에도 생각못했는데 어찌하다보니 여기까지 오게 되었습니다. 프로그램 언어는 너무나도 어려운 영역이라 공부하는데 애를 먹고 있습니다. 그래도 포기하지 않고 끝까지 해보려합니다.

오늘 포스팅에서 다룰 C언어 기초 문법 중 스케치 기본구성에 대해 알아보겠습니다.

아두이노의 다른 예제들을 살펴보기에 앞서 아두이노 스케치를 작성하기 위한 언어를 조금 알아보겠습니다. 아두이노 IDE는 C와 C++언어에 기반을 두고 있습니다. C와 C++을 쉽게 변형한 언어라고 말할 수 있는데, 그 뼈대는 크게 다르지 않습니다. 하지만 기초 문법은 전원 인터페이스 부분처럼 사소해 보이지만 놓치게 되면 디버깅에 꽤 애를 먹을 수 있는 부분이므로 가볍게라도 읽고 넘어가시기 바랍니다. 그리고 처음부터 문법에 너무 스트레스 받지 않았으면 합니다. 누구나 처음에는 같고, 특히나 아두이노는 짧은 구문으로 이것저것 바꿔볼 여지가 많기에 다른 언어 보다도 충분히 쉽게, 그리고 빨리 숙지할 수 있습니다. 처음 하시는 분들이라면 한 번 훑어보고 예제 몇 개를 업로드 하면서 컴파일 에러가 뜨거나, 잘 모르는 부분을 찾아 나가는 방법을 택하시기 바랍니다. 이 방법이 오히려 훨씬 빠르고 빨리 익히는 방법이 될 수 있습니다.

 

■ 스케치 기본 구성

IDE를 실행하면 흰색 배경의 스케치 입력창에는 다음과 같이 빈 함수 두 개가 나타납니다. 코드를 살펴보면 void setup( )과 void loop( )란 글자 이후 중괄호{ }와 회색 텍스트로 구성된 부분이 있습니다. 이 부분을 함수(Founction)라고 부르며, 유사한 목적을 갖는 작업 영역을 묶어둔 것이라고 보면 됩니다.

코드 상에 슬래시 두개(//)로 구성된 부분은 주석(Statement)이라고 부르며, 스케치에서 실행되는 부분이 아닌, 해당 영역에 대한 설명을 나타내기 위해 쓰는 내용입니다(주석은 회색으로 처리되어 있어 구분이 가능).

IDE 초기실행 화면

아두이노 스케치는 컴퓨터가 알아들을 수 있는 언어로 작성되어야 제대로 컴파일이 실행됩니다. 컴퓨터가 알아들을 수 있는 언어를 문법이라고 하며, 문법 공부를 위해 하나하나 뜽어서 살펴보기보다는 예제나 다른 사람이 작성한 슼케치 내에서 궁금한 부분을 찾아보는 편이 효율적입니다. 앞선 함수의 구성부터 살펴보면, 

출력할 데이터 타입 함수 이름(입력할 데이터 타입)
{
  처리할 내용
}

맨 앞에 출력할 데이터 타입'void', 그 다음에는 함수의 이름 'setup' 그리고 소괄호에는 입력할 데이터 타입{ }으로 구성되며, 중괄호 내에 처리할 내용을 작성합니다. 간단한 숫자 더하기 예제로 확인해보겠습니다.

int add(int a, int b)
{

 int c;
 c = a + b;
 return c;
}

덧셈 예제를 하나의 함수로 나타내었습니다. 예제의 구성을 하나하나 살펴보면,

int : 출력할 데이터 타입

add : 함수 이름

int a, int b : 입력할 데이터 타입

을 의미합니다. 여기서 int는 정수형 데이터 타입을 의미하는 integer(정수)의 약자입니다. 정수형 데이터를 연산하는 이 함수의 이름은 add이며, 입력되는 데이터는 정수형 데이터 타입을 갖는 변후 a와 b입니다. 중괄호 내의 처리 구문에서는 정수형 데이터 c를 선언해주고, 이어서 c를 산출하기 위한 수식(c=a+b)을 기입하였습니다. 연산을 수행하고 나서 그 결과인 c를 출력(리턴)합니다. 즉, add란 이 함수는 정수 a와 b를 입력받아 그 합인 c를 출력합니다.

물론 이 add 함수 하나만으로 스케치가 완성되지 않고 다음 코드처럼 setup( )함수와 loop( ) 함수 등 부가적인 요소들이 더 필요합니다.

void setup( )
{

 Serial.begin(9600);
 int sum;
 sum = add(4, 3);
 Serial.print("sum=");
 Serial.print(sum);
}

void loop( )
{
}

int add(int a, int b)
{
 int c;
 c = a+ b;
 return c;
}

앞의 코드를 함수별로 하나하나 살펴보겠습니다. 아두이노 스케치는 함수에 의해 작동한다고 해도 과언이 아닙니다. 앞의 코드에서 void setup( )과 void loop( ) 또한 각각 하나의 함수로, 각각의 역할이 있을 뿐입니다. setup( ) 함수에 들어가는 것들은 변수 선언, 통신속도 설정과 같이 초기 설정(setup)을 수행하는 내용이고, loop( )함수는 말그대로 loop( )함수 내에 있는 내용을 지속해서 실행하는 역할을 합니다.

아두이노에 전원이 인가되면 내부에 업로드된 스케치에서 setup( )함수를 먼저 실행합니다. setip( )함수는 처음 1회만 실행되고, 이후에는 무한정 순환하듯 loop( )함수 내의 내용이 계속 수행됩니다. 즉, setup( )함수 내에는 맨 처음 실행될 내용만 기입하고, loop( )함수는 이후 반복적으로 처리되어야 할 작업을 적어둡니다.

setup( )함수와 loop( )함수 외에 개발자가 개발자만의 함수를 별도로 만들어 사용할 수 있습니다.

setup( ) 함수는 Serial.begin( )함수로 시작을 합니다. PC와의 통신을 시작(begin)하기 위한 함수로 통신속도를 소괄호 내에 기입합니다. IDE는 9600bps를 기본값으로 갖고 있으며, 필요에 따라 이 수치를 수정하여 사용합니다. 만약 Serial.begin( )함수를 뺀 채로 스케치를 업로드하면 시리얼 모니터를 열어도 아무런 결과를 확인할 수 없습니다. 이는 아두이노-PC간 통신 개설을 하지 않았기 때문입니다.

Serial.begin(9600);

이어서 정수형 변수에 sum을 선언하고, sum을 정의합니다. sum은 앞서 작성한 add( ) 함수를 액세스하며 내부의 변수인 int a와 b를 각각 4와 3으로 지정해주고 있습니다.

int sum;
sum = add(4, 3);

마지막 Serial.print( )함수는 연산결과를 시리얼 모니터에 출력하는 함수로 소괄호 내에 출력할 내용을 기입합니다. Serial.print( )함수는 소괄호 내에 큰 따옴표 여부에 따라 문자를 출력할지 변수를 출력할지 달라지는데, 큰 따옴표를 적용하면 따옴표 내의 텍스트가 출력되고, 따옴표 없이 사용하면 해당 변수를 출력합니다. 여기서 4와 3에 대한 add( ) 함수의 처리 결과를 나타냅니다.

Serial.print("sum="); // 텍스트를 출력합니다.
Serial.print(sum); // 변수를 합한 값을 출력합니다.

setup( ) 함수에 이어서 loop( ) 함수를 액세스하게 되는데, loop( )함수는 반복적인 처리 내용을 기입하고 이번 에제에는 비워두었습니다. loop( ) 함수에서 아무것도 액세스되지 않으니 setup( ) 함수 내의 내용만 액세스 됩니다. add( )함수는 setup( ) 함수에 의해 한 번만 액세스 되며 그 결과를 시리얼 모니터에 출력합니다.

 

이번 포스팅은 여기까지 마무리 하도록 하겠습니다. 무슨 말인지 알 수 없는 언어가 많지만 이해하고 또 이해하며 공부하고 있습니다. 여러분들도 꼭 아두이노를 마스터하시는 날이 오길 바라겠습니다.

오늘 하루도 행복하세요.

728x90