I aim to give the consumption of led on a day I already made the program that calculates the consumption of the led in real time but I would like to press a button or second part of the lcd display I can display the consumption over the last twenty four hours
You have given us very little information. You have not even posted your existing program.
Rather than think of having two loop() functions think of having loop() call two other functions. Have a look at how it is done in Several Things at a Time
Sorry it's my first post and i'm french i don't a expert in forum but i send you my code
// inclure les librairie utile au code:
#include <LiquidCrystal.h>
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2; //Donnez un nom aux pin de l'arduino
LiquidCrystal lcd(rs, en, d4, d5, d6, d7); //Dire a l'arduino quelle pin il doit utiliser
double AcsOffset = 2.5; //Définir un offset de 2.5 a la sortie du capteur de courant
double Sensibl = 0.066; //Définir la valeur de la sensibilité du capteur de courant
double courant = 0; //Définir la variable
double tension = 0; //Définir la variable
double puissance = 0; //Définir la variable
void setup() {
lcd.begin(16, 2); //Dire a l'arduino combien de ligne et colonne contient l'afficheur utilisé
}
void loop() {
double ValeurLue = analogRead(A0); //Définir la variable ValeurLue sur la valeur obtenue en entré de A0
tension = (ValeurLue * 5.0 / 1023); //Calcule qui convertie la ValeurLue obtenue a l'entrer de A0 a une tension entre 0V et 5V
courant = (tension - AcsOffset) / Sensibl; //Calcule du courant
puissance = (tension * courant); //Calcule de la puissance en W en utilisant P=U*I
lcd.setCursor(0, 1); //Dire a l'arduino sur qu'elle ligne il doit écrire
lcd.print("Cons="); //Ecrire Cons=
lcd.print(puissance); //Ecrire la valeur obtenue en faisant le calcul de la puissance fait précedement
lcd.print("W"); //Ecrire W a la suite de la valeur pour donner une une unité a la valeur transmise
lcd.setCursor(0, 0); //Dire a l'arduino sur qu'elle ligne il doit écrire
if (courant <= 0.05) { //Condition pour définir l'intensité d'allumage du circuit
lcd.print("ETEINT");
}
else if ( (courant > 0.05) && (courant < 9.8)) {
lcd.print("FAIBLE");
}
else if ( (courant > 9.8) && (courant < 14.8)) {
lcd.print("MOYEN");
}
else if (courant > 14.8) {
lcd.print("FORT");
}
lcd.print(" "); //Effacement de la première ligne pour éviter toutes erreurs d'affichage
delay(500);
lcd.setCursor(0, 1); //Dire a l'arduino d'ecrire a la deuxième ligne de l'afficheur
lcd.print(" "); //Effacement de la deuxième ligne pour éviter toutes erreurs d'affichage après le delais pour ne pas avoir de blanc a la ligne dans le programme
}
Something like this, but you will have to accumulate a running average.
// inclure les librairie utile au code:
#include <LiquidCrystal.h>
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2; //Donnez un nom aux pin de l'arduino
const byte switchPin = 6; //switch connected to pin 6 and ground, closing switch puts LOW on pin <------<<<<<
LiquidCrystal lcd(rs, en, d4, d5, d6, d7); //Dire a l'arduino quelle pin il doit utiliser
double AcsOffset = 2.5; //Définir un offset de 2.5 a la sortie du capteur de courant
double Sensibl = 0.066; //Définir la valeur de la sensibilité du capteur de courant
double courant = 0; //Définir la variable
double tension = 0; //Définir la variable
double puissance = 0; //Définir la variable
void setup()
{
lcd.begin(16, 2); //Dire a l'arduino combien de ligne et colonne contient l'afficheur utilisé
pinMode(switchPin, INPUT_PULLUP); //turn on pullup resistor to this pin <------<<<<
}
void loop()
{
double ValeurLue = analogRead(A0); //Définir la variable ValeurLue sur la valeur obtenue en entré de A0
tension = (ValeurLue * 5.0 / 1023); //Calcule qui convertie la ValeurLue obtenue a l'entrer de A0 a une tension entre 0V et 5V
courant = (tension - AcsOffset) / Sensibl; //Calcule du courant
puissance = (tension * courant); //Calcule de la puissance en W en utilisant P=U*I
lcd.setCursor(0, 1); //Dire a l'arduino sur qu'elle ligne il doit écrire
lcd.print("Cons="); //Ecrire Cons=
lcd.print(puissance); //Ecrire la valeur obtenue en faisant le calcul de la puissance fait précedement
lcd.print("W"); //Ecrire W a la suite de la valeur pour donner une une unité a la valeur transmise
lcd.setCursor(0, 0); //Dire a l'arduino sur qu'elle ligne il doit écrire
if (courant <= 0.05) //Condition pour définir l'intensité d'allumage du circuit
{
lcd.print("ETEINT");
}
else if ( (courant > 0.05) && (courant < 9.8))
{
lcd.print("FAIBLE");
}
else if ( (courant > 9.8) && (courant < 14.8))
{
lcd.print("MOYEN");
}
else if (courant > 14.8)
{
lcd.print("FORT");
}
//is switch closed? <---------<<<<<
if (digitalRead(switchPin) == LOW)
{
lcd.print("Cons="); //Ecrire Cons=
lcd.print(puissance); //Ecrire la valeur obtenue en faisant le calcul de la puissance fait précedement
}
lcd.print(" "); //Effacement de la première ligne pour éviter toutes erreurs d'affichage
delay(500);
lcd.setCursor(0, 1); //Dire a l'arduino d'ecrire a la deuxième ligne de l'afficheur
lcd.print(" "); //Effacement de la deuxième ligne pour éviter toutes erreurs d'affichage après le delais pour ne pas avoir de blanc a la ligne dans le programme
}
Yes, but I think that I have not expressed the problem correctly and that I wish I could continuously add the value in W / h over a period of one day but as the value in W / h varies I can not use a constant value and therefore give a fixed consumption every day
Okay I got you right so what I did was that I created the function but now I think I'm doing badly but I can not do it with my interrupt display instead of what is already showing I do not know if it's clear enough but basically my interrupt does not work I put you my program
// inclure les librairie utile au code:
#include <LiquidCrystal.h>
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2; //Donnez un nom aux pin de l'arduino
const byte BoutonCons = 6;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7); //Dire a l'arduino quelle pin il doit utiliser
double AcsOffset = 2.5; //Définir un offset de 2.5 a la sortie du capteur de courant
double Sensibl = 0.066; //Définir la valeur de la sensibilité du capteur de courant
double courant = 0; //Définir la variable
double tension = 0; //Définir la variable
double puissance = 0; //Définir la variable
double ConsIncrement = 0;
double PuissanceTotal = 0;
void setup() {
lcd.begin(16, 2); //Dire a l'arduino combien de ligne et colonne contient l'afficheur utilisé
pinMode(BoutonCons, INPUT_PULLUP);
}
void loop() {
double ValeurLue = analogRead(A0); //Définir la variable ValeurLue sur la valeur obtenue en entré de A0
tension = (ValeurLue * 5.0 / 1023); //Calcule qui convertie la ValeurLue obtenue a l'entrer de A0 a une tension entre 0V et 5V
courant = (tension - AcsOffset) / Sensibl; //Calcule du courant
puissance = (tension * courant); //Calcule de la puissance en W en utilisant P=U*I
lcd.setCursor(0, 1); //Dire a l'arduino sur qu'elle ligne il doit écrire
lcd.print("Cons="); //Ecrire Cons=
lcd.print(puissance); //Ecrire la valeur obtenue en faisant le calcul de la puissance fait précedement
lcd.print("W"); //Ecrire W a la suite de la valeur pour donner une une unité a la valeur transmise
lcd.setCursor(0, 0); //Dire a l'arduino sur qu'elle ligne il doit écrire
PuissanceTotal += (puissance / 7200);
attachInterrupt(digitalPinToInterrupt(BoutonCons), LireCons, LOW);
if (courant <= 0.05) { //Condition pour définir l'intensité d'allumage du circuit
lcd.print("ETEINT");
}
else if ( (courant > 0.05) && (courant < 9.8)) {
lcd.print("FAIBLE");
}
else if ( (courant > 9.8) && (courant < 14.8)) {
lcd.print("MOYEN");
}
else if (courant > 14.8) {
lcd.print("FORT");
}
lcd.print(" "); //Effacement de la première ligne pour éviter toutes erreurs d'affichage
delay(500);
lcd.setCursor(0, 1); //Dire a l'arduino d'ecrire a la deuxième ligne de l'afficheur
lcd.print(" "); //Effacement de la deuxième ligne pour éviter toutes erreurs d'affichage après le delais pour ne pas avoir de blanc a la ligne dans le programme
}
void LireCons() {
if (digitalRead(BoutonCons) == LOW)
{
lcd.print(" "); //Effacement de la première ligne pour éviter toutes erreurs d'affichage
lcd.print(PuissanceTotal);
delay(3000);
}
}
I don’t understand what you are saying but there are many things with your code.
so what I did was that I created the function
That is not causing any trouble.
Listen very carefully do the attach interrupts only only once *
So that means put it in the setup function.
You can not have a delay in an interrupt routine, it will hang up. You can not do a serial print in an interrupt routine so I don’t think you can do an LCD.print.
Double and float variable types are exactly the same in an Arduino.
sorry a parody from Hello Hello, British comedy about the French resistance.
During WW2
I have work in my programm and i have find other solution i have don't use button but i have create a cycle for 2 second i let you see but now i need to reset value when she come 24 hours
// inclure les librairie utile au code:
#include <LiquidCrystal.h>
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2; //Donnez un nom aux pin de l'arduino
LiquidCrystal lcd(rs, en, d4, d5, d6, d7); //Dire a l'arduino quelle pin il doit utiliser
double AcsOffset = 2.5; //Définir un offset de 2.5 a la sortie du capteur de courant
double Sensibl = 0.066; //Définir la valeur de la sensibilité du capteur de courant
double courant = 0; //Définir la variable
double tension = 0; //Définir la variable
double puissance = 0; //Définir la variable
double ConsIncrement = 0;
double PuissanceTotal = 0;
void setup() {
lcd.begin(16, 2); //Dire a l'arduino combien de ligne et colonne contient l'afficheur utilisé
}
void loop() {
double ValeurLue = analogRead(A0); //Définir la variable ValeurLue sur la valeur obtenue en entré de A0
tension = (ValeurLue * 5.0 / 1023); //Calcule qui convertie la ValeurLue obtenue a l'entrer de A0 a une tension entre 0V et 5V
courant = (tension - AcsOffset) / Sensibl; //Calcule du courant
puissance = (tension * courant); //Calcule de la puissance en W en utilisant P=U*I
lcd.setCursor(0, 1); //Dire a l'arduino sur qu'elle ligne il doit écrire
lcd.print("Cons="); //Ecrire Cons=
lcd.print(puissance); //Ecrire la valeur obtenue en faisant le calcul de la puissance fait précedement
lcd.print("W"); //Ecrire W a la suite de la valeur pour donner une une unité a la valeur transmise
lcd.setCursor(0, 0); //Dire a l'arduino sur qu'elle ligne il doit écrire
PuissanceTotal += (puissance / 7200) * 8;
if (courant <= 0.05) { //Condition pour définir l'intensité d'allumage du circuit
lcd.print("ETEINT");
}
else if ( (courant > 0.05) && (courant < 9.8)) {
lcd.print("FAIBLE");
}
else if ( (courant > 9.8) && (courant < 14.8)) {
lcd.print("MOYEN");
}
else if (courant > 14.8) {
lcd.print("FORT");
}
delay(2000);
lcd.clear();
lcd.print ("Cons sur 24h :");
lcd.setCursor(0, 1); //Dire a l'arduino sur qu'elle ligne il doit écrire
lcd.print (PuissanceTotal);
lcd.print (" W/h");
delay(2000);
lcd.clear();
}