2012-03-13 15 views
5

Para la escuela Estoy construyendo un robot, que necesita poder detectar líneas con 3 sensores de línea QRE1113. (http://www.sparkfun.com/products/9454) Creé 4 bibliotecas, dos para conducir (Motor() & Driver()) funcionan bien. Ahora que creé las bibliotecas Linesensor y Eye, estas están causando algunos problemas. Cuando quiero utilizar estas bibliotecas, la función setup() no hará squad. Ni siquiera enciende un LED. ¿Cuál parece ser el problema?Arduino: La instalación() no se iniciará

archivo principal:

#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); 
} 

biblioteca de ojos:

/* 
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 

Y el 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

Podría tener este problema hacer algo con la cantidad limitada de memoria en la placa Arduino? –

Respuesta

0

Parece que tuvimos demasiadas clases y el arduino no pudo soportarlo más.

3

recuerdo haber tenido problemas cuando intializing cosas en los constructores de objetos declarados fuera de preparar(). No estoy seguro por qué, admito no haber investigado el problema. Pero fui con la idea de que se inicializaron demasiadas cosas antes de que comenzara el programa.

No garantizo que sea la solución (y realmente no puedo explicar por qué), pero resolví mi problema inicializando cosas en métodos init() para mis objetos en lugar de sus constructores. Luego llamé a los métodos init() en mi configuración() después de haber configurado el objeto Serial. Algo así:

#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() 
} 

Siempre es un poco raro construir un objeto en un método en lugar del constructor. Pero como es la programación del microcontrolador y no un programa informático común, supongo que adoptar un enfoque más funcional es a veces el más simple.

Si no tiene una mejor respuesta, igual puede intentarlo. Tal vez sea suficiente hacer eso solo para su biblioteca Eye ya que usted dijo que no tuvo problemas con las clases de Motor.

+1

Al intentar esto, recibo el mensaje: error: 'clase Eye' no tiene ningún miembro llamado 'init' –

+1

Tienes que implementar el método init() tú mismo :) Por ejemplo, crea un método init(), ponlo dentro de él qué hay en tu constructor, y elimina el constructor de tu clase. –

+0

Todavía no resolvió mi problema ... –

0

No creo que haya errores en muchas clases o se inicializaron demasiadas cosas. En mi caso, tengo muchas clases definidas por mí (más de 5 clases). Mi problema era con el camino he definido las clases, por ejemplo, un error fue cuando definí función en el archivo de cabecera, en el archivo CPP no se antepone el nombre de la clase .En lenguaje de código:

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 
} 
Cuestiones relacionadas