Bonjour à tous,
J'essaye de créer une classe dans laquelle je créer une instance d'une autre classe ! Cependant j'ai des erreurs de compilation :s En gros j'ai une classe Relay qui permet de commander 1 relai. Puis j'ai une classe Shutter qui permet de de contrôler un volet qui est commandé par 2 relais. Voici mes classes :
Relay.h :
#ifndef RELAY_h
#define RELAY_h
#if defined(__AVR__)
#include "Arduino.h"
#elif defined(__PIC32MX__)
#include "WProgram.h"
#elif defined(__arm__)
#include "Arduino.h"
#endif
class Relay // Objet Relay
{
private:
int _pin; //Acceuil la définition du Pin sur la carte arduino
boolean _isOFF; //Définie l'état actuel du relais
public:
Relay(int pin); //Le constructeur attend un entier lui définisant le Pin sur la carte arduino auquel est associé le relais
void begin() const; //Initialisation des pines
void off(); //Met en position NC
void on(); //Met en position NO
bool isStateOFF() const; //Renvoie TRUE si l'etat du relais indique NC
void switchState(); //Inverse l'état actuel du relais
};
#endif
Relay.cpp :
#include "Relay.h"
Relay::Relay(int pin)
{
_pin = pin;
_isOFF = true;
}
void Relay::begin() const
{
pinMode(_pin, OUTPUT);
}
bool Relay::isStateOFF() const
{
return (_isOFF);
}
void Relay::on()
{
digitalWrite(_pin,HIGH);
_isOFF = false;
}
void Relay::off()
{
digitalWrite(_pin,LOW);
_isOFF = true;
}
void Relay::switchState()
{
if(_isOFF)
{
on();
}
else
{
off();
}
}
Shutter.h :
#ifndef SHUTTER_h
#define SHUTTER_h
#if defined(__AVR__)
#include "Arduino.h"
#elif defined(__PIC32MX__)
#include "WProgram.h"
#elif defined(__arm__)
#include "Arduino.h"
#endif
#include "..\Relay\Relay.h"
class Shutter // Object Shutter
{
public :
//Shutter();
Shutter(int pinRelay1, int pinRelay2, int pinButtonUp, int pinButtonDown);
//Shutter(Shutter const& ShutterACopier);
void begin() const;
void open(); //open the shutter
void close(); //close the shutter
bool isPushedUp() const; //Is the button of the shutter pushed ? 1 if yes 0 if no
bool isPushedDown() const; // Up and Down
bool isActivated() const; //Is the button of the shutter activated ? 1 if yes 0 if no
void setActivated(boolean a); //Change the value of _activated
void stopAction(); //Some time after using the open or close method, you should use this method.
private :
boolean _activated;
int _pinButtonUp;
int _pinButtonDown;
Relay _relay1;
Relay _relay2;
};
#endif
Shutter.cpp :
#include "Shutter.h"
Shutter::Shutter(int pinRelay1, int pinRelay2, int pinButtonUp, int pinButtonDown) : _pinButtonUp(pinButtonUp), _pinButtonDown(pinButtonDown), _activated(1)
{
_relay1 = Relay(pinRelay1);
_relay2 = Relay(pinRelay2);
}
void Shutter::begin() const
{
_relay1.begin();
_relay2.begin();
}
void Shutter::open()
{
_relay2.off();
_relay1.on();
_relay2.on();
}
void Shutter::close()
{
_relay2.off();
_relay1.off();
_relay2.on();
}
bool Shutter::isPushedUp() const
{
return digitalRead(_pinButtonUp);
}
bool Shutter::isPushedDown() const
{
return digitalRead(_pinButtonDown);
}
bool Shutter::isActivated() const
{
return _activated;
}
void Shutter::setActivated(boolean a)
{
if(a)
{
_activated = 1;
}
else
{
_activated = 0;
}
}
void Shutter::stopAction()
{
_relay2.off();
}
Enfin, voici le message d'erreur du compilateur :
C:\Program Files (x86)\Arduino\libraries\Shutter\Shutter.cpp: In constructor 'Shutter::Shutter(int, int, int, int)':
C:\Program Files (x86)\Arduino\libraries\Shutter\Shutter.cpp:16:157: error: no matching function for call to 'Relay::Relay()'
Shutter::Shutter(int pinRelay1, int pinRelay2, int pinButtonUp, int pinButtonDown) : _pinButtonUp(pinButtonUp), _pinButtonDown(pinButtonDown), _activated(1)
^
C:\Program Files (x86)\Arduino\libraries\Shutter\Shutter.cpp:16:157: note: candidates are:
In file included from C:\Program Files (x86)\Arduino\libraries\Shutter\Shutter.h:12:0,
from C:\Program Files (x86)\Arduino\libraries\Shutter\Shutter.cpp:9:
C:\Program Files (x86)\Arduino\libraries\Shutter\..\Relay\Relay.h:20:9: note: Relay::Relay(int)
Relay(int pin); //Le constructeur attend un entier lui définisant le Pin sur la carte arduino auquel est associé le relais
^
C:\Program Files (x86)\Arduino\libraries\Shutter\..\Relay\Relay.h:20:9: note: candidate expects 1 argument, 0 provided
C:\Program Files (x86)\Arduino\libraries\Shutter\..\Relay\Relay.h:13:7: note: Relay::Relay(const Relay&)
class Relay // Objet Relay
^
C:\Program Files (x86)\Arduino\libraries\Shutter\..\Relay\Relay.h:13:7: note: candidate expects 1 argument, 0 provided
C:\Program Files (x86)\Arduino\libraries\Shutter\Shutter.cpp:16:157: error: no matching function for call to 'Relay::Relay()'
Shutter::Shutter(int pinRelay1, int pinRelay2, int pinButtonUp, int pinButtonDown) : _pinButtonUp(pinButtonUp), _pinButtonDown(pinButtonDown), _activated(1)
^
C:\Program Files (x86)\Arduino\libraries\Shutter\Shutter.cpp:16:157: note: candidates are:
In file included from C:\Program Files (x86)\Arduino\libraries\Shutter\Shutter.h:12:0,
from C:\Program Files (x86)\Arduino\libraries\Shutter\Shutter.cpp:9:
C:\Program Files (x86)\Arduino\libraries\Shutter\..\Relay\Relay.h:20:9: note: Relay::Relay(int)
Relay(int pin); //Le constructeur attend un entier lui définisant le Pin sur la carte arduino auquel est associé le relais
^
C:\Program Files (x86)\Arduino\libraries\Shutter\..\Relay\Relay.h:20:9: note: candidate expects 1 argument, 0 provided
C:\Program Files (x86)\Arduino\libraries\Shutter\..\Relay\Relay.h:13:7: note: Relay::Relay(const Relay&)
class Relay // Objet Relay
^
C:\Program Files (x86)\Arduino\libraries\Shutter\..\Relay\Relay.h:13:7: note: candidate expects 1 argument, 0 provided
Erreur lors de la compilation.
Je pense donc que l'erreur vient de la façon dont j'implante les 2 relais dans la bibliothèque Shutter... Si vous avez des idées je suis preneur !
Merci d'avance pour votre aide !
fjcf2