Bonjour,
J essai de mettre au point mon débitmètre je suis parti de l’exemple http://www.hobbytronics.co.uk/download/YF-S201.ino
tout fonctionne quand je l’utilise avec le moniteur,
Avec mon écran UTFT la variable L/hour en l’absence de débit ne descend jamais à zéro
a l affichage il reste des chiffres
ce qui est gênant un peu d’aide me serai utile
/*
YF-S201 Hall Effect Water Flow Meter / Sensor
http://www.hobbytronics.co.uk/yf-s201-water-flow-meter
Read Water Flow Meter and output reading in litres/hour
*/
#include <UTFT.h>
extern uint8_t SmallFont[]; //8x12 pixels 95 Caractères
UTFT myGLCD(CTE32HR,38,39,40,41);
volatile int flow_frequency; // Measures flow meter pulses
unsigned int l_hour; // Calculated litres/hour
unsigned char flowmeter = 2; // Flow Meter Pin number
unsigned long currentTime;
unsigned long cloopTime;
void flow () // Interruot function
{
flow_frequency++;
}
void setup()
{
myGLCD.InitLCD();
myGLCD.clrScr();
myGLCD.setFont(SmallFont);
pinMode(flowmeter, INPUT);
Serial.begin(9600);
attachInterrupt(0, flow, RISING); // Setup Interrupt
// see http://arduino.cc/en/Reference/attachInterrupt
sei(); // Enable interrupts
currentTime = millis();
cloopTime = currentTime;
}
void loop ()
{
currentTime = millis();
// Every second, calculate and print litres/hour
if(currentTime >= (cloopTime + 1000))
{
cloopTime = currentTime; // Updates cloopTime
// Pulse frequency (Hz) = 7.5Q, Q is flow rate in L/min. (Results in +/- 3% range)
l_hour = (flow_frequency * 60 / 7.5); // (Pulse frequency x 60 min) / 7.5Q = flow rate in L/hour
flow_frequency = 0; // Reset Counter
Serial.print(l_hour, DEC); // Print litres/hour
Serial.println(" L/hour");
myGLCD.printNumI(l_hour,1,10); // garde des chiffres malgré une absence d’impulsion
}
}
es tu sur que tu n'as pas d'impulsions parasites en entrée interruptible
( fais afficher flowfrequency à chaque boucle ( avant de la razer). tu verras bien si elle passe et reste à 0 si pas de débit)
si pardon il est bien a zéro et pas d affichage parasite les valeurs sont figé il faut un débit pour relancer
par contre si je fais la meme operation avec (flow_frequency * 60 / 7.5) je ne suis pas zero
Je pense pas, l information 0 devrais être affiché il l affiche avec Serial.print
Je pense plus à l’utilisation de l interrupts() qui perturbe la mise a zéro des variables je lis ca
Si vous vouliez vous assurer qu un programme toujours pris les impulsions d'un codeur rotatif, de sorte qu'il ne manque jamais une impulsion, il serait très difficile d'écrire un programme pour faire autre chose, parce que le programme aurait besoin d'interroger en permanence le capteur lignes pour le codeur, afin de capturer
des impulsions quand ils se sont produits.
Il faut que j’intègre les fonctions si dessous #define interrupts() sei() // j active les interrupts #define noInterrupts() cli() je désactive
C est la première fois que j utilise cette fonction
Serial.print(l_hour, DEC); // Print litres/hour
Serial.println(" L/hour");
myGLCD.printNumI(l_hour,1,10); // garde des chiffres malgré une absence d'impulsiongarde des chiffres malgré une absence d'impulsion
Serial.print et myGLCD.print affichaient la même variable qui n'était pas modifiée par la routine d'interruption. Donc il n'y avait aucune raison que les valeurs diffèrent. Il y a manifestement un problème ou une mauvaise utilisation de la librairie associée à ton afficheur graphique.
C'est franchement bizarre le problème, j'ai commande aussi un flowmeter, je verrais si j'ai les même problème d'affichage sur mon TFT, la formule donnant la fréquence en fonction du débit elle a été fourni avec le débit metre ??, car le mien est plus petit que le votre.