Arduino Progetto Flussometro e altro [pag. 37]

Sergente
it9ozs
Mi piace
- 361/470
Ciao Marco...un attimo che mi sono perso...
adesso provo ad inserire questa variabile....credo in loop...

Per il resto, lo sketch è identico di quello impiegato su arduino uno...
Può essere che cambi qualcosa fra nano e uno?
Ranieri Stargate Limited Edition, mercruiser 4.3 L 190 cv
Capitano di Fregata
marcop20 (autore)
Mi piace
- 362/470
si, il codice è lo stesso
Sergente
it9ozs
Mi piace
- 363/470
Ok, lo posto nuovamente....
Non riesco neppure a piazzare il codice che hai scritto prima...
Ma sto cercando prima di capire questa cosa della eeprom

//include la libreria per le funzionalità dell'LCD
#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

volatile float time = 0;
volatile float time_last = 0;
volatile float impulsi_array[5] = {0,0,0,0,0};
int pin5V = 3;
int pingnd = 10;
int t_min = 0;
//includo la libreria per le impostazioni dell'eeprom
#include <EEPROM.h>


//All'accensione imposto a 0 le variabili
float impulsi = 0;
float consumo_istantaneo = 0;


void setup()

{
pinMode (3, OUTPUT); //uscita a 5v per sensore
pinMode (10, OUTPUT); //uscita GND per sensore
attachInterrupt(0, interrupt, FALLING); //Pin 2 interrupt 0 impostato come ingrsso digitale interrupt (Arduino UNO/MEGA)
digitalWrite(2, HIGH); // abilito una resistenza di pull up sul pin 2 (Arduino UNO/MEGA)


//Impostazione LCD
lcd.begin(16, 2);

lcd.setCursor(0, 0);
lcd.print("LT");

lcd.setCursor(9, 0);
lcd.print("LP");

lcd.setCursor(0, 1);
lcd.print("LH");
}


void loop()
{

float f = 0; //Variabile dove è memorizzata il dato float nella EEPROM.
int eeAddress = 0; //Indirizzo della EEPROM dove inizia il dato float
EEPROM.get(eeAddress, f); //Leggo dalla EEPROM e assegno il valore ad una variabile

digitalWrite (3, HIGH);
digitalWrite (10, LOW);

while(1){

if (digitalRead(2))
{
time = 0;
}

//Tempo di aggiornamento LCD
delay(200);


//Visualizza litri parziali con due cifre decimali
float litri_parziali = (impulsi/2500);

//Visualizzo su LCD i litri parziali consumati
lcd.setCursor(12, 0);
lcd.print(litri_parziali);

//Visualizzo su LCD i litri totali consumati
lcd.setCursor(3, 0);
lcd.print(f + litri_parziali, 2);

//Visualizzo su LCD il consumo istantaneo
lcd.setCursor(3, 1);
lcd.print(" ");
lcd.setCursor(3, 1);
lcd.print(consumo_istantaneo);


//Aggiorno il consumo_istantaneo
{
//5 array per calcolare la media sulle letture del cosumo istantaneo
impulsi_array[0] = impulsi_array[1];
impulsi_array[1] = impulsi_array[2];
impulsi_array[2] = impulsi_array[3];
impulsi_array[3] = impulsi_array[4];
impulsi_array[4] = 10*(60*(2500/time));

consumo_istantaneo = (impulsi_array[0] + impulsi_array[1] + impulsi_array[2] + impulsi_array[3] + impulsi_array[4]) / 5;
}


//Aggiorno il consumo_istantaneo
if (consumo_istantaneo == 0)
{
delay(500);
if (consumo_istantaneo == 0)
{
float somma = (f + litri_parziali); //max 32767

EEPROM.put(eeAddress, somma); //Scrivo la somma dei litri nella EEPROM

}

}
else
{
lcd.setCursor(8, 1);
lcd.print(" ");
}
} //chiusura while
}

//Lettuara degli interrupt
void interrupt()
{
impulsi = ++ impulsi;
time = (micros() - time_last);
time_last = micros();
}
Ranieri Stargate Limited Edition, mercruiser 4.3 L 190 cv
Capitano di Fregata
marcop20 (autore)
Mi piace
- 364/470
salvo.... ho appena provato il tuo codice e non vedo problemi di lettura dalla eeprom
Capitano di Fregata
marcop20 (autore)
Mi piace
- 365/470
salvo... hai detto che usi arduino nano.... ma quale versione?

l'arduino nano può montare due micro differenti..... AT328P oppure AT168.

Tu quale hai?

io ho provato il tutto su AT328P

In alternativa è probabile che l'eeprom interna al micro ha qualche problema, prova a cambiare l'allocazione della cella di memoria
Sergente
it9ozs
Mi piace
- 366/470
eppure come dato LT mi dice nan...

potresti farmi un favore?

vai https://it9ozs.altervista.org/contatti.html e c'è il mio numero
Ranieri Stargate Limited Edition, mercruiser 4.3 L 190 cv
Sergente
it9ozs
Mi piace
- 367/470
marcop20 ha scritto:
salvo... hai detto che usi arduino nano.... ma quale versione?

l'arduino nano può montare due micro differenti..... AT328P oppure AT168.

Tu quale hai?

io ho provato il tutto su AT328P

In alternativa è probabile che l'eeprom interna al micro ha qualche problema, prova a cambiare l'allocazione della cella di memoria


è AT328P, ma è un clone...non penso sia un problema
Ranieri Stargate Limited Edition, mercruiser 4.3 L 190 cv
Capitano di Fregata
marcop20 (autore)
Mi piace
- 368/470
posso, ma non adesso......

Un consiglio la eeprom interna al micro ha una vita di circa 100.000 cicli di scrittura e per come è scritto il codice ogni volta che il consumo è 0 aggiorna la eeprom. (questo ne riduce drasticamente la vita)

io ho creato delle condizioni in sequenza dove solo quando sono rispettati tutti i casi scrivo la eeprom
Sergente
it9ozs
Mi piace
- 369/470
Questa scheda di arduino nano era nuova...aveva cicli 0

Adesso provo a cambiare l'allocazione della memoria...poi magari mi spieghi come usare meno la eeprom.

Appena puoi fai uno squillo che chiamo...non ci sono problemi...io mi allontano 20 minuti...il tempo della mensa...
Ranieri Stargate Limited Edition, mercruiser 4.3 L 190 cv
Sergente
it9ozs
Mi piace
- 370/470
Rieccomi.....
Ho provato a cambiare indirizzo, ma nulla da fare
Ranieri Stargate Limited Edition, mercruiser 4.3 L 190 cv
Sailornet

Argomenti correlati