yuchu3d 2022-06-18 08:21 采纳率: 82.8%
浏览 84
已结题

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 的头文件中不是 已经定义过了吗? 这里 为什么 说 没有声明呢?

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

  • 写回答

2条回答 默认 最新

  • soar3033 2022-06-18 14:19
    关注

    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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 6月27日
  • 已采纳回答 6月19日
  • 赞助了问题酬金10元 6月18日
  • 创建了问题 6月18日

悬赏问题

  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效