Arduino 类库 文件编写--出错

关于Arduino编写类库的问题:在学习arduino,遇到类库的内容,尝试用C语言编写一个 超声波模块的 库 SR04.h ,但是最终运行的时候 还是 出了错,显示 'Set_SR04' was not declared in this scope .

一、本次编写的 超声波模块 库文件 SR04 共包含3部分 :SR04.h , SR04.cpp , keywords.txt , 具体内容分别如下:

1、SR04.h 的内容如下:

#ifndef  SR04_H 

#define  SR04_H

# if defined(ARDUINO)&&ARDUINO >= 100

   #include  "Arduino.h"
   
#else

   #include "WProgram.h"
   
#endif

int TrigPin;

int EchoPin;

float distance;

void Set_SR04(TrigPin,EchoPin);

float Get_SR04(TrigPin,EchoPin);

#endif

2、SR04.cpp 的内容如下:

#if ARDUINO >= 100

  #include  "Arduino.h"
  
#else

  #include  "WProgram.h"
  
#endif

#include  "SR04.h"

void Set_SR04(TrigPin,EchoPin)

{
    pinMode(TrigPin,OUTPUT);
    
    pinMode(EchoPin,INPUT);    
    
}

float Get_SR04(TrigPin,EchoPin)

{
    digitalWrite(TrigPin,LOW);
    
    delayMicroseconds(2);
    
    digitalWrite(TrigPin,HIGH);
    
    delayMicroseconds(10);
    
    digitalWrite(TrigPin,LOW);
    
    distance = pulseIn(EchoPin,HIGH)/58.0;
    
    return distance;
    
}

3、keywords的内容如下:

SR04 KEYWORD1

Set_SR04 KEYWORD2

Get_SR04 KEYWORD2

二、具体操作过程:

将 SR04.h , SR04.cpp , keywords.txt 三个文件 放在arduino 安装目录下 libraries 下

img

三、运行结果

在arduino IDE 1.8.19 中 编写了一个程序,如下:

#include <SR04.h>

void setup() 
{
  Set_SR04(8,7);

  Serial.begin(9600);

}

void loop() 
{
  float distance = Get_SR04(8,7);

  Serial.println(distance);

  delay(100);

}

运行结果 显示: 'Set_SR04' was not declared in this scope

img

这个 Set_SR04 我在 SR04.h 的头文件中不是 已经定义过了吗? 这里 为什么 说 没有声明呢?

哪里出错了? 该怎样修改呢? 谢谢!

SR04.h内容改为


#ifndef  SR04_H 
 
#define  SR04_H
 
# if defined(ARDUINO)&&ARDUINO >= 100
 
   #include  "Arduino.h"
   
#else
 
   #include "WProgram.h"
   
#endif

 
void Set_SR04(int TrigPin,int EchoPin);
 
float Get_SR04(int TrigPin,int EchoPin);
 
#endif
 

SR04.cpp内容改为

#if ARDUINO >= 100
 
  #include  "Arduino.h"
  
#else
 
  #include  "WProgram.h"
  
#endif
 
#include  "SR04.h"
 
void Set_SR04(int TrigPin,int EchoPin)
 
{
    pinMode(TrigPin,OUTPUT);
    
    pinMode(EchoPin,INPUT);    
    
}
 
float Get_SR04(int TrigPin,int EchoPin)
 
{
    digitalWrite(TrigPin,LOW);
    
    delayMicroseconds(2);
    
    digitalWrite(TrigPin,HIGH);
    
    delayMicroseconds(10);
    
    digitalWrite(TrigPin,LOW);
    
    float tmp = pulseIn(EchoPin,HIGH)/58.0;
    
    return tmp;
    
}
 

主程序内容改为

#include <SR04.h>


void setup() 
{
  Set_SR04(8,7);
 
  Serial.begin(9600);
 
}
 
void loop() 
{
  float distance = Get_SR04(8,7);
 
  Serial.println(distance);
 
  delay(100);
 
}
 

自然就好了

img

有没有别的头文件里面有下面这个的定义


#ifndef  SR04_H