2016년 8월 7일 일요일

나만의 헤더파일 만들기

프로그램을 할때 #include <뭐시기.h> 로 라이브러리를 쓰죠?
이때 직접만든 라이브러리를 쓰려면 어떻게 해야 할까요?

라이브러리에다가 저장 시키고 싶은 함수:
예를 들어, 아두이노에서 Serial.print함수를 써서 여러변수의 출력값을 보려면 이렇게 코드를 짜야합니다.
Serial.print(val1);
Serial.print(","); 
Serial,print(val2);
Serial.print(",");
Serial.print(val3);
Serial.print(","); 
Serial,print(val3);
Serial.println(",");
음.. 굉장히 보기 싫고 귀찮네요 전.. 
그래서 visual studio에서 처럼 출력하고 싶은 마음이 간절해 짐니다.
printf("%d, %d, %d, %d ", val1, val2, val3, val4);

이때 요 함수를 쓰면  ​위에서 처럼 쓸수 있습니다!!

http://colorscripter.com/s/pp3EqkX

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#define ARDBUFFER 16
 
int printt(char *str, ...)
{
  int i, count=0, j=0, flag=0;
  char temp[ARDBUFFER+1];
  for(i=0; str[i]!='\0';i++)  if(str[i]=='%')  count++;
 
  va_list argv;
  va_start(argv, count);
  for(i=0,j=0; str[i]!='\0';i++)
  {
    if(str[i]=='%')
    {
      temp[j] = '\0';
      Serial.print(temp);
      j=0;
      temp[0= '\0';
 
      switch(str[++i])
      {
        case 'd': Serial.print(va_arg(argv, int));
                  break;
        case 'l': Serial.print(va_arg(argv, long));
                  break;
        case 'f': Serial.print(va_arg(argv, double));
                  break;
        case 'c': Serial.print((char)va_arg(argv, int));
                  break;
        case 's': Serial.print(va_arg(argv, char *));
                  break;
        default:  ;
      };
    }
    else 
    {
    
        Serial.print(str[i]);
        
    }
  };
  Serial.println();
  return count + 1;
}
cs

이 함수를 아두이노 소스에서 붙여 넣기 하면 되죠. 
그러나!! 이 함수는 자주!! 쓸것이기 때문에 라이브러리에다가 이 함수를 저장해서 계속 쓰고 싶습니다.


라이브러리 만들기:
자! 그럴때는 일단 아두이노 라이브러리에 폴더하나를 만듭니다. 
저는 myfuc이라고 했습니다.

폴더안에 (폴더와 같은 이름.h) 인 메모장을 만듭니다.
저는 myfuc.h 입니다.
이때 생각 하셔야 할께 #incldue의 의미가 단순이 파일을 복사 붙이기 한다는 사실!


출처:
-라이브러리
-printt함수

댓글 없음:

댓글 쓰기

clear images were obtained