Variable int arduino

Je suis un débutant en programmation arduino et en C, j’aimerai savoir comment scinder le contenue d’une variable : Int ctr1 ; Int ctr2 ; Int ctr3 ; void loop() { int received; // Variable servant à récupérer les données reçues if (Serial.available()>0) { // Si des données sont disponibles received = Serial.read(); // On récupère les données Serial.write(received); // on lit les données } } - Je récupère 1253A1789 dans la variable int received , j’aimerai placer 1253 dans la variable ctr1, A dans la variable ctr2 et 1789 dans ctr3. Pouvez-vous m'aider. Merci beaucoup

Cela s'appelle de la manipulation de bits ou en angliche "bitwise" Regardes là : http://arduino.cc/en/Reference/HomePage

Tu trouvera un chapitre nommé "BiteWise Operator"

Bonjour,

Avant de parler de bitwise ou de quoi que ce soit, je voudrai m'assurer d'un truc : "1253A1789" dans ton exemple, c'est un chiffre en hexa ou plusieurs caractères ascii qui forme la chaîne de texte "1253A1789" ?

En l'état on ne peut pas vraiment t'orienté vers la bonne solution. Il faut d'abord que tu nous explique le format des données que tu reçois.

Bonjour Merci pour votre aide, mon exemple est une suite de caractères qui forme un chaîne texte, je vous explique: j’ai fait une interface sous Windows avec WinDev pour déclencher des flashs et des appareils photos avec un arduino, mais les ordres de temporisation sous WinDev sont au 1/100ème de seconde et comme il me les faut au 1/1000ème, je veux faire exécuter les ordres à l’arduino "delay" qui lui est au 1000ème. La première série de chiffres est la temporisation, la lettre un pin de l’arduino et la deuxième série de chiffres le temps d'allumage, je peux incorporer des séparateurs « virgule » entre chaque série. merci

Bonjour,

Maintenant qu'on sait que l'entrée est en ASCII tout deviens plus simple ;)

Voici une solution simple qui utilise ParseInt() pour lire le nombre et read() pour la lettre. Le nombre de chiffre n'as pas besoin d'être fixe avec cette solution.

void setup() {
  Serial.begin(115200);
}

void loop() {
  
  // Lit le nombre (attention : parseInt() accepte les valeurs négatives)
  long valeur = Serial.parseInt(); 

  // parseInt() s’arrête après le premier caractère qui n'est pas une chiffre ou '-'
  // Il reste donc toujours un caractère à lire

  // Lit le caractère après le nombre
  char lettre = Serial.read();

  // Mettre ici le code pour gérer les valeurs
}

Je vous remercie encore pour votre aide, voici un exemple de ce que j’ai fait:
/*
fait clignoter une led sur entrée 12 ou 13 de l’arduino avec récupération de variable
…essai avec 1000a1000c10c ou 1000b1000_10g…

  • le premier chiffre: temps avant allumage de la led en m/s.
  • la premier lettre: le numéro représentant l’entrée numérique de l’arduino ‘a’ entrée/sortie 13 ‘b’ entrée/sortie 12 .
  • le deuxième chiffre: le temps d’allumage de la led en m/s.
  • la lettre 2 et 3 à rien.
  • le troisième chiffre: “boucle” nombre allumage/extinction de la led.

Gérard.SAMSON

*/
int led ; // variable l’entrée/sortie numérique arduino…
int x=1;
int valeur1;int valeur2;int valeur3; // variables numériques…
char lettre[3]; // variable chaîne…
int ctr;
void setup() {

Serial.begin(9600); // vitesse du port arduino …

}

void loop() {

int received;
if (Serial.available()>0) { // on vérifie si des données sont disponibles

if( x ==1 ){ // si x est = à 1

valeur1 = Serial.parseInt(); // on récupère la 1er valeur…
lettre[1] = Serial.read(); // on récupère la 1er lettre…
Serial.print("valeur1 : ");Serial.println(valeur1) ;
Serial.print("lettre1 : ");Serial.println(lettre[1]) ;
x++;

}
if( x ==2 ){

valeur2 = Serial.parseInt(); // on récupère la 2ème valeur…
lettre[2] = Serial.read(); // on récupère la 2ème lettre…
Serial.print("valeur2 : ");Serial.println(valeur2) ;
//Serial.print("lettre2 : ");Serial.println(lettre[2]) ;
x++;

}
if( x ==3 ){

valeur3 = Serial.parseInt(); // on récupère la 3ème valeur…
lettre[3] = Serial.read(); // on récupère la 3ème lettre…
Serial.print("valeur3 : ");Serial.println(valeur3) ;
//Serial.print("lettre3 : ");Serial.println(lettre[3]) ;
x++;

int ctr1=0;
if (lettre[1] == ‘a’){ // si lettre a dans variable lettre[1]…
led = 13; // numéro de l’entrée/sortie numérique…
pinMode(led, OUTPUT); // initialise le pin et l’ouvre “output”…
do{ // boucle…
delay(valeur1); // temps avant allumage de la led…
digitalWrite(led, HIGH); // on allume la led…
delay(valeur2); // temps de la let allumée…
digitalWrite(led, LOW); // on éteind la led…
ctr1++; // compteur de boucle incrémentation
}
while(ctr1 < valeur3); // nombre de boucle à réaliser…
}
if (lettre[1] == ‘b’){ // si lettre b dans variable lettre[1]
led = 12; // numéro de l’entrée/sortie numérique…
pinMode(led, OUTPUT); // initialise le pin et l’ouvre “output”…
do{
delay(valeur1); // temps avant allumage de la led…
digitalWrite(led, HIGH); // on allume la led…
delay(valeur2); // temps de la let allumée…
digitalWrite(led, LOW); // on éteind la led…
ctr1++; // compteur de boucle incrémentation
}
while(ctr1 < valeur3); // nombre de boucle à réaliser…

while(true); // on ne bloc:…
}
}
}
}