2012-03-13 92 views
5

對於學校我建立一個機器人,需要能夠使用3個QRE1113 linesensors檢測線路。 (http://www.sparkfun.com/products/9454)我創建了4個庫,兩個用於驅動(Motor()& Driver()),它們工作正常。現在我創建了Linesensor和Eye庫,這些都造成了一些麻煩。當我想使用這些庫時,setup()函數將不會執行小隊。甚至不打開LED。什麼似乎是問題?Arduino:安裝程序()不會啓動

主文件:

#include "Motor.h" 
#include "Driver.h" 
#include "Lichtsensor.h" 
#include "Eye.h" 

Motor motor1(5, 4, true); 
Motor motor2(6, 7, false); 
Driver driver(motor1, motor2); 
Eye eye1; 

void setup(){ 
    pinMode(13, OUTPUT); 
    digitalWrite(13, HIGH); 
    Serial.begin(9600); 
    Serial.println("#################################################"); 
    Serial.println("# This sketch communicates with the arduino and #"); 
    Serial.println("# makes the robot drive, and react to a sensor. #"); 
    Serial.println("#################################################\n"); 
} 

void loop(){ 
    if (eye1.getDikkeLijn() == true) { 
     Serial.println("Lijn"); 
    } 
    else { 
    Serial.println("Niks"); 
    } 
    delay(1000); 
} 

眼庫:

/* 
Controls Lichtsensors 
*/ 
#ifndef Eye_h 
#define Eye_h 

#include "Arduino.h" 
#include "Lichtsensor.h" 

class Eye 
    public: 
    Eye(); 
    Eye(Lichtsensor l1, Lichtsensor l2, Lichtsensor l3); 
    boolean getDikkeLijn(); 
    boolean getDunneLijn(); 
private: 
    Lichtsensor _l1; 
    Lichtsensor _l2; 
    Lichtsensor _l3; 
}; 

#endif 

而且linesensor:

/* 
Library to get values from a light sensor 
*/ 
#ifndef Lichtsensor_h 
#define Lichtsensor_h 

#include "Arduino.h" 

class Lichtsensor { 
public: 
    Lichtsensor(); 
    Lichtsensor(int analogPin); 
    int getCalibreerWaarde(); 
    int getLichtWaarde(); 
    boolean isDonker(); 
private: 
    int _lichtCalibreerWaarde; 
    int _analogPin; 
}; 

#endif 
+0

難道這個問題有用Arduino板上有限的內存做些什麼? – 2012-03-15 10:55:11

回答

0

看起來我們有太多類,而且arduino無法處理它。

3

我記得在構造函數聲明之外的對象intializing事情時有出現過問題建立()。我不知道爲什麼,我承認沒有調查過這個問題。但我認爲在程序啓動之前已經有太多的東西被初始化了。

我不能保證它是解決方案(並且不能真正解釋原因),但是我通過在init()方法中爲我的對象而不是它們的構造函數初始化事物而繞過我的問題。然後,在設置Serial對象後,我將setup()方法調用到init()方法中。類似的東西:

#include "Motor.h" 
#include "Driver.h" 
#include "Lichtsensor.h" 
#include "Eye.h" 

Motor motor1; // I do not use any more my constructor 
Motor motor2; // I do not use any more my constructor 
Driver driver; // I do not use any more my constructor 
Eye eye1; // I do not use any more my constructor 

void setup(){ 
    pinMode(13, OUTPUT); 
    digitalWrite(13, HIGH); 
    Serial.begin(9600); 
    Serial.println("#################################################"); 
    Serial.println("# This sketch communicates with the arduino and #"); 
    Serial.println("# makes the robot drive, and react to a sensor. #"); 
    Serial.println("#################################################\n"); 
    motor1.init(5, 4, true); // My object is initialized here 
    motor2.init(6, 7, false); // My object is initialized here 
    driver.init(motor1, motor2); // My object is initialized here 
    eye1.init() 
} 

在一個方法而不是構造函數中構造對象總是有點奇怪。但是,由於它是單片機編程,而不是一個普通的計算機程序,我猜想採取更多功能的方法有時是最簡單的。

如果你沒有更好的答案,你仍然可以嘗試。如果您告訴您在汽車課程中沒有任何問題,也許只用於您的眼睛圖書館就足夠了。

+1

嘗試此操作,我收到消息: 錯誤:'class Eye'沒有名爲'init'的成員 – 2012-03-13 12:59:29

+1

您必須自己實現init()方法:)例如,創建一個init()方法,放入其中什麼是你的構造函數,並刪除你的類的構造函數。 – 2012-03-13 13:45:31

+0

仍然沒有解決我的問題... – 2012-03-15 10:55:36

0

我不認爲許多類都有問題,或者有太多的東西被初始化。在我的例子中,我有很多由我定義的類(超過5個類)。我的問題是與我的定義。例如,當我在頭文件中定義的函數,在cpp文件不是由類名。在代碼語言前置一個錯誤是類方式:

void begin(); // this is a function defined in the header file 
void begin(){//this is in the cpp file and this is wrong definition 

} 
void NameOfTheClass::begin(){ // this is the correct way in the cpp file 
    //code goes here 
}