yuchu3d 2022-06-18 00:21 采纳率: 80%
浏览 88
已结题

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 06: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

    展开全部

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
    yuchu3d 2022-06-18 08:13

    把参数的定义 放在函数里,和我那样写 , 区别在哪里?

    回复
    yuchu3d 2022-06-18 08:21

    头文件中 声明的时候 , 这样写 有什么问题吗?
    int TrigPin;

    int EchoPin;

    float distance;

    void Set_SR04(TrigPin,EchoPin);

    float Get_SR04(TrigPin,EchoPin);

    能否回答一下 谢谢!

    回复
    soar3033 回复 yuchu3d 2022-06-18 13:50

    不能那么写 必须在函数的定义里明确定义类型。你那种写法只能在调用函数的的时候用,不能在声明和定义的时候这么用

    回复
查看更多回答(1条)
编辑
预览

报告相同问题?

问题事件

  • 系统已结题 6月26日
  • 已采纳回答 6月19日
  • 赞助了问题酬金10元 6月18日
  • 创建了问题 6月18日
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部