Problème assez simple sur nextion

Bonjour à toutes et à tous !

Je suis depuis quelque jours sur la programmation d'écran Nextion avec un arduino Mega2560...

J'ai réussit à mettre deux potentiomètres et d'afficher leurs valeurs sur l'écran Nextion là ça marche, mais je potasse beaucoup et je pensais que je pourrais très bien, sans trop de problème, afficher une valeur de tension plutôt qu'une valeur entre 0 et 1023...
j'ai donc pris la bibliothèque arduino "read voltage" dans l'IDE arduino et je pensais simplement modifier un potentiomètre en valeur de 0 à 5volts avec le bout de programme modifié comme montré là ==>>

void loop() { delay(100); int sensorValue = analogRead(sensorPin); float voltage = sensorValue * (5.0 / 1023.0); Serial.print("n0.val="); Serial.print(voltage); Serial.write(0xff); Serial.write(0xff); Serial.write(0xff);

Sachant que le deuxième potentiomètre fonctionne et je ne l'ai pas modifié du coté du programme, il m'affiche de 0 à 1023 sans gros soucis...

Mais comment je pourrais faire pour passer de la valeur 0 à 1023 à la valeur 0 à 5 ?? (read analog voltage ) ? sur le arduino/nextion, le problème viens à mon avis de l'Arduino

Merci de me venir en aide ...

byte sensorPin = A0;
int sensorValue = 0;

byte potentiometre1Pin = A1;
int potentiometre1Value = 0;


void setup() {
pinMode (sensorPin, INPUT);
pinMode (potentiometre1Pin, INPUT);

Serial.begin(9600);

}

void loop() {

delay(100);
int sensorValue = analogRead(sensorPin);
float voltage = sensorValue * (5.0 / 1023.0);
Serial.print("n0.val=");
Serial.print(voltage);
Serial.write(0xff);
Serial.write(0xff);
Serial.write(0xff);

potentiometre1Value = analogRead(potentiometre1Pin);
Serial.print("n1.val=");
Serial.print(potentiometre1Value);
Serial.write(0xff);
Serial.write(0xff);
Serial.write(0xff);
}

Voilà le code au complet désolé si je l'avais mal mis dans mon premier message

Bobjour photongris

Je ne comprends pas bien où est ton problème, dans ton programme voltage a bien de 0.0 Volts à 5.0 Volts et potentiometre1Value 0 à 1023.

Cordialement
jpbbricole

Ben oui, c'est bien ça qui me pose problème !! ça parait simple pourtant ! mais là j'ai essayer beaucoup de méthode et rien ne fonctionne... c'est curieux en effet !! c'est pourquoi je pense que c'est pas grand chose mais je sèche là !!

Tu aimerai avoir les 2 valeurs de 0.0 à 5.0V ?

Ce que j'aimerai bien avoir c'est une valeur de 0.0 jusqu'à 5.0 sur l'écran au lieu de 0 à 1023... peut être que c'est un problème venant du nextion je viens de trouver une idée : peut être changer le type de nombres dans l'éditeur nextion.. je vais essayer ça...

Bien sur je vous tiens au courant !!

en tout cas merci

Votre écran est sur quel port série ?

Avec ça

Vous envoyez juste la valeur entre 0 et 1023

Je te mets ton programme corrigé avec les 2 valeurs de 0.0V à 5,0V

Le programme:

byte sensorPin = A0;
//int sensorValue = 0;

byte potentiometre1Pin = A1;
//int potentiometre1Value = 0;


void setup() {
	//pinMode (sensorPin, INPUT);
	//pinMode (potentiometre1Pin, INPUT);

	Serial.begin(9600);

}

void loop() {

	delay(100);
	//int sensorValue = analogRead(sensorPin);
	float voltage = analogRead(sensorPin) * (5.0 / 1023.0);
	Serial.print("n0.val=");
	Serial.print(voltage);
	Serial.write(0xff);
	Serial.write(0xff);
	Serial.write(0xff);

	//int potentiometre1Value = analogRead(potentiometre1Pin);
	float potentiometreVoltage = analogRead(potentiometre1Pin) * (5.0 / 1023.0);
	Serial.print("n1.val=");
	Serial.print(potentiometreVoltage);
	Serial.write(0xff);
	Serial.write(0xff);
	Serial.write(0xff);
}

Je t'ai laissé les lignes devenues inutiles, en remarques.

Si non, mets moi ton fichier Nextion (à zipper) avec le modèle de l'afficheur.

byte sensorPin = A0;
//int sensorValue = 0;

byte potentiometre1Pin = A1;
int potentiometre1Value = 0;


void setup() {
//pinMode (sensorPin, INPUT);
pinMode (potentiometre1Pin, INPUT);

Serial.begin(9600);

}

void loop() {

delay(100);

float voltage = analogRead(sensorPin) * (5.0 / 1023.0);
Serial.print("x0.val=");
Serial.print(voltage);
Serial.write(0xff);
Serial.write(0xff);
Serial.write(0xff);

potentiometre1Value = analogRead(potentiometre1Pin);
Serial.print("n1.val=");
Serial.print(potentiometre1Value);
Serial.write(0xff);
Serial.write(0xff);
Serial.write(0xff);

}




J'ai mis ça comme code, je n'ai pas touché au potentiometre1 car je ne voudrai pas perdre sa valeur et j’attends d'abord de voir si le sensor est lue, mais avec çà j'ai plus de lecture sur le sensorValue. par contre j'ai mis un autre type de chiffrement (x0) au lieu de (n0) pour avoir trois chiffre après la virgule (ou presque autant qu'on veut suivant ce que l'on met dans la valeur de ce paramètre ) ( c'est une parenthèse ) donc avec la moitiés du programme j'ai potentiometre1Value qui s'affiche en 0 à 1023 et l'autre le x0 000.000 sans que ça bouge donc il reste à zéro... c'est bizarre quand même non ? donc il faudrait tout d'abord mesurer sur x0 et le reste je le doublerai si ça marche. Je pense que c'est mieux ainsi pour le début...

