pure a me
....okkio...potresti pentirti😁
lo so Guglielmo , ci ho provato e riprovato.
Allego il codice che uso come "muletto" . Così magari verificate cosa sto pasticciando
int valori[480]; //definisco un array da 480
int somma = 0; //variabile per somma vaori
float media = 0; //variabile per media
void setup() {
Serial.begin(9600);
}
void loop() {
for (int i = 0; i < 480; i++) { //avevo inserito qui if tempo // ma sballa tutto.
valori[i] = 1 ; //al momento assegno a i il valore uno , poi lo sostituirò con la variabile ricavata in altra funzione
delay (50);
}
somma = 0;
for (int i = 0; i < 480; i++) {
somma = somma + valori[i]; //ottengo la media
}
Serial.print("somma= ");
Serial.println(somma);
media = somma / 480;
Serial.print("media= ");
Serial.println(media);
}
Se vuoi usare una logica non bloccante il for non lo puoi usare.
Il loop() è già un ciclo che si ripete all'infinito, devi fare tutto col loop().
Una cosa simile, partendo dall'esempio che aveva messo guglielmo qualche post fa:
#define PERIODO_ACQ 180
unsigned long lastMillisAcq = 0;
long valore = 0;
float media = 0.0;
int i = 0;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
}
void loop() {
// put your main code here, to run repeatedly:
if ( millis() - lastMillisAcq > PERIODO_ACQ ) {
lastMillisAcq = millis();
valore += 6; // accumuli le letture dei valori
i++; // incrementi il contatore
Serial.println(i);
}
if (i >= 480) {
media = valore / 480;
Serial.print("media: ");
Serial.println(media);
}
}
E' da sistemare, ma può essere un punto di partenza.
Fantastico punto di partenza! Grazie , ogni volta che sento di voler abbandonare Arduino ,
trovo tra voi un salvagente.
valore=+6; 6 sarebbe ?
il + va prima dell'=... è la forma "abbreviata" di
valore = valore + 6;
ok, ma 6?
Un valore a caso... nel tuo esempio usavi 1, io ho usato 6...
Ovviamente devi leggere il valore del tuo sensore
Ah ok !
Tra oggi e domani (cioè stanotte) ci smanetto sopra.
Grazie e buona serata !
Claudio
FUNZIONA
(si, ho letto il punto del regolamento che dice che scrivere in maiuscolo equivale ad urlare ; ma è quello che sto facendo )
Seriamente , sono gasatissimo. Oramai era diventato un vero e proprio cruccio , per me.
Grazie a tutti , con una menzione particolare a fratt , che mi ha indirizzato come avevo necessità.
Ora come ora l'ho testato al volo sullo sketch muletto (mi sto creando degli esempi che archivio come tali per il futuro e per imparare).
Vi allego il sopracitato con le descrizioni "personali" ; perché? credo sia il minimo , per riconoscenza e per i posteri.
#define PERIODO_ACQ 180
unsigned long lastMillisAcq = 0;
long valore = 0; //variabile contatore
float media = 0.0; //variabile calcolo media contatore
int watt = 1; //adesso è impostato a 1 ma sarà watt nel progetto completo
int i = 0; //variabile di incremento che forse sarà uguale a watt , devo verificare
void setup() {
Serial.begin(9600);
}
void loop() {
if ( millis() - lastMillisAcq > PERIODO_ACQ ) {
lastMillisAcq = millis();
valore += watt; // accumulo le letture
i++; // incremento il contatore , sommo i valori
Serial.println(i); //tengo traccia delle letture in tempo reale
}
if (i >= 480) { //se e soprattutto quando i è uguale e maggiore di 480
media = valore / 480; //posso calcolare il valore medio
Serial.print("media: "); //scrivo
Serial.println(media); //scrivo
delay(1000); //piccola pausa
}
if (i >= 480) { //se e soprattutto quando i è uguale e maggiore di 480
i = 0; //riporto a zero i valori , pronto per un nuovo ciclo
valore = 0; //riporto a zero i valori , pronto per un nuovo ciclo
}
}
Grazie.
Claudio
Perdona eh, ma è dal post #12 che ti ho detto che dovevi usare questa forma (confronta e vedrai) ...
... possibile che ti hanno dovuto imboccare proprio la "pappa fatta" ? ... non era difficile e ti avevo ben detto come dovevi fare ... bastava lavorarci un po' su invece di arrendersi subito ...
Guglielmo
Non posso certamente negare l'evidenza, però io mica lo sapevo che si poteva fare : valore+=watt e soprattutto i++ fuori dalle parentesi del for.
Non puoi immaginare cosa ho provato a mettere in quelle parentesi .
insistevo col ciclo for e tutte le mie ricerche si basavano sugli Array...adesso sono pure capace di leggere l'indice di un vettore . e scriverlo !
... beh, quella è sintassi del 'C' e ... avremo detto migliaia di volte che su Arduino, con i soli copia/incolla NON si va molto avanti e che quindi ... almeno le BASI del 'C' tocca studiarle! Al punto 16.1 del REGOLAMENTO ci sono anche una serie di link ed un ottimo libro ...
Guglielmo
Hai ragione. La tentazione del copia/incolla è molto forte... comprato ora il libro di citato, arriverà domani . Grazie della dritta. Buona domenica.
Claudio
L'ultimo IF lo puoi inglobare nel precedente
#define PERIODO_ACQ 180
unsigned long lastMillisAcq = 0;
long valore = 0; //variabile contatore
float media = 0.0; //variabile calcolo media contatore
int watt = 1; //adesso è impostato a 1 ma sarà watt nel progetto completo
int i = 0; //variabile di incremento che forse sarà uguale a watt , devo verificare
void setup() {
Serial.begin(9600);
}
void loop() {
if ( millis() - lastMillisAcq > PERIODO_ACQ ) {
lastMillisAcq = millis();
valore += watt; // accumulo le letture
i++; // incremento il contatore , sommo i valori
Serial.println(i); //tengo traccia delle letture in tempo reale
}
if (i >= 480) { //se e soprattutto quando i è uguale e maggiore di 480
media = valore / 480; //posso calcolare il valore medio
Serial.print("media: "); //scrivo
Serial.println(media); //scrivo
delay(1000); //piccola pausa
i = 0; //riporto a zero i valori , pronto per un nuovo ciclo
valore = 0; //riporto a zero i valori , pronto per un nuovo ciclo
}
}
This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.