2

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ファイルは、libraryフォルダーのserialCommsという名前のフォルダーにあります。ここからどこへ行けばいいのかよくわかりませんが、何か考えはありますか?

4

1 に答える 1

3

まず、

#ifndef serialComms
#define serialComms

#ifndef serialComms_h
#define serialComms_h

インスタンスと同じ名前のマクロを持つことはできません。

次に、キャピタライゼーションを確認します。例:readBytesとtesting.readbytes(); Bに注意してください


新しいライブラリディレクトリとその中にある初期ファイルを初めて作成するときは、必ずすべてのArduinoIDEを閉じてください。起動時の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);
  }   
}
于 2013-03-09T00:57:40.367 に答える