2012-03-13 9 views
5

स्कूल के लिए मैं एक रोबोट का निर्माण कर रहा हूं, जिसे 3 QRE1113 लाइनेंसर्स का उपयोग करके लाइनों का पता लगाने में सक्षम होना चाहिए। (http://www.sparkfun.com/products/9454) मैंने ड्राइविंग के लिए 4 पुस्तकालय बनाए, दो (मोटर() & चालक()) वे ठीक काम करते हैं। अब मैंने पुस्तकालयों लाइन्सेंसर और आई को बनाया है, ये कुछ परेशानी पैदा कर रहे हैं। जब मैं इन पुस्तकालयों का उपयोग करना चाहता हूं, तो सेटअप() फ़ंक्शन टीम नहीं करेगा। एक एलईडी चालू भी नहीं है। आखिर समस्या क्या लग रही है?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

इस समस्या को मिल सकता है: मेरी समस्या तरह से मैं कक्षाओं उदाहरण के लिए एक गलती थी जब मैं हेडर फाइल में समारोह में परिभाषित किया गया, सीपीपी फ़ाइल में वर्ग के नाम .इसके कोड भाषा द्वारा prepended नहीं किया गया था परिभाषित के साथ था Arduino बोर्ड पर सीमित मात्रा में स्मृति के साथ कुछ करने के लिए? –

उत्तर

0

ऐसा लगता है कि हमारे पास बहुत सी कक्षाएं थीं और आर्डिनो इसे और संभाल नहीं सकता था।

3

मैं समस्या नहीं थी होने जब वस्तुओं के बाहर घोषित के लिए निर्माताओं में बातें intializing याद सेट अप()। मुझे यकीन नहीं है कि क्यों, मैं समस्या की जांच नहीं कर रहा हूं। लेकिन मैं इस विचार के साथ चला गया कि कार्यक्रम शुरू होने से पहले बहुत सी चीजें शुरू की गई थीं।

मुझे गारंटी नहीं है कि यह समाधान है (और वास्तव में क्यों नहीं समझा सकता है), लेकिन मैं अपने रचनाकारों की बजाय मेरी वस्तुओं के लिए init() विधियों में चीजों को प्रारंभ करके अपनी समस्या के आसपास चला गया। फिर मैंने सीरियल ऑब्जेक्ट को सेट अप करने के बाद अपने सेटअप() में 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

इसे करने का प्रयास करते हुए, मुझे संदेश मिलता है: त्रुटि: 'क्लास आई' का कोई सदस्य 'init' नाम नहीं है –

+1

आपको इनिट() विधि को स्वयं लागू करना है :) उदाहरण के लिए, इसमें एक init() विधि बनाएं, इसके अंदर डालें आपके कन्स्ट्रक्टर में क्या है, और अपनी कक्षा के निर्माता को हटा दें। –

+0

अभी भी मेरी समस्या का समाधान नहीं किया है ... –

0

मुझे नहीं लगता कि कई वर्गों में गलत है या बहुत सी चीजें शुरू की गई हैं। मेरे मामले में मेरे पास कई कक्षाएं हैं (5 से अधिक कक्षाएं)।

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 
}