Bonjour à tous,
Voici mon problème : j'ai créé une class myRoom. J'ai un constructeur qui prend en paramètre un tableau d'entier de taille indéfinie :
MyRoom::MyRoom(UTFT &myGLCD, UTouch &myTouch, int x[], int y[], int tailleTableau, word color, word colorSelected)
J'aimerai dans un premier temps savoir si c'est la bonne manière de faire. En effet, je travaille sur un ecran TFT_320QVT relié à un arduino mega 2560 et mon but est de dessiner le plan de ma maison sur l'ecran pour ensuite sélectionner des pièces (le but étant ensuite de commander des volets électriques.). Or j'aimerai lors du dessin des pièces retirer tous ce qui est portes, fenêtres etc. Or comme le nombre de portes/fenêtres varie d'une pièce à une autre, il me faut utiliser un tableau de taille variable. Cependant lorsque je fais un test pour savoir ce qu'il y a dans ma varibles _x[3] par exemple (à l'aide de Serial.print() je ne trouve pas ce que j'ai passé en argument de mon objet. C'est un peu compliqué à expliquer alors je vous passe le code.
MyRoom.h
#ifndef MyRoom_h
#define MyRoom_h
#include "../UTFT/UTFT.h"
#include "../UTouch/UTouch.h"
//ici la forme des tableaux x et y est la suivante : les deux premiers couples sont le carré de la pièce ; puis on donne les coordonnées d'une fenêtre ou d'une baie vitrée ou des portes. on retirera ainsi les murs.
class MyRoom
{
public:
MyRoom(UTFT &myGLCD, UTouch &myTouch, int x[], int y[], int tailleTableau, word color, word colorSelected);
bool isSelected(); //Renvoie 1 si on a appuyé sur la pièce sinon 0
void draw(); //dessine la pièce
void setPosition(int x1, int y1); //permet de modifier la position de la pièce sans changer la taille de cette dernière
void refreshRoom();
void isActivated();
private:
UTFT & _myGLCD;
UTouch & _myTouch;
int _x[];
int _y[];
int _tailleTableau;
word _color;
word _colorSelected;
boolean _activated;
};
#endif
MyRoom.cpp
#include "MyRoom.h"
MyRoom::MyRoom(UTFT &myGLCD, UTouch &myTouch, int x[], int y[], int tailleTableau, word color, word colorSelected):_myGLCD(myGLCD), _myTouch(myTouch), _tailleTableau(tailleTableau), _color(color), _colorSelected(colorSelected)
{
if(x[0] >= x[1])
{
_x[0] = x[1];
_x[1] = x[0];
Serial.print(_x[0]);
Serial.print(_x[1]);
}
if(y[0] >= y[1])
{
_y[0] = y[1];
_y[1] = y[0];
Serial.print(_x[0]);
Serial.print(_x[1]);
}
for(int i=2; i<tailleTableau; i++)
{
_x[i] = x[i];
_y[i] = y[i];
Serial.println(_x[i]);
}
}
bool MyRoom::isSelected()
{
_myTouch.read();
return ((_myTouch.getX() <= _x[1]) && (_myTouch.getX() >= _x[0]) && (_myTouch.getY() <= _y[1]) && (_myTouch.getY() >= _y[0]));
}
void MyRoom::draw()
{
//dessin de la pièce
}
void MyRoom::setPosition(int x1, int y1)
{
}
void MyRoom::refreshRoom()
{
}
Puis mon fichier arduino :
#include <UButton.h>
#include <UTFT.h>
#include <UTouch.h>
#include <relay.h>
#include <Shutter.h>
#include <MyRoom.h>
#define COULEUR_FOND_ECRAN VGA_TEAL
#define COULEUR_FOND_BOUTONS VGA_BLACK
#define COULEUR_LOGOS VGA_WHITE //NON IMPLEMENTE ENCORE
UTFT myGLCD(GEEE32,38,39,40,41);
UTouch myTouch(48, 49, 50, 51, 52);
int x[] = {1, 24, 4, 20};
int y[] = {1, 24, 1, 1};
MyRoom cuisine(myGLCD, myTouch, x, y, 4, VGA_WHITE, VGA_RED);
void setup()
{
Serial.begin(9600);
myGLCD.clrScr();
myGLCD.InitLCD();
myTouch.InitTouch();
myGLCD.fillScr(COULEUR_FOND_ECRAN);
cuisine.draw();
}
void loop()
{
}
Le résultat de mon moniteur serie est le suivant :
j
Est ce que quelqu'un à une idée d'où cela peut venir ? Pour moi c'est la passation en argument du tableau qui ne va pas car quand je fais Serial.print(x*); c'est la même chose.*
Merci d'avance pour votre aide !
Frank
NB : toutes mes variables de class sont notées comme ceci : _******