Bonsoir,
j'ai besoin de votre aide car mon code ne fonctionne pas.
J'ai l'impression qu'il ne sort jamais de la suite de boucle if (la valeur ne descend jamais, elle est en constante augmentation)
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,20,4); // set the LCD address to 0x27 for a 16 chars and 2 line display
int pin = 8;
unsigned long duration;
unsigned long starttime;
unsigned long sampletime_ms = 30000;//sampe 30s ;
unsigned long lowpulseoccupancy = 0;
float ratio = 0;
float concentration = 0;
float concentrationbefore = 0;
void setup() {
Serial.begin(9600);
pinMode(8,INPUT);
starttime = millis();//get the current time;
lcd.init(); // initialize the lcd
lcd.init();
// Print a message to the LCD.
lcd.backlight();
}
void loop() {
duration = pulseIn(pin, LOW);
lowpulseoccupancy = lowpulseoccupancy+duration;
if ((millis()-starttime) > sampletime_ms)//if the sampel time == 30s
{
ratio = lowpulseoccupancy/(sampletime_ms*10.0); // Integer percentage 0=>100
concentration = 1.1*pow(ratio,3)-3.8*pow(ratio,2)+520*ratio+0.62; // using spec sheet curve
lcd.setCursor(0,0);
lcd.print(" Concentration = ");
lcd.setCursor(0,1);
lcd.print(concentration);
lcd.println(" pcs/0.01cf");
lcd.setCursor(0,2);
lcd.print("Pollution level:");
lcd.setCursor(0,3);
lcd.print(" ");
if(concentration < 400)
{
lcd.setCursor(0,3);
lcd.print(" ");
lcd.setCursor(0,3);
lcd.print("NO");
}
if(concentration > 400)
{
lcd.setCursor(0,3);
lcd.print(" ");
lcd.setCursor(0,3);
lcd.print("Very Low");
}
if(concentration > 800)
{
lcd.setCursor(0,3);
lcd.print(" ");
lcd.setCursor(0,3);
lcd.print("Low");
}
if(concentration > 1500)
{
lcd.setCursor(0,3);
lcd.print(" ");
lcd.setCursor(0,3);
lcd.print("Medium");
}
if(concentration > 2500)
{
lcd.setCursor(0,3);
lcd.print(" ");
lcd.setCursor(0,3);
lcd.print("Very High");
}
}
}
une idée ?
Ca donne ca sinon: