[résolu]INT to Char, le classique du genre

Bonjour à tous,
je sais que parmi d’entre vous voudront me tuer avec cette question :cold_sweat:.
Aprés 2 ans d’absence, Je reviens d’un monde où le flaimard est roi et ou le soucis de int char… n’existe pas, le php.
J’ai pris de mauvaise habitude et je suis maintenant largué.

voilà pour faire simple j’incrémente un compteur que j’envoie via SPI sur un autre arduino. La fin de la transmition se fait via l’envoie de SPI.transfer ("\n");

C’est la théorie, dans la pratique, j’ai un refus de compilations.

Pourriez m’aider car déjà l’époque le char était ma hantise et je n’arrive pas à trouvé de doc pour simple d’esprits comme moi.

version non fonctionelle

#include <SPI.h>

void setup (void)
{
Serial.begin(115200);
digitalWrite(SS, HIGH);
SPI.begin ();
SPI.setClockDivider(SPI_CLOCK_DIV8);
}

void loop (void)
	{
		char c;
		char text[256];
		int size_char=0;
		String str;  //declaring string

		for(int i=0; i<50; i++)
			{
				delay(100);
				for(int i2=0; i2<sizeof(i); i2++)
					{
					char b[2];   //declaring character array

					str=String(i); //converting integer into a string
					str.toCharArray(b,2);
					SPI.transfer (str.toCharArray(b,2));
					}

				text[size_char]=13;
				Serial.print(str);
				digitalWrite(SS, LOW);    // SS is pin 10

				SPI.transfer ("\n");
				Serial.println("fin");
				digitalWrite(SS, HIGH);
			}
	}

code de départ

#include <SPI.h>

void setup (void)
{
Serial.begin(115200);
digitalWrite(SS, HIGH);
SPI.begin ();
SPI.setClockDivider(SPI_CLOCK_DIV8);
}

void loop (void)
	{
		char c;

		// enable Slave Select
		digitalWrite(SS, LOW);    // SS is pin 10

		// send test string
		for (const char * p = "500\n" ; c = *p; p++) 
			{
				SPI.transfer (c);
				Serial.print(c);
			}

		// disable Slave Select
		digitalWrite(SS, HIGH);

		delay (1000);

		// enable Slave Select
		digitalWrite(SS, LOW);    // SS is pin 10

		// send test string
		for (const char * p = "1000\n" ; c = *p; p++) 
			{
				SPI.transfer (c);
				Serial.print(c);
			}

		// disable Slave Select
		digitalWrite(SS, HIGH);

		digitalWrite(SS, LOW);    // SS is pin 10

		// send test string
		for (const char * p = "1500\n" ; c = *p; p++) 
			{
				SPI.transfer (c);
				Serial.print(c);
			}

		// disable Slave Select
		digitalWrite(SS, HIGH);

		delay (1000);

		// enable Slave Select
		digitalWrite(SS, LOW);    // SS is pin 10

		// send test string
		for (const char * p = "2000\n" ; c = *p; p++) 
			{
				SPI.transfer (c);
				Serial.print(c);
			}

		// disable Slave Select
		digitalWrite(SS, HIGH);


digitalWrite(SS, LOW);    // SS is pin 10

		// send test string
		for (const char * p = "2500\n" ; c = *p; p++) 
			{
				SPI.transfer (c);
				Serial.print(c);
			}

		// disable Slave Select
		digitalWrite(SS, HIGH);

		delay (1000);

		// enable Slave Select
		digitalWrite(SS, LOW);    // SS is pin 10

		// send test string
		for (const char * p = "3000\n" ; c = *p; p++) 
			{
				SPI.transfer (c);
				Serial.print(c);
			}

		// disable Slave Select
		digitalWrite(SS, HIGH);


digitalWrite(SS, LOW);    // SS is pin 10

		// send test string
		for (const char * p = "3500\n" ; c = *p; p++) 
			{
				SPI.transfer (c);
				Serial.print(c);
			}

		// disable Slave Select
		digitalWrite(SS, HIGH);

		delay (1000);

		// enable Slave Select
		digitalWrite(SS, LOW);    // SS is pin 10

		// send test string
		for (const char * p = "4000\n" ; c = *p; p++) 
			{
				SPI.transfer (c);
				Serial.print(c);
			}

		// disable Slave Select
		digitalWrite(SS, HIGH);


		delay (1000);
	}

