Go Down

Topic: Affichage LCD "flouté" par une liaison I2C entre arduino et RPI (Read 364 times) previous topic - next topic

Nonowprrd

Bonjour,

Actuellement en stage à l'Ecole Supérieur du Bois (Bois HD) à Nantes pour valider mon DUT Mesures Physiques, je dois instrumenter une boite chaude. L'objectif du projet est le suivant : Connecter un afficheur LCD à l'arduino pour avoir une acquisition en temps réel des données d'un capteur de température/humidité (SHT15). L'afficheur LCD et l'arduino sont connectés normalement via les entrées digitales de l'arduino. Ensuite le but est de pouvoir stocker les données recueillies dans un fichier texte. Pour cela on relie via le bus I2C un raspberry Pi à l'arduino. Jusqu'à présent j'ai réussi à réaliser cela. Mon problème est le suivant : comme le RPI et l'arduino communiquent via un bus I2C, lorsque je lance le stockage des valeurs avec le RPI je perd l'acquisition en temps réel sur l'afficheur LCD. Ainsi lorsque je supprime les 2 lignes en rouge de mon programme arduino que je vous met en pièce jointe je retrouve l'acquisition en temps réel sur l'afficheur LCD. Je me demande donc si il est possible d'utiliser en même temps l'afficheur LCD et la communication I2C entre arduino et RPI. Si cela est possible, auriez-vous un conseil à me proposer ?

Bien respectueusement,
Arnaud PERRAUD

JMe87

Bonjour Arnaud,

- il faut faire un test avant d'afficher, si la temperature ou le degre d'humidite ne changent pas, inutile de passer du temps CPU pour continuer a afficher la meme chose ;-)

- il faut afficher le code entre les balises "codes" cliquer sur < / > (sans les espaces) dans cette fenetre "Post reply"

- le "respectueusement" est exagere. Ici le tutoiement est de rigueur et un simple merci d'avance est apprecie et suffisant.

Jacques

fdufnews

Code: [Select]
float temperature = getTemperature(); //lecture de la température et affection à la variable de type float
 float humidity = getHumidity(); //lecture de l'humidité et affection à la variable de type float


 data[0] = getTemperature(); //lecture de la température et affection à la variable de type float
 data[1] = getHumidity();

Tu relis inutilement les capteurs 2 fois de suite. Et comme chaque acquisition prend 1 s, il serait préférable de faire ça:
Code: [Select]
float temperature = getTemperature(); //lecture de la température et affection à la variable de type float
 float humidity = getHumidity(); //lecture de l'humidité et affection à la variable de type float


 data[0] = Temperature(); //lecture de la température et affection à la variable de type float
 data[1] = Humidity();


De ce que je comprends, l'Arduino est esclave sur le bus I²C. Donc il est bloqué parce qu'il reçoit des requêtes en permanence. Le problème serait plutôt du coté du Rasperry Pi qui doit faire des demandes trop rapprochées.

Edit: peut-être un autre problème. Ton attente d'une seconde est faite avec un delay du coup tu bloques tout pendant ce temps là. Ce n'est pas l'approche la plus efficace.
Il vaudrait mieux:
 - lancer l'acquisition
 - retourner dans la boucle principale
 - revenir dans la fonction d'acquisition plus tard (au moins une seconde)
Séquence à rythmer en utilisant millis() qui n'est pas bloquante

A quelle fréquence fais-tu les acquisition?

Go Up