Go Down

Topic: dubbio su else if (Read 1 time) previous topic - next topic

docdoc

Scusa ... potersti descrivere IN ITALIANO (quindi NON in codice 'C') esattamente le condizioni che vuoi verificare e cosa significano?
Uff, ma non vale, solo perché tu sei il moderatore ed io no, a me non mi si cagano di striscio, nonostante avessi scritto nel post #19:

Quote
Ma, a parte il discorso giusto delle graffe, quando ci sono pezzi di codice con una logica non proprio semplice, consiglio sempre di iniziare scrivendo in linguaggio naturale dei commenti, che poi si traducono man mano nelle istruzioni.

Quindi per il tuo caso direi che se mettessi prima di ogni "if" un commento per spiegare cosa stai verificando (ossia qual è la condizione ricercata) già sarebbe un aiuto per tutti.
Bah, mi perplimo, e sono triste....
Alex "docdoc" - ** se ti sono stato d'aiuto, un punto karma sarà gradito, clicca su "add" qui a sinistra, vicino al mio nome ;) **

Standardoil

puntuale come una cambiale in scadenza eccomi con uno scheletro di programma, basato sulla descrizione in "italiano lineare"
ad un certo punto la desrizione si è persa e quindi lo scheletro non è coleto, ma potrebbe valere come buona base di partenza

Code: [Select]


float h;    // umidità
float p_slm;//  pressione
float p_rif;// riferimento pressione

unsigned long tempo_prev;

void setup()
{
    ......
    // niente primo ciclo, faccio qui la prima lettura della p_rif
    p_rif = bmp.GetPressure() / 100.0;
}

void loop()
{
    // qui attenderò il tempo necessario
    delay.... o millis  quello che voglio
    //lettura sensori e calcolo parametri
    p_slm = bmp.GetPressure() / 100.0;
    h = sht31.getHumidity();
    previsioni(p_slm - p_rif, h); //passo alla previsioni() direttamente i valori che elaborare, così viene una cosa  + pulita
    p_rif = p_slm; // e qui, qualunque cosa succeda aggiorno la p_rif
}


void previsioni(float delta, float h)
{
    // riceve in igresso direttamente la differenza di pressione e l'umidità
    // per debug stampo delta e umidità, così so di cosa stiamo parlando
    Serial.print("delta: ");
    Serial.print(delta);
    Serial.print(" Umidita': ");
    Serial.println(h);

    // cmincio ad esaminare i casi, copiando dalla descrizione in italiano

    //  un calo superiore a  5 - 6 hPa in 3 ore sta a indicare un peggioramento già in atto o imminente e per di più vi è da ritenere che il vento e i fenomeni del tempo potranno essere alquanto violenti.

    if (delta < -5)
    {
        Serial.println("Peggioramento in atto, allarme per vento forte");
        return;
        // basta, non serve proseguire, previsione emessa
    }

    //Una diminuzione di pressione superiore a 2 - 3 hPa in 3 ore è in genere sintomo inequivocabile che le condizioni del tempo tendono a peggiorare entro le prossime 12 - 24 ore.
    if (delta < -2)
    {
        Serial.println("Peggioramento entro 12-24 ore");
        return;
        // basta, non serve proseguire, previsione emessa
    }

    //Un calo di 1-2 hPa in 3 ore di solito precorre un peggioramento che si manifesta  grosso modo entro le prossime 24-48 ore.
    if (delta < -1)
    {
        Serial.println("Peggioramento entro 24-48 ore");
        return;
        // basta, non serve proseguire, previsione emessa
    }

    // OK a questo punto i peggioramenti li abbiamo esaminati tutti
    // tempo stabile
    if (delta < -1)
    {
        Serial.println("tempo stabile");
        return;
        // basta, non serve proseguire, previsione emessa
    }

    // e qui mi sono perso, per i tempi cattivi usi la differenza, per i tempi buoni il valore assoluto,
    //mi sa che devi continuare con la descrizione in italiano, come all'inizio
    // caso imprevisto
    // nessuno dei casi precedenti si è verificato
    Serial.println("Previsione impossibile, caso non previsto");
}



trucch usati:
a partire dalla previsione peggiore, eseguo il test, emetto la previsione e (sottolineo E) esco dalla funzione
in questa maniera non ho bisogno di scrivere test complessi (se maggiore di... and  minore di ...)
previsione emessa gioco finito, i casi esclusi si escludono per caso da soli, scusate il gioco di parole
passo alla funzione direttamente il delta di pressione, così non ho bisogno di consumarmi i ditini delicati a scrivere sempre la stessa sottrazione in una caterva di test complessi
all'inizio della previsione ho messo per debug la stampa del delta di pressione, così so di cosa stiamo parlando
e alla fine ho aggiunto un caso senza test, se nessuno dei test precedenti ha detto "SI' lo voglio" arrivo all'ultima riga che mi dce preticamnete: "Ti sei dimenticato di questo caso qui, la legge di Murphy me lo ha fatto trovare, come ti regoli adesso?"

meglio suggerirti non saprei
Prima legge di Nelson (che sono io): fai le stesse cose sempre alla stessa maniera, quegli errori li hai già corretti

Non bado a studenti, che vadano a copiare da un'altra parte

Se io ti domando e tu non mi rispondi vuol dire che non ti serve più

Standardoil

Bah, mi perplimo, e sono triste....

vieni qua che ti faccio una carezza e ti regalo un cioccolatino...
scherzo naturalmente, comunque ti comprendo alla perfezione
Prima legge di Nelson (che sono io): fai le stesse cose sempre alla stessa maniera, quegli errori li hai già corretti

Non bado a studenti, che vadano a copiare da un'altra parte

Se io ti domando e tu non mi rispondi vuol dire che non ti serve più

gpb01

#48
Apr 20, 2018, 07:40 pm Last Edit: Apr 20, 2018, 07:40 pm by gpb01
Uff, ma non vale, solo perché tu sei il moderatore ed io no, a me non mi si cagano di striscio, nonostante avessi scritto nel post #19:


... ma non è vero, dai ;)

Guglielmo
Search is Your friend ... or I am Your enemy !

droidprova

X standardoil: wow è poesia

Comunque le previsioni meteo per il tempo bello funzionano come quelle per il brutto tempo ma al contrario. Se il valore della pressione letta dallo strumento è maggiore di quella di riferimento, e lo scarto nelle tre ore è pari ad un certo valore, allora il tempo volgerà al bello in un certo lasso di tempo....

Mentre il terzo macro blocco verifica, trascorse le tre ore se la pressione strumentale e quella di riferimento sono uguali. A questo punto per confermare le precedenti previsioni si utilizzano altre macro regole Cioè se la pressione atmosferica è maggiore di 1000 ettopascal generalmente si va verso il bel tempo Se invece è maggiore di 1015 allora si va verso il bellissimo tempo Specie con valori di umidità inferiore al 60%.

In effetti la terza macro categoria si potrebbe anche omettere. Ma il fatto è che se la centrale meteo non va in funzione per un lasso di tempo ragionevolmente lungo e non si raccolgono tanti dati non è possibile stabilire se  con i due precedenti macroblocchi si raccolgono tutte quelle situazioni che possono determinare delle previsioni con un senso.

Go Up