vous êtes sûr que vous avez mis la console à 9600 bauds?
Version imprimable
Merci, pour cette réponse documentée. Malheureusement je n'ai pas les bases pour la comprendre bien.
Si c'est "char Temperature" qui pose problème, j'ai aussi essayé de le passer en "float Temperature"
Dans les deux cas le compilateur passe sans problème et ne retourne aucun message d'erreur.
Seulement " compilation terminée" et ensuite "téléversement fait"
Ce que je récupère dans les deux cas sont les mêmes chaines de caractère.
J'ai essayé avec des valeurs fixées "Température = 25" par exemple, et dans les deux cas je retrouve la même chaine que je ne sais pas exploiter.
Oui j'ai mis à 9600
Windev ne me retourne pas d'erreur.
J'ai mis une commande pour savoir la taille de la chaine à récupérer et Windev lit sans problème.
La connexion est établie avec "ConnexionEtablie=sFixeParamètre(4, 9600, 1, 8, 0)"
La variable ConnexionEtablie me retour bien le bon port.
Par contre il s'agit peut-être des autres paramètres
L'idée de vérifier le taux de transfert m'ayant orienté je viens d'essayer en mettant la parité à 0.
Du coup je récupère une chaine lisible: une série de trois chiffre un point une autre série de 3 chiffres et ce sur une cinquantaine de caractères. Ca devient lisible. Maintenant je crois pouvoir avancer et chercher pourquoi je n'ai pas le résultat attendu.
ah c'est windaube qui récupère mal ce qui arrive sur le port série, c'est ça ? l'arduino sera en 9600 bauds, 8N1
le code arduino est fonctionnel
il pourrait être simplifié (pas besoin de toutes ces variables globales)Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 float Temperature; int CapteurVal; float Tension; void setup() { Serial.begin(9600); } void loop() { CapteurVal = analogRead(2); Tension = (CapteurVal/1024.0)*5.0; Temperature = (Tension-.5)*100; // Vider le buffer de sortie série avant d'y envoyer la nouvelle valeur Serial.flush(); Serial.print (Temperature); delay(3000); }
côté windev vous pourriez sans doute (en supposant que le lien série soit sur COM5) faireCode:
1
2
3
4
5
6
7
8
9
10
11 void setup() { Serial.begin(9600); } void loop() { int valeurCapteur = analogRead(2); float tension = (valeurCapteur / 1024.0) * 5.0; float temperatureC = (tension - 0.5) * 100; Serial.println(temperatureC); // on met println pour avoir un passage à la ligne delay(3000); }
vous devriez voir les messages et si l'arduino envoie FIN alors le code s'arrêteCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 SerialPort: Handle Buffer: string = "" CaractereLu: string // Ouverture du port série COM5 à 9600 bauds en 8N1 (par défaut) SerialPort = SerialOpen("COM5", 9600) IF SerialPort <> -1 THEN WHILE TRUE SerialRead(SerialPort, CaractereLu) Buffer += CaractereLu IF Buffer = "FIN" THEN BREAK // Quitter la boucle END IF CaractereLu = '\n' THEN Info(Buffer, "Message reçu") Buffer = "" // Réinitialiser le tampon pour le prochain message END END SerialClose(SerialPort) ELSE Error("Impossible d'ouvrir le port série COM5.") END
Pendant que vous répondiez à mes difficultés, je suis allé vérifier ce que ça donnait en changeant la parité de 1 à 0
Je suis allé aussi chercher les caractéristiques du capteur de température. Je crois que c'est un DHT11 mais je n'en suis pas sûr vu que j'ai reçu ce capteur dans un lot avec la carte UNO avec 25 autres dont certains que je n'ai pas repéré. Celui que j'utilise ressemble beaucoup ( forme et couleur à un DHT11)
Il a une plage de 0 à 50° et je suppose de 0 à 1024. J'ai donc modifié le code ARDUINO pour le calcul de la température à renvoyer, et j'ai mis un délai de 30000 sur la boucle loop()
J'ai une surprise : Je viens d'apprendre que chez moi j'ai 193.25 °C ( C'est chaud ! )
Je vais tester vos code Windev.
Les variables qui ne servent pas dans le code ARDUINO, c'est que j'ai fait un wagon d'essais quand le code me renvoyait des trucs que je ne savais pas analyser...
On ne lit pas les infos d’un DHT11 avec un analogRead…
Prenez une bibliothèque et regardez les exemples
Dans un premier temps c'est ce que j'avais fait. J'avais lu avec la bibliothèque et afficher la température dans l'IDE. Ca marchait parfaitement
C'est parce que j'ai eu le problème en récupérant les valeurs avec Windev que j'ai essayé de faire une lecture directe sans la bibliothèque.
Du fait que j'ai eu les mêmes résultats je ne suis pas revenu sur le code avec la bibliothèque.
Mais vous avez sûrement raison. Je vais revenir à mon code initial pour avoir (peut-être) les bonnes valeurs. Mais apparemment il ne s'agit que d'un coefficient entre les deux méthodes.
Je vais tester tout çà maintenant que je peux lire un résultat
Ca marche nickel avec la bibliothèque DHT11.
Dans un premier temps j'ai cru qu'il y avait un rapport constant entre les deux versions.
Mais, l'arrivée du séchoir à cheveux à remis tout en place!
Seule la version DHT11 avec bibliothèque fonctionne.
Bonne journée.
Je ne sais pas quel composant vous avez mais le DHT 11 utilise le protocole oneWire
https://www.mouser.com/datasheet/2/7...on-1143054.pdf
Nos messages se sont croisés.
Vous aviez raison, cela ne marche pas sans le bibliothèque.
Ca affiche des valeurs qui change de peu, mais pas la température