Faire chaine de caractère décimale pour afficher sur un afficheur

Bonjour,

je travaille avec un collègue sur un afficheur industriel. On lui envoie des données en hexadécimal via un bus I2C. Et je voudrais savoir comment convertir ces données et ensuite dire à l’afficheur d’afficher le résultat (du décimale)

Donc on a déclarer les variables etc
Donc les données sont en décimal, et il faut faire une chaîne de caractère pour voir les caratères justement en lettre

void receiveData(int byteCount){
    while(Wire.available()) {
        dataReceived = Wire.read();
        Serial.print("Données reçue : ");
        Serial.println(dataReceived);
        
    }
}

  
  void sendData(){
    int envoi = dataReceived + 1;
    Wire.write(envoi);

et le gros programme en pièce-jointe, merci de vos futures réponses

AfficheurTEST.ino (14 KB)

Serial.println(dataReceived, HEX);

Attention il enlève les 0 non significatif.

Regarde mon post pour savoir comme moi j'ai fait pour ajouter le 0 non significatif.

Donc ton code c'est pour afficher les données reçus mais en hexa ? Moi j'aimerais les faires passer en décimale pour que ensuite je dis a l'afficheur de l'afficher donc je dois mettre "DEC" à la place de "HEX" non?

Regarde mon poste: explique tout !
Fait attention car moi je reçois les hex a l'inverse, peut être pas toi.
Si il y a quelque chose que t'as pas compris, je suis la.

savoriano:
Regarde mon poste: explique tout !

Quel post ?? un lien peut-être aiderait, non :o ?

Oui un lien serait plus judicieux x) !

Je reçois les données sous la forme Décimale
donc il faudrait que je convertisse en HEXA puis en ASCII pour l'afficheur
est-ce que ces lignes conviendrait ? (je veux pas afficher en hexa, juste convertir)

 String stringOne =String(dataReceived, HEX); // conversion de la valeur en base hexadecimale
        Serial.println(dataReceived,ASCII);

Je reçois les données sous la forme Décimale

vous voulez dire en ASCII? genre vous recevez les caractères ASCII ‘1’ (code 49dec) puis ‘2’ (code 50dec) puis ‘3’ (code 51dec) pour le nombre 123 ?

et vous devez refabriquer 123 sous forme d’un entier que vous voulez ensuite rebalancer en ASCII sous forme HEXA donc “0x7B” ou juste “7B” mais en ASCII ??

c’est ça ?

Bonjour, en faite je reçois les données en décimale. Par exemple "106" qui correspond à J.
Moi je voudrais les reçevoir en lettre afin par la suite de dire à l'afficheur d'afficher ses données. Donc comment faire ?

je ne comprends pas - si vous recevez le code ASCII de 'j' minuscule (code ASCII 106 en decimal) directement, vous avez déjà la bonne valeur... faites juste un         Serial.println((char) dataReceived); pour que le compilateur appelle la fonction println() qui gère un paramètre de type caractère (ou déclarez directement dataReceived en char et pas en byte). vous devriez voir alors 'j' sur la sortie série.

Soit votre arduino reçoit les données directement en hexadecimal, soit vous devez convertir votre chaine de caractères en un entier (normalement, arduino sait le faire), puis demander à arduino de le convertir en hexadecimal (il est vraisemblable qu’arduino va faire des divisions successives, engérant les restes, par 16 (des décalages en pratique), garder le reste en attente… etc (comme vous), et transmettre les restes dans l’ordre inverse, chacun de ces restes étant codé…

vous pouvez aussi recevoir caractère après caractère, accumuler le resultat dans un entier:
‘1’ recu :nombre = 10* nombre + ‘1’ -‘0’ == 1
‘2’ reçu : nombre = 10* nombre +‘2’ -‘0’ == 10 +2 == 12
‘5’ reçu : nombre = 10* nombre +‘5’ -0 == 10*12 + 5 == 125

dbrion06:
Soit votre arduino reçoit les données directement en hexadecimal...

En fait l'arduino reçoit toujours des octets sur son port Série. La question est qu'est-ce que cet octet (ou suite d'octets) représente... ça peut être du code ASCII et dans ce cas il faut savoir si on n'attend qu'un seul symbole ou plusieurs pour bâtir une représentation textuelle de ce que l'on reçoit.

Ensuite il faut savoir si cette représentation textuelle est un chiffre, dans quelle base ce chiffre est représenté pour pouvoir décoder.

Mais bon, d'après ce que l'OP écrit ci dessus, je pense qu'il reçoit directement son texte comme il le veut, juste qu'il stocke cela dans un format entier et donc print affiche le code ASCII au lieu du caractère...

Bonjour en effet mon arduino reçoit en décimale les données. Par exemple je reçois 106 (ce qui corresponds à "j") ! Et je voudrais justement voir le "j" s'afficher dans le moniteur série d'arduino ! Donc on m'a dit qu'il faut juste une conversion mais comment ?


Je reçois en décimale et je le veux en caractère en gros

Si vous avez réussi à convertir votre chaîne de chiffres (entre 0 et 9) en un nombre c tenant sur 8 bits, il n'y a rien à faire pour imprimer le caractère correspondant Serial.print(c); le fera naturellement. (au pire, Serial.print((char) c) le fera)

DebutantArduino:
Donc on m'a dit qu'il faut juste une conversion mais comment ?

J'ai répondu en #8, vous n'avez pas lu ?

Désolé j'ai mal lu, je pensais que c'était pour autre chose.
Je teste ça

Niquel ça marche merci !

Mais mon ami m'a dit qu'il faut que je le déclare en variable pour contenir les données et savoir ou le placer pour ensuite pouvoir l'afficher sur l'afficheur, comment je fait ?

char truc;
byte truc;
uint8_t truc;

doivent faire l'affaire

Mais mon ami m'a dit qu'il faut que je le déclare en variable pour contenir les données et savoir ou le placer pour ensuite pouvoir l'afficher sur l'afficheur, comment je fais ?

savez vous écrire 'j' sur l'écran à un endroit donné ? postez un code qui ne fait que ça.

dbrion06:
char truc;
byte truc;
uint8_t truc;

doivent faire l’affaire

Donc le char je déclare ?
byte aussi ?

Et uint8_t c’est quoi ?

Genre je déclare par exemple

char MessageChar
Byte MessageChar

et uint8_t MessageChar

Ou je dois écrire des trucs derrière ?
Désolé je m’y connais peu


Je peux l’écrire à l’aide de la ligne char Message = “J”;

Mais je dois l’écrire avant de compiler.

Or, je dois écrire un message via un PC Client (d’ou la demande pour avoir les caractères en lettre) que je dois donc mettre dans une variable pour ensuite l’afficher sur l’afficheur

(j’ai) rien compris… expliquez vous mieux…

vous nous aviez dit:

je travaille avec un collègue sur un afficheur industriel. On lui envoie des données en hexadécimal via un bus I2C. Et je voudrais savoir comment convertir ces données et ensuite dire à l’afficheur d’afficher le résultat (du décimale)

détaillez qui fait quoi, l’environnement, les connexion, qui parle à qui, et ce que vous voulez faire…

La partie de mon collègue :

Il a du faire une page PHP ou il écrit un message, et ce message est envoyé à mon arduino (via un bus I2C BROCHE SDA/SCL) , et moi je dois recevoir ses données et les convertir en caractère (d'ou ma demande), et la actuellement ça marche, mais maintenant, je dois déclarer la variable qui contiendra ses données reçu. Et ensuite je devrais faire afficher cette variable sur l'afficheur