为Arduino编写库

Writing Libraries for Arduino

本文关键字:Arduino      更新时间:2023-10-16

我正试图为Arduino编写一个简单的库来解析和解释串行命令。我使用示例库的目的是读取预期的命令并打开一些led。我已经通过arduino获得了串行通信,我希望它由一个库来处理。例如……我在arduino

上有以下代码

Arduino代码:

#include <serialComms.h>
serialComms testing = serialComms();
void setup()
{
 Serial.begin(9600); 
}
void loop() // not terribly concerned with the main loop, only the serialEvent, which I        have tested and works
{
}

void serialEvent()
{
   testing.readNewBytes();
   testing.assignBytes();
}

serialComms.cpp

#include <Arduino.h>
#include <serialComms.h>
void serialComms::init()
{
  // This is where the constructor would be...right now we are too stupid to have one
}
void serialComms::readNewBytes()  // Target Pin,Values
{
        digitalWrite(11,HIGH);
        delay(250);
        digitalWrite(11,LOW);
        assignBytes();
}
void serialComms::assignBytes()
{
    for(int t  = 0;t<5;t++)
    {
        digitalWrite(10,HIGH);
        delay(250);
        digitalWrite(10,LOW);
    }   
   }

serialComms.h

#ifndef serialComms_h
#define serialComms_h

/* serialComms Class */
class serialComms
{
  public:
    serialComms() {};
    void init();
    void readNewBytes(); // Will be used to create the array --> two variables for now...
    void assignBytes();
    };
#endif

我的问题如下……

1)。我是否有适当的库结构?当我发送消息并触发serialEvent时,我只想让led闪烁,当我在arduino中运行代码时,我得到以下错误。

testingLibraries:2: error: 'serialComms' does not name a type
testingLibraries.ino: In function 'void serialEvent()':
testingLibraries:16: error: 'testing' was not declared in this scope

我有.cpp和.h文件在一个名为serialComms的文件夹在库文件夹。我真的不知道该怎么做,你有什么想法吗?

首先更改

#ifndef serialComms
#define serialComms

#ifndef serialComms_h
#define serialComms_h

宏不能与实例同名。

然后检查大小写,例如readBytes vs testing.readbytes();注意B


确保在第一次创建一个新的库目录和初始文件时关闭所有的Arduino IDE。启动时的IDE缓存一个文件列表。它们随后会改变内部结构。但是新的文件要到下次启动时才知道。


下面的编译对我来说很好。有一次我纠正了所有的错字:

definetest.ino

#include <serialComms.h>
serialComms testing;
void setup() {
  Serial.begin(9600);
}
void loop() {
}
void serialEvent()
{
  testing.readBytes();
  testing.assignBytes();
}

serialComms.cpp

#ifndef serialComms_h
#define serialComms_h
/* serialComms Class */
class serialComms
{
  public:
//       serialComms() {};
void init();
void readBytes(); // Will be used to create the array --> two variables for now...
void assignBytes();
    };
#endif

serialComms.h

#include <Arduino.h>
#include <serialComms.h>
void serialComms::init()
{
  // This is where the constructor would be...right now we are too stupid to have one
}
void serialComms::readBytes()  // Target Pin,Values
{
  digitalWrite(11,HIGH);
  delay(250);
  digitalWrite(11,LOW);
  assignBytes();
}
void serialComms::assignBytes()
{
  for(int t  = 0;t<5;t++)
  {
    digitalWrite(10,HIGH);
    delay(250);
    digitalWrite(10,LOW);
  }   
}