Bonjour,
Je voudrais savoir quel est le meilleur moyen de collecter des données pendant que l'on affiche une valeur moyennée de ces dernières par exemple. Le détecteur captant des "fronts montants" et pouvant être amené à être sollicité un très grand nombre de fois par secondes. L'idée serait de créer une fonction externe d'affichage avec un delay(2000) pour laisser le temps de lire la mesure pendant que le capteur continue d'alimenter les tableaux de mesures et de ce fait sans perdre pour autant en précision.
Voilà où j'en suis:
// Librairies
#include <LiquidCrystal.h>
// Configuring the LCD screen to display datas
LiquidCrystal lcd(3, 4, 12, 11, 10, 9);
// Variables
int mybutton = 7; // sensor input digital port
int counter = 0; // one counter
int buttonState; // button state
int memoryState = LOW; // Recording the memory state
unsigned long time; // Time recording
float deltaN; // To calculate: numbers of pics received
float deltaTime; // To calculate: during delta t
float result; // Result
// Tables
int increment = 0;
float timeTab[]={0};
int numberTab[]={0};
// Initialising
void setup() {
// Define the entry as an input
pinMode(mybutton, INPUT);
// Initialize the LCD screen
lcd.begin(16,2);
delay(10); // fast pause to let initialization time
lcd.setCursor(0, 0); // top left
lcd.print("LCD OK") ;
delay(1000); // pause of 2 secondes
// Display the beginning of the program to users
lcd.clear();
lcd.setCursor(0, 0); // top left
lcd.print("BENOIT M");
delay(1000);
lcd.setCursor(0, 1); // bottom left
lcd.print("Loadings");
delay(500);
lcd.clear();
//
}
// Loop
void loop()
{
increment++;
// Reading the button state
buttonState = digitalRead(mybutton);
// IF the button has a different state than the registered one AND this state is "high"
if((buttonState != memoryState) && (buttonState == HIGH))
{
// Increment the counter
counter++;
// Record the time
time = millis();
// Data processing
timeTab[increment]={time};
numberTab[increment]={counter};
deltaTime = ((timeTab[increment]-timeTab[increment -1])/1000.0);
deltaN= (numberTab[increment]-numberTab[increment -1]);
result = (deltaN/deltaTime);
// Display results
lcd.clear();
lcd.setCursor(0,0);
lcd.print("moyenne = ");
lcd.print(result);
lcd.setCursor(0,1);
//lcd.print(timeTab[increment]);
}
// we record the state of the button for the next turn
memoryState = buttonState;
}