Tu dois avoir un problème avec Nextion, dans le UNO ça semble OK:

x0.val=2.49���
x0.val=2.49���
x0.val=2.49���
x0.val=2.49���
x0.val=2.49���
x0.val=2.49���

Avec un potentiomètre à mi-course.

A+

essaie avec ça

float voltage = (float)analogRead(sensorPin) * (5.0 / 1023.0); ^----^
pour voir...

ça ne va rien changer.

Si on voulait que toute l’expression soit en float, il faudrait écrire analogRead(sensorPin) * (5.0f / 1023.0f) car int * float ➜ float

Le cast (float)analogRead(sensorPin) ne porte que sur le résultat de analogRead(sensorPin), c’est-à-dire sur l’entier retourné par cette fonction. Cela convertit cet entier en float avant la multiplication.

L'expression (5.0 / 1023.0) est de type double puisque ce sont des littéraux double.

Lors d'une ’opération float * double, ou int * double quand on n'a pas le cast, le float ou le int est promu en double avant la multiplication. Le résultat final est donc toujours de type double.

Ensuite comme on stocke ça dans un float, le double perd en précision et est transformé en float. Sur Arduino Mega ça n'a en fait aucune importance car un float et un double c'est le même nombre d'octets donc pas de perte de précision.


Je n'utilise pas Nextion mais il me semble que .val ne va chercher que la partie entière non ?

Pour afficher un float avec trois décimales sur un Nextion, utilisez un champ texte (t0) et envoyez le float comme texte depuis Arduino. Dans l’éditeur Nextion, mettez le format x pour le champ texte si vous voulez contrôler les décimales. Côté Arduino, le code peut être :

float voltage = analogRead(sensorPin) * (5.0 / 1023.0);
Serial.print("t0.txt=\"");
Serial.print(voltage, 3); // trois décimales envoyées
Serial.print("\"");
Serial.write(0xff);
Serial.write(0xff);
Serial.write(0xff);

Youpi !! voilà ça fonctionne, j'ai des variable de 0.000 à 5.000 avec le t0 (texte qui est sur le nextion ) Donc vous m'avez enlevé une épine du pied !!

J'essayerai d'autre chose pour apprendre mais je commence à trouver des solution grâce à vous tous c'est super !!

Merci donc et j'espère aussi que ça aidera d'autre avec ce type écran et l'Arduino...