Transmission i2c caractère non voulus

Bonjour,

Je fait communiquer deux Arduino sur un bus i2c dans le but de récupérer 2 valeurs (celles de deux sonde de température).

Quand je reçois sur le maitre les caractères d'une seule sonde ça fonctionne impec :

15:46:42.272 -> Valeur reçue de sonde 1: 15.13

Mais quand je reçois sur le maitre les caractères des deux sonde (que je fait appel à ma fonction i2c_data() une seconde fois enfaite) j'ai des caractère curieux que je ne souhaite pas :

15:48:50.401 -> Valeur reçue de sonde 1: 15.13□⸮
15:48:51.412 -> Valeur reçue de sonde 2: 14.93□⸮

CODE MASTER :

void loop()
{
	i2c_data(I2C_SLAVE_CHEMINEE, 1, 5);
	delay(1000);
	i2c_data(I2C_SLAVE_CHEMINEE, 2, 5); // EDIT POUR LE FORUM : si je ne fait appel à cette fonction qu'une fois cela ne m'affiche pas les caractère en plus
	delay(1000);
}

String i2c_data(int slave, int code, int size)//(adresse esclave, code pour pointer la bonne sonde, nombres d'octets)
{
	Wire.beginTransmission(slave); // envoie du code au slave précisé en amont pour pointer vers la sonde voulu
	Wire.write(code);   //code         
	Wire.endTransmission();
	Wire.requestFrom(slave, size);   // envoie d'une requête au slave de transmettre x* octet (*donné par size)
	Serial.print("Valeur reçue de sonde ");Serial.print(code);Serial.print(": ");
	int i = 0;
	char str[size];
	while(Wire.available())
	{
		str[i] = Wire.read();
		i++;
	}
	Serial.print(str);
	Serial.println("");
	return str;
}

CODE SLAVE :

void receiveEvents(int numBytes)
{  
	pointeur_i2c = Wire.read();
	
}

void requestEvents()
{
if(pointeur_i2c == 1)
	{
		
		
		Serial.print("   -  requête pour t1 reçue - ");
		Serial.print("Temperature envoyée : ");
		
		char send[7]; // création de la variable qui contiendra le resultat 6 caractères + le \n
		
		
		dtostrf(temperature1, 5, 2, send);// conversion de la valeur de float à char;
		
		Serial.println(send);
		Wire.write(send);
		pointeur_i2c = 0;
	}
	if(pointeur_i2c == 2)
	{
		Serial.print("   -  requête pour t2 reçue - ");
		Serial.print("Temperature envoyée : ");
		
		char send[7]; // création de la variable qui contiendra le resultat 6 caractères + le \n
		dtostrf(temperature2, 5, 2, send);// conversion de la valeur de float à char;
		Serial.println(send);
		Wire.write(send);
		pointeur_i2c = 0;
	}
}

Pour recevoir size caractères, il faut déclarer une variable de taille size+1.
À la fin de la réception, il faut mettre un 0 dans le dernier élément pour terminer la chaine de caractères.

int i = 0;
	char str[size+1];
	while(Wire.available())
	{
		str[i] = Wire.read();
		i++;
	}
        str[i]='\0';

A noter, la fonction est supposée retourner une String et tu retournes un pointeur sur une chaine de caractères.

Ce la marche, c'est parfait je te remercie !

Mais pour quoi cela fonctionnait il lorsque la fonction n'était appelée qu'une fois ?