je vous remercie d’avance.

Flo

bonjour, une tite recherche aurait été bien ;) http://www.arduino-hacks.com/converting-integer-to-character-vice-versa/

sinon regarde du coté de sprintf

hum, je pense ne pas avoir était explicite dans mon souhait, car cette doc ne semble pas correspondre à mon besoin.

voici une morceaux fonctionnelle

for (const char * p = "4000\n" ; c = *p; p++) 
			{
				SPI.transfer (c);
				Serial.print(c);
			}

à la place de p =“4000\n” je veux mettre p=i+"\n";

i venant d’un for

for(int i=0; i<50; i++)
			{for (const char * p =i+ "\n" ; c = *p; p++) 
			{
				SPI.transfer (c);
				Serial.print(c);
			}}

le char est une notion que je ne maîtrise pas du tout pour la simple raison que je n’en vois pas la raison logique de son existence, int ok c’est nombre entier, String c’est une chainse de caractére, double et float sont des chiffres à virgules, mais char, non voit pas.

donc je suis désolé, mais le char est un réelle problème pour moi, je sais très bien que tu souhaite m’aider avec ton lien, mais à défaut du char je connais bien google et donc cette doc je l’ai vu, ainsi que d’autre.

http://www.arduino-hacks.com/converting-integer-to-character-vice-versa/
https://www.google.fr/webhp?sourceid=chrome-instant&rlz=1C1AVNC_enFR586FR586&ion=1&espv=2&ie=UTF-8#q=arduino+string+to+char

Le char c’est un octet il n’y 'a rien d’autre à comprendre.
Le premier code que tu cites, parcours une chaîne de caractères pour les envoyer un à un. Il suffit donc de remplacer le for (const char *p …) par un for (char c=0; c<50;c++) et tu auras ce que tu veux.

la confusion vient peut etre de son appelation char pour caractere, alors que c'est un octet, soit 8 bits, soit un chiffre de 0 à 255.

et bien malheureusement non, celà ne marche pas, 5000 n'est pas dérrivé d'un code octal, il s'agit du nombre entier 5000

l'octal, c'est encore autre chose. ta confusion vient de ce que tu vois : 5000. c'est pas un "chiffre" de type int, c'est la chaine de caractere "5"+"0"+"0"+"0" (+eventuelement octet de valeur 13, + +eventuelement octet de valeur 0)

le code fonctionel

for (const char * p = "4000\n" ; c = *p; p++) 
            {
                SPI.transfer (c);
                Serial.print(c);
            }

crée un pointeur de type char et parcours la chaine de caractere (qui n'est rien dautre qu'une suite d'octets) "4000\n". \n represente un code ascii de control. voir table ascii : http://arduino.cc/en/Reference/ASCIIchart ca renvoi caractere par caractere, et non pas le "chiffre" 4000.

tu devrai passer par ici: http://arduino.cc/en/Reference/StringConstructor

Bonjour à tous,

alors d’abord je souhaiterai m’excusé auprès de infobarquee qui a eux certainement l’impression que je l’ai envoyé chier, après des heures d’énervement sur un truc que je comprend pas je deviens con.

Ensuite merci à tous pour vos conseils, je vais les relire à têtes reposé, je suis heureux de voir que la communauté n’as pas changé et quelle est toujours dispo pour aider et conseillé.

pour ce qui est de la solution à mon soucis la voici. Elle n’est pas de moi, mais je l’ai comprise, ce qui est le plus important

void loop (void)
	{
		

		for(int i=0; i<540; i++)
			{
				////
					int n=i;
					String str;  //declaring string
					str=String(n,DEC);
					str +="\n\0";
					
					// enable Slave Select
					digitalWrite(SS, LOW);    // SS is pin 10
					delay(20);

					// send test string
					for (int i=0; i< str.length(); i++)
						{
							SPI.transfer (str.charAt(i));
							Serial.print(str.charAt(i));
						}

					// disable Slave Select
					digitalWrite(SS, HIGH);
				////
			}
			delay(1000);

		
	}

pas de blem. ;)

non plus.

tu as juste a comprendre ca, en fait:

...
	int n=i;
	String str;  //declaring string
	str=String(n,DEC);
	str +="\n\0";
...