답변:
헤더 파일 내에서 함수를 호출해서는 안됩니다. 헤더 파일은 전 처리기 매크로 (#define) 및 다른 파일의 변수 / 함수에 대한 참조를 정의하기위한 것입니다.
여러 C 파일을 작성하고 컴파일시 서로 링크해야합니다. 헤더 파일은 각 C 파일에 다른 C 파일의 기능과 변수를 알려주는 데 사용됩니다.
Arduino IDE에서 여러 파일을 사용하려면 공유하려는 다른 파일에있는 기능을 설명하기 위해 하나 이상의 헤더 파일이 필요합니다. 또한 모든 파일에서 사용하려는 모든 전역 변수.
이러한 정의는 "외부"속성으로 규정되어야합니다.
그런 다음 함수에 대한 실제 코드 및 변수 정의가 포함 된 하나 이상의 "pde"파일을 추가해야합니다.
예를 들어 "mouse.h"파일이 있습니다.
extern void mouse_read(char *,char *, char *);
extern void mouse_init();
"mouse.pde"파일 :
#include <ps2.h>
PS2 mouse(6,5);
void mouse_read(char *stat,char *x, char *y)
{
mouse.write(0xeb); // give me data!
mouse.read(); // ignore ack
*stat = mouse.read();
*x = mouse.read();
*y = mouse.read();
}
void mouse_init()
{
mouse.write(0xff); // reset
mouse.read(); // ack byte
mouse.read(); // blank */
mouse.read(); // blank */
mouse.write(0xf0); // remote mode
mouse.read(); // ack
delayMicroseconds(100);
}
그런 다음 기본 파일에 다음이 있습니다.
#include "mouse.h"
"mouse.pde"에있는 함수를 마치 로컬 파일에있는 것처럼 호출 할 수 있습니다.
@Majenko의 좋은 대답에 대한 대안으로 C ++ 클래스를 작성하여 함수를 캡슐화하고 http://www.arduino.cc/en/Hacking/LibraryTutorial에 설명 된대로 라이브러리 폴더에 넣을 수 있습니다.
당신은해야 할 수도 #include <Serial.h>
직렬 메소드를 호출 할 수있는 클래스의 구현 파일에. 직렬 함수 호출 (특히 읽기)에 부작용이 있기 때문에이 thoug를 수행하는 데주의해야합니다. char 클래스를 사용하여 직렬 인터페이스와 직접 상호 작용하지 않고 직렬 인터페이스의 바이트를 기본 프로그램에서 전달하는 메소드를 클래스에 정의하는 것을 선호합니다.
#if defined(ARDUINO) && ARDUINO >= 100
#include "Arduino.h"
#else
#include "WProgram.h"
#endif
Serial
헤더 파일 / 탭에 클래스 / 객체를 선언 하는 방법을 찾았습니다 .
#include <WProgram.h> // at the top of the file
이것은 나에게 매우 깨끗하다고 느끼지 않지만 아직 단점이없는 것 같습니다.