Problème de passation d'un tableau en argument du constructeur de mon objet

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():wink: 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 : _******

quelque chose me chiffonne ici:

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

Si les 2 premiers if ne sont pas vrais _x[0] et _x[1] ainsi que _y[0] et _y[1] ne sont pas initialisés.
Je pense qu’il manque des else
En ce qui concerne les print, j’ajouterait un ,DEC pour indiquer le format d’affichage.

Serial.print(_x[1],DEC);

En effet, avec tous les tests que j’ai fait cette erreur. Merci à toi, cependant le problème persiste. Voici mes modifications :

if(x[0] >= x[1])
 {
 _x[0] = x[1];
 _x[1] = x[0];
 Serial.print(_x[0], DEC);
 Serial.print(_x[1], DEC);
 }
 else
 {
 _x[0] = x[0];
 _x[1] = x[1];
 Serial.print(_x[0], DEC);
 Serial.print(_x[1], DEC);
 }
 if(y[0] >= y[1])
 {
 _y[0] = y[1];
 _y[1] = y[0];
 Serial.print(_x[0], DEC);
 Serial.print(_x[1], DEC);
 }
 else
 {
 _y[0] = y[0];
 _y[1] = y[1];
 Serial.print(_x[0], DEC);
 Serial.print(_x[1], DEC);
 }
 for(int i=2; i<tailleTableau; i++)
 {
 _x[i] = x[i];
 _y[i] = y[i];
 Serial.println(x[i], DEC);
 }

Et en retour j’ai ceci dans mon Serial :

’þ

As tu une idée ?

Merci encore pour ta réponse.

Frank

Dans MyRoom.h, les tableaux int _x et int _y sont définis sans taille. Donc, ce sont de simples pointeurs sans réservation d’espace mémoire.
Si tu veux rester dans ce principe, il faudrait définir un int* _x et un int* _y et faire un malloc de la taille du tableau passé en argument.