2017-12-12 15 views
0

내 코드가 부족하다는 것을 알고 싶습니다. 아두 이노 컴파일러, IDE 버전 1.8.0이 오류가 발생Arduino 여러 파일 개체 범위

'swSerial' was not declared in this scope

코드는 "OBJECT_SCOPE"라는 폴더에 포함 된 세 가지 파일입니다.

//  object_scope.ino 
// 
#include <SoftwareSerial.h> 
#include "mylib.h" 
const byte rxPin = 2; 
const byte txPin = 3; 
SoftwareSerial swSerial (rxPin, txPin); 

void setup() { 
    swSerial.begin(9600); 
    swSerial.println("Hello"); 
    printSum(4, 5); 
} 

void loop() { 
} 

//  mylib.cpp 
// 
#include "mylib.h" 

void printSum(int a, int b) { 
    int sum = a+b; 
    swSerial.println (sum); 
    // generates error "'swSerial' was not declared in this scope" 
} 

//  mylib.h 
// 
#ifndef mylib_h 
#define mylib_h 
void printSum(int a, int b); 
#endif 

답변

0

당신은 잘 mylib.hswSerial를 선언, 그래서 mylib.cpp 컴파일 할 때, 컴파일러는 약 swSerial 아직 알 수 없습니다. 내가 선호하는 다른 방법을 제공

void setup() { 
    swSerial.begin(9600); 
    swSerial.println("Hello"); 
    printSum(swSerial, 4, 5); 
} 


[...] 


void printSum(SoftwareSerial sw, int a, int b) { 
    int sum = a+b; 
    sw.println (sum); 
} 
-3

BulldogLowell Arduino Forum @ : 당신이 printSumswSerial의 인스턴스를 전달하는 가장 쉬운 방법은 될 것입니다. 그의 해결책은 mylib.cpp 파일의 시작 부분에 두 개의 문장을 추가하는 것이 었습니다.

#include <SoftwareSerial.h> 
extern SoftwareSerial swSerial; 

이 세 파일은 SoftwareSerial 라이브러리 함수를 여러 번 호출하여 여러 파일 코드를 단순화 한 것입니다. 이러한 맥락에서,이 모든 함수에 대한 참조 전달은 약간 번거로울 수 있습니다.