Go Down

Topic: Sensore di pressione analogico (Read 1 time) previous topic - next topic

Claudio_FF

#15
Nov 27, 2018, 06:05 pm Last Edit: Nov 27, 2018, 06:10 pm by Claudio_FF
Quote from: Ziostep
E' vero che la logica di programmazione è la stessa per tutti i linguaggi ma rispetto a python la sintassi è completamente differente.
Quindi in Python lo sapresti scrivere?
Perché la sintassi non mi sembra poi così diversa.
Se sai scrivere e usare una funzione con sintassi Python:
Code: [Select]
def avvia_gonfiaggio():
    digitalWrite(INTELVALVEPIN, HIGH)
    digitalWrite(PUMPPIN, HIGH)
    digitalWrite(EXHAUSTVALVEPIN, LOW)
    digitalWrite(LED, HIGH)

allora non dovrebbe essere così impossibile scrivere la versione C:
Code: [Select]
void avvia_gonfiaggio(){
    digitalWrite(INTELVALVEPIN, HIGH);
    digitalWrite(PUMPPIN, HIGH);
    digitalWrite(EXHAUSTVALVEPIN, LOW);
    digitalWrite(LED, HIGH);
}


O ancora:
Code: [Select]
def comando_attivo():  return digitalRead(SWITCHPIN) == HIGH
che diventa:
Code: [Select]
bool comando_attivo(){ return digitalRead(SWITCHPIN) == HIGH; }
* * * * Una domanda ben posta è già mezza risposta * * * *

Ziostep

#16
Nov 27, 2018, 06:28 pm Last Edit: Nov 27, 2018, 07:12 pm by Ziostep
Non ho mai usato Arduino, sensori di tipo analogico o altri componenti elettronici.
Ecco perché trovo alcune difficoltà nel progetto.

Ho fatto un paio di progetti con Raspberry pi 3, utilizzando Python, ma sempre di bassa difficoltà.
La mia conoscenza è ristretta, in quanto non studio informatica, quindi ho conoscenze scolastiche del linguaggio Python.

Non voglio cambiare il codice scritto perché fa esattamente quello che a me serve.
Non voglio cambiare gli stati perchè avvengono nella successione corretta.

La mia unica problematica resta l'inserimento del sensore negli stati già creati.

Detto questo, non capisco come posso eliminare le ripetizioni e come posso rendere più efficiente l'algoritmo.



Claudio_FF

#17
Nov 27, 2018, 07:28 pm Last Edit: Nov 28, 2018, 07:31 pm by Claudio_FF
La lettura del sensore analogico l'ha scritta torn24 (anche se senza calibrazione con uno strumento campione e senza un riferimento preciso e stabile credo che l'errore supererà il 5%).

La sequenza degli stati l'ho scritta io.

Il controllo del tempo suggerito in questo post alla fine l'ha scritto torn24.

Un esempio di funzione contenente alcune istruzioni ripetute in più punti l'ho scritto proprio nel post precedente a questo.

Si è detto più volte che la pressione potrebbe essere vantaggiosamente letta una sola volta prima dello switch/case, così da averla disponibile in chiaro in ogni case, ma va bene anche prima di ogni punto in cui serve usare il suo valore... e invece posti (di nuovo) una cosa come:
Code: [Select]
case GONFIAGGIO:
           if(analogRead(A0)) {                                         //leggo dal sensore
            lettura = analogRead (A0);
            pressione = map (lettura,0,1023,0,700000);      //ottengo la pressione
            }
            else if(pressione >= 300){                                  //la confronto con il valore di mio interesse
            digitalWrite(INTELVALEPIN, LOW);                       //fermo il gonfiaggio
            digitalWrite(PUMPPIN, LOW);
            digitalWrite(EXHAUSTVALVEPIN, LOW);
            digitalWrite(LED, LOW);
            Serial.print(pressione);                                     //stampo a video il valore di pressione
                                                                                  //devo annotare il tempo a cui avviene la lettura
            stato = PAUSA;                                                                                
            }
            break;

che non ha alcun senso logico neppure se scritta con sintassi Python (anche i commenti non sono del tutto coerenti):
Code: [Select]
elif stato == GONFIAGGIO:
    if analogRead(A0):                               ##leggo dal sensore
        lettura = analogRead(A0)
        pressione = map(lettura, 0, 1023, 0, 700000) ##ottengo la pressione

    elif pressione >= 300:                           ##la confronto con il valore di mio interesse
        digitalWrite(INTELVALEPIN, LOW)              ##fermo il gonfiaggio
        digitalWrite(PUMPPIN, LOW)
        digitalWrite(EXHAUSTVALVEPIN, LOW)
        digitalWrite(LED, LOW)
        Serial.print(pressione)                      ##stampo a video il valore di pressione
                                                     ##devo annotare il tempo a cui avviene la lettura
        stato = PAUSA                                                                                

Ora, io ho solo un diploma di maturità, attualmente faccio il magazziniere, ai miei tempi non esisteva proprio che qualcuno pensasse al posto mio risolvendomi magicamente ogni dettaglio. Se qualcosa non era chiaro lo rileggevo una settimana, provavo a metterlo in pratica, lo rileggevo due settimane, provavo a metterlo in pratica, lo rileggevo un mese, due mesi, soppesando ogni parola, cercando di capire cosa poteva voler dire di diverso da quello che credevo inizialmente, e cercando anche di capire se sbagliavo io o se era sbagliata la spiegazione (qualche volta capitava, oggi in rete capita molto di più). Quindi mi domando, manca qualcosa nelle nostre spiegazioni (che non sia lo scrivere tutto il codice già bello e pronto)?

DISCLAIMER: questa naturalmente vuole essere una critica costruttiva espressamente rivolta a un laureando in ingegneria informatica/biomedica. Se stessi parlando al ragazzino di terza media che fa qualche esperimento, o all'hobbysta della domenica privo di qualsiasi background tecnico, le cose potrebbero essere un pochino diverse, ma non troppo, perché lo scopo di questo forum non è quello di fare agratis i lavori agli altri ;)
* * * * Una domanda ben posta è già mezza risposta * * * *

Ziostep

Non era il mio scopo avere cose finite ma ti ringrazio ugualmente per la critica formativa.

Vi ringrazio tutti per la pazienza e per i consigli dispensati fin ora.



Go Up