Je dois faire un programme qui doit lire un String (le string étant "A10121111"), le transformer en int et séparer chaque valeur par des virgules en excluant le A. Le problème étant que une fois que les valeurs de mon String sont bien séparer par des virgules. Quand je transforme mon String en Int, les virgules disparaissent et me laisse juste avec le "1" et le reste ne s'affiche pas.
Voici la partie du code qui est censé transformé le string en int
String str="A10121111";
String str2;
int i;
void setup() {
Serial.begin(9600);
str2[10]="0";
//Serial.println(str.toInt());
Serial.println(F("Concat word"));
for(i=0;i<9;i++)
{
if(i>=1&&i<=7)
{
str2=str2+str[i]+"."+" ";
}
if(i>=8) {
str2=str2+str[i];
}
Serial.println(str2);
}
Serial.println(F(" end of string"));
int entier[] = {str2.toInt()};
Serial.println(entier[i]);
}
je ne comprends pas. Vous avez A10121111 en entrée ou vous avez 1,0,1,2,1,1,1,1 ? Si c'est le premier, c'est quoi ce A ? vous recevez de l'hexadécimal ?
(on se fiche de ce que fait votre code pour le moment - exprimez le cahier des charges)
un truc comme cela ?? (avec une cString pas une String)
char str[] = "A10121111";
void setup() {
Serial.begin(115200); Serial.println();
byte index = 0;
int chiffre;
while (str[index] != '\0') { // tant qu'on n'est pas à la fin de la chaîne
if (index != 0) Serial.write(',');
if (isdigit(str[index])) { // c'est un chiffre en ASCII
chiffre = str[index] - '0'; // on le convertit en chiffre décimal
Serial.print(chiffre);
} else {
Serial.write('x'); // par exemple on met un x quand on a lu un caractère qui n'est pas un chiffre
}
index++; // on passe au caractère suivant
}
Serial.println();
}
void loop() {}
Le code marche très bien merci. Mais serait-il possible d'exploiter ensuite la chaîne écrite dans le port série? L'utiliser comme une variable par exemple
Voici mon code entier pour avoir un peu plus de contexte
#include <FastLED.h>
#define LED_PIN 2
#define NUM_LEDS 150
char str[]="A10121111";
int i;
int chiffre;
CRGB leds[NUM_LEDS];
byte index = 0;
void setup(){
FastLED.addLeds<WS2812B, LED_PIN, RGB>(leds, NUM_LEDS);
Serial.begin(115200);
Serial.println(F("Transformation de la chaîne char en entier int"));
while (str[index] != '\0') { // tant qu'on n'est pas à la fin de la chaîne
if (index != 0) Serial.write(", ");
if (isdigit(str[index])) { // c'est un chiffre en ASCII
chiffre = str[index] - '0'; // on le convertit en chiffre décimal
Serial.print(chiffre);
} else {
Serial.write("x"); // par exemple on met un x quand on a lu un caractère qui n'est pas un chiffre
}
index++; // on passe au caractère suivant
}
Serial.println();
}
byte trame[] = {};
void loop() {
for(i=0; i<=8; i++){
if (trame[i] == 0) {
leds[i] = CRGB(0,0,255);
FastLED.show();
}
else if(trame[i] == 2) {
leds[i] = CRGB(255,0,0);
FastLED.show();
}
else if(trame[i] == 1) {
leds[i] = CRGB(75,255,0);
FastLED.show();
}
}
}
Ce que j'essayais de dire c'est que je veux séparer chaque valeur la chaîne "A10121111" par des virgules et ensuite transformer cette chaine en entier en conservant les virgules pour l'utiliser dans le "byte trame[8] = {"la variable int avec les virgules"}". Le int doit être "1,0,1,2,1,1,1,1" pour que quand je l'utilise dans le byte trame[8] le contenu du tableau soit "byte trame[8] = {1,0,1,2,1,1,1,1};".
créez un tableau de byte directement, pas besoin d'une autre chaîne de caractères
char str[] = "A10121111";
byte memoire[sizeof str]; // comme ça on est sûr qu'il est assez grand
void setup() {
Serial.begin(115200); Serial.println();
byte index = 0, total = 0;
while (str[index] != '\0') { // tant qu'on n'est pas à la fin de la chaîne
if (isdigit(str[index])) { // c'est un chiffre en ASCII
memoire[total++] = str[index] - '0'; // on le convertit en chiffre décimal
}
index++;
}
// ici le tableau memoire contient total éléments
for (byte i = 0; i < total; i++) Serial.println(memoire[i]);
}
void loop() {}