Voila, pour mon projet de TPE ( sur l'écholocalisation) nous avons décider d'utiliser du matériel Arduino précisément l'HC-SR04 et l'écran Lcd. J'ai écris le programme, fait le montage etc... Le montage est pour moi a 100% réussi mais j'ai un problème après avoir téléverser le programme car les donnée que je demande d'afficher sur l'écran ne s'affiche pas, enfin pas tout et en plus c'est le plus important qui manque.
#include <LiquidCrystal.h>
LiquidCrystal lcd(12,11,5,4,3,2);
#define trigPin 9 //Trig
#define echoPin 8 //Echo
void setup()
{
Serial.begin (9600);
pinMode(trigPin, OUTPUT); //On défini Trig comme une sortie
pinMode(echoPin, INPUT); //On défini Echo comme une entrée
lcd.begin(16,2);
}
void loop() {
long duree, distance;
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10); //Trig envois pendant 10ms
digitalWrite(trigPin, LOW);
// On calcul le temps pour l'aller retour du signal
duree = pulseIn(echoPin, HIGH);
distance = duree*340/(2*10000);
lcd.setCursor(0, 0); // Définit l'emplacement auquel le texte suivant écrit sur l'écran LCD sera affiché
lcd.print("Distance: "); // Imprime la chaîne "Distance" sur l'écran LCD
lcd.print(distance); // affiche la distance entre l'HC-SR04
lcd.print("cm");// Imprime la chaine " cm" sur l'écran LCD
lcd.setCursor(0,1);
lcd.print("Duree:");
lcd.print (duree); // on affiche le temps mit pour faire l'aller retour
lcd.print("ms");
delay(200); // Temps d'attente de 200 ms
}
J'ai mit le code et une image pour vous montrer que l'écran oublie de me montrer les données sur distance et le temps.
Est ce que quelqu'un pourrait m'aider a résoudre ce PB svp
Merci
neoabric1:
Voila, pour mon projet de TPE ( sur l'écholocalisation) nous avons décider d'utiliser du matériel Arduino précisément l'HC-SR04 et l'écran Lcd. J'ai écris le programme, fait le montage etc... Le montage est pour moi a 100% réussi mais j'ai un problème après avoir téléverser le programme car les donnée que je demande d'afficher sur l'écran ne s'affiche pas, enfin pas tout et en plus c'est le plus important qui manque.
#include <LiquidCrystal.h>
LiquidCrystal lcd(12,11,5,4,3,2);
#define trigPin 9 //Trig #define echoPin 8 //Echo
void setup()
{
Serial.begin (9600);
pinMode(trigPin, OUTPUT); //On défini Trig comme une sortie
pinMode(echoPin, INPUT); //On défini Echo comme une entrée
lcd.begin(16,2);
}
void loop() {
long duree, distance;
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10); //Trig envois pendant 10ms
digitalWrite(trigPin, LOW);
// On calcul le temps pour l'aller retour du signal
duree = pulseIn(echoPin, HIGH);
distance = duree340/(210000);
lcd.setCursor(0, 0); // Définit l'emplacement auquel le texte suivant écrit sur l'écran LCD sera affiché
lcd.print("Distance: "); // Imprime la chaîne "Distance" sur l'écran LCD
lcd.print(distance); // affiche la distance entre l'HC-SR04
lcd.print("cm");// Imprime la chaine " cm" sur l'écran LCD
lcd.setCursor(0,1);
lcd.print("Duree:");
lcd.print (duree); // on affiche le temps mit pour faire l'aller retour
lcd.print("ms");
delay(200); // Temps d'attente de 200 ms
}
J'ai mit le code et une image pour vous montrer que l'écran oublie de me montrer les données sur distance et le temps.
Est ce que quelqu'un pourrait m'aider a résoudre ce PB svp
Merci
Quand "ça marche pas", il faut instrumenter le code pour comprendre la source du problème.
Tu ajoutes des Serial.print() dans ton code pour faire afficher dans la console des valeurs intermédiaires.
Par exemple
tu places un Serial.println(duree); juste avant le calcul de la distance.
tu places un Serialprintln(distance); juste après le calcul de la distance
Tu constates que la valeur n'est pas celle que tu attends.
Tu reprends le calcul à la main. En respectant les particularités du type des variables utilisées. Dans ton cas tu prends des entiers donc tu n'utilises que des entiers. Tu respecte aussi la priorité des opérations (quand on travaille avec des entiers c'est particulièrement important). Et tu vas vite comprendre où ça cloche et tu pourras corriger ton code.
ok merci fdufnews.
Quand j'ai rajouté le Serial.println(duree);juste avant le calcul de la distance et le Serialprintln(distance); juste après le calcul de la distance. j'ai lancé le programme, puis j'ai regardé dans le moniteur série ce que sa a donnée. Effectivement il y a un problème, il me donne que des 0 donc c'est en parti pour sa que sur l'écran lcd il me donne aussi que des 0 (enfin je pense que c'est une théorie).
Franchement là je suis perdu, je vois un peu flou. Je comprend pas, pourtant je respecte bien la priorité des opérations . Je vois pas ce qui manque, ce qu'il faut rajouté ou bien bougé dans le programme.
la valeur de durée retourné quand j'ai rajouté Serial.print...etc ?
Si c'est ce que je comprend ce que tu veux dire c'est 0 la valeur de durée retournée.
Pourtant j'ai écris un programme, le même a vrai dire mais sans le code de l'écran LCD donc jai écris le code pour voir les résultats de la distance et de la durée sur le moniteur en série et les résultats qu'on me donne pour la distance et la durée sont bonnes. Tandis que dans le vrai programme juste en rajoutant le code de l'écran LCD les résultats me donnent 0
Il n'y a pas de raison que l'écran perturbe le calcul de la distance. As-tu touché au câblage entre le moment où ça fonctionnait et maintenant?
Vérifie ton câblage et recharge le code sans l'écran LCD. Vérifie les valeurs.
Et recommence avec le code intégrant l'affichage LCD.
Ok merci fdufnews et lesept je vais regarder tout ça. Il me semble pourtant ne pas avoir touché au câblage entre le moment ou ça fonctionnait et maintenant.
Je vais tester tout ce que vous m'avez dis dans vos derniers post.