Go Down

Topic: Cancello automatizzato (Read 113 times) previous topic - next topic

Albettoita

Salve a tutti, sto realizzando un cancello automatico per il modellino di una casa domotica, al momento vorrei che una volta presentatasi le condizioni per l'apertura, arduino non blocchi l'intero programma, cosi da poter eseguire altre operazioni come l'accensione/spegnimento di led o la lettura e trascrizione su monitor di un DHT11.
Brevemente, ho bisogno che il cancello e gli altri comandi siano indipendenti l'uno dagli altri.

Ho provato con l'uso del commando millis, ma cosi facendo il motore si richiude dopo 1 secondo, mentre dovrebbe restare aperto per 10 secondi.

gpb01

Buonasera,
essendo il tuo primo post, nel rispetto del regolamento della sezione Italiana del forum (… punto 13, primo capoverso), ti chiedo cortesemente di presentarti IN QUESTO THREAD (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con molta attenzione tutto il su citato REGOLAMENTO ... Grazie. :)

Guglielmo

P.S.: Ti ricordo che, purtroppo, fino a quando non sarà fatta la presentazione nell'apposito thread, nessuno ti potrà rispondere, quindi ti consiglio di farla al più presto. ;)
Search is Your friend ... or I am Your enemy !

Maurotec

L'unico modo per ottenere ciò che chiedi è di non usare delay all'interno del ciclo di loop, e al posto suo usare millis(). Prova il codice a questo link. Modifica le tempistiche e gli stati come preferisci per prendere confidenza.

La suddivisione in stati potrebbe essere la seguente ma non è detto che siano sufficienti e se ne possono aggiungere altri fino ad un totale di 254 stati. Gli stati sono in maiuscolo (es. CHIUSO), mentre i comandi sono sempre in maiuscolo ma C_ precede il nome del comando.

CHIUSO
    legge e accetta comando C_APRI
IN_APERTURA
    legge e accetta comando C_STOP
STOP
    legge e accetta comando C_APRI o C_CHIUDI
APERTO
    Tutto aperto, legge e accetta comando C_CHIUDI
IN_CHIUSURA
    legge e accetta comando C_STOP

Sempre qui trovi un abbozzo di programma. 

Qualora decidessi di usare il codice suggerito, continua pure qui la discussione.

Ciao. 

Albettoita

Grazie Maurotec, usando il codice del tuo primo link ho risolto il mio problema.
Allego il codice nuovo e descrivo un'altra problematica presentatasi, che ho risolto, ma magari a qualcuno può tornare utile la soluzione.
Quando con il comando IR aprivo il cancello, rimaneva aperto e nella seriale andava il loop il messaggio di apertua ogni 10 secondi. Per risolvere ho aggiunto nella fase di lettura " Comando IR && lettura fotocellula "
Cosi se non li rileva entrambi esce dal loop.

Maurotec

Quote
Quando con il comando IR aprivo il cancello, rimaneva aperto e nella seriale andava il loop il messaggio di apertua ogni 10 secondi. Per risolvere ho aggiunto nella fase di lettura " Comando IR && lettura fotocellula "
Cosi se non li rileva entrambi esce dal loop.
Visto, però è strano perché StatoCancello == true solo dopo il cambio di stato e finché si rimane in questo stato non verrà stampato nulla. Io avevo dato alla variabile il nome oneShotSwitch al posto di  StatoCancello il cui significato è un solo colpo per switch.

Avevo anche improntato una interfaccia comandi proprio perché pensavo che il comando può arrivare sia  dal telecomando che da uno pulsante fisico, vero però che non ho mostrato come implementare la cosa. Sostanzialmente basta modificare la variabile command sia quando si preme il pulsante fisico che quando si preme il pulsante dal telecomando.

Usare più stati mi rendo conto che non è così immediato da comprendere e sfruttare a pieno.
Gli stati IN_CHIUSURA e IN_APERTURA li inseriti proprio per permettere si inserire codice quando si monitorano le fotocellule, perché non ha senso eseguire il test delle fotocellule quando il cancello è fermo.

Comunque il problema al momento non si pone in quanto si tratta di un modello domotico, le cose diventano
molto più serie quando il cancello è reale.

Ciao.

Go Up