Je viens chercher de l'aide ici car je n'ai pas trouvé/compris la solution à mon problème sur les autres poste et forum.
Voici mon problème:
J'ai récemment fais l'acquisition d'un écran Nextion, le Enhanced NX4832K035-011.
Mon soucie concerne l'envoi d'un entier du Nextion vers l'arduino.
Je m'explique sur une des page de mon écran j'ai la possibilité de régler une température "consigne".
Cette température est un attribut de type number, et je voudrais renvoyer cette valeur sous forme d'entier et non de string vers mon arduino.
Je précise que je n'utilise pas la bibliothèque Nextion.
Je vous joint une photo de la page en question si ça peut aider.
N’hésitez pas a me solliciter pour tout autre information complémentaire.
Ton message n'est pas dans la bonne section, utilise le bouton 'report to moderator' pour demander de le déplacer.
Ensuite lis les messages épinglés en haut du forum pour voir comment poster une image dans un message...
Je connais très peu les écrans Nextion mais je crois qu'ils peuvent communiquer avec l'arduino par la liaison série. Si c'est le cas, tu peux passer ta valeur comme ça. Il existe des tutos pour se servir de la liaison série, par exemple celui ci
Si ton port série est déjà utilisé, pour le PC par exemple, tu peut utiliser la bibliothèque softwareserial qui te permet de créer d'autres liaisons séries.
Merci pour votre réponse.
En effet le Nextion communique via la liaison série de l'arduino.
Mon projet est déjà bien avancé, je commence à comprendre les subtilités du logiciel nextion ( mais j'ai du mal).
Mais mon problème persiste .
J'arrive uniquement à envoyer des chaînes de caractères ( des strings) et pas des entier ( Et encore je comprend pas tout)...
De plus j'ai pas de soucis à communiquer de l'arduino vers le Nextion ( mes capteurs connectés à l'arduino renvoient bien les valeurs à l'écran).
Pour faire simple, se que je voudrais faire:
ma température "réel" est envoyée par l'arduino sur l'écran (Ça fonctionne)
ma température "consigne" se règle depuis l'écran nextion avec une incrémentation +ou-1 via les boutons tactiles de l'écran (Ça fonctionne)
quand ma température "réel" dépasse la température "consigne" je voudrais que le Nextion envoi l'info à l'arduino pour activer ou désactiver une sortie ( ça fonctionne pas)
Pour faire encore plus simple je veux uniquement renvoyer la température "consigne" réglé via l'écran à l'arduino sous forme d'un entier le plus simplement possible.
Merci pour ta réponse kamill.
Oui effectivement c'est un option. J'y avais pensé mais je voudrais éviter d'utiliser des fonctions pour changer le type de ma variable.
Il y a pas un moyen tout simple d'envoyer un entier depuis un nextion ?
Effectivement, il existe la fonction "covx" qui permet de convertir une variable de type numérique en texte ou de texte en type numérique.
Mais pour ça je pense qu'il faut utiliser leur bibliothèque.
Et comme je le disais précédemment mon but est de ne pas utiliser de bibliothèque Nextion.
Je comprend pas qu'il n'existe pas de moyen simple pour communiquer avec la liaison série...
Vraiment dommage que Nextion ne soit pas open source....
En tout cas merci pour vos réponses, on va bien finir par trouver!
//==============================================Reception données de Nextion =======================================
// 3X A5 N° de page 1 Caractère (qui envoi) 4 caractères de données ex: 19.6 ou 4444
void HMI_read() {
static uint8_t HMI_read_data[10]; //This is a temporary buffer to hold the data from the display. Space for 10 bytes although this demonstration only uses 6 bytes
static uint8_t HMI_read_data_i; //This is a count of how many bytes have been received from the display.
static uint8_t a5count; //0xa5 repeated 3 times is used as a start indicator, this is a count of how many times it has been received.
uint8_t readreceptnextion; //This is to hold the last received byte to ensure that it is only read from the receive buffer once.
while (Serial2.available() > 0) { //Read every byte in the receive buffer
readreceptnextion = Serial2.read();
if (readreceptnextion == 0xa5) { //Count the number of times 0xa5 has been received
++a5count; // caracteres de demarrage de message
if (a5count > 2) {
a5count = 0;
HMI_read_data_i = 0;
}
}
else {
a5count = 0;
}
// =========================================== fin de reception des caractères de demarrage ================================================
// Lecture des datas
HMI_read_data[HMI_read_data_i] = readreceptnextion;
if (HMI_read_data_i == 6) {
text[1] = (HMI_read_data[1]);
text[2] = (HMI_read_data[2]);
text[3] = (HMI_read_data[3]);
text[4] = (HMI_read_data[4]);
text[5] = (HMI_read_data[5]);
text[6] = (HMI_read_data[6]);
numpage = text[1];
quichar = (text[2]);
recup[1] = text[3];//1er caractere ex:1
recup[2] = text[4];//2eme caractere ex:9
recup[3] = text[5];//3eme caractere ex: .
recup[4] = text[6];//4eme caractere ex 6 =19.6
valeur = atof(recup);
}
++HMI_read_data_i;
if (HMI_read_data_i > 9) {
HMI_read_data_i = 9;
}
}
}
Merci beaucoup pour votre réponse.
Je part en déplacement quelques jours j'esserai votre solution dès que je rentre .
Bien sûr je vous tiendrais au courant.
Bonne journée.