Go Down

Topic: Istruzioni combinate tra contatto reed e keypad (Read 1 time) previous topic - next topic

maumari

Buongiorno,

sono fuori casa per lavoro, stasera proverò a combinare qualcosa,
intanto vi ringrazio tutti per l'aiuto.

Grazie ancora a Guglielmo, a cui in particolare chiedo scusa
per le parole di ieri, purtroppo a me capita ogni tanto
di far trasparire in faccende che niente hanno a vedere,
l'irritazione causata da  altre situazioni.

Un saluto a tutti

Victor795

Dare "spunti" diseducativi ed errati NON è lo scopo di questo forum ...  :smiley-evil:

Guglielmo
Mi adeguo al regolamento. Posto rivisto e corretto. ;)

ciao


Maurotec

@gpb01
Quote
Dare "spunti" diseducativi ed errati NON è lo scopo di questo forum ...  :smiley-evil:
Vero, però tutto sto veleno perché? Pensi sia educativo questo atteggiamento?

@Victor795
Quote
Ti consiglio prima di puntare a far funzionare il contagiri con l'interrupt
Introdurre l'uso di interrupt per contare eventi è sicuramente un buon consiglio, tuttavia io ho evitato di introdurre cose complesse perché @maumari ha limitate competenze; potrebbe pensare bene di usare delay(2000) dentro la funzione utente attaccata all'interrupt, senza sapere che come recita @Nick Gammon è una cosa da evitare.

Sicuramente potrebbe creare un altro progetto separato dove impiega gli interrupt per contare eventi; con l'intento di capire come funzionano e come usarli. Poi dopo avere acquisito maggiori competenze può decidere di introdurre il conteggio tramite interrupt nel codice dell'applicazione che sta sviluppando.

Quote
Se ti riferisci alla serial, e solo un debug temporaneo. Non è un codice definitivo  ma uno spunto :)
Il problema è che molto probabilmente lui non lo sa, e pensa si possa fare.

@maumari
Purtroppo come avrai intuito il tuo programma deve essere rivisto pesantemente; il codice non è la risultante di analisi del problema, oppure l'analisi è errata.

Valido invece è il modo di usare la tastiera, il primo byte seleziona l'operazione, il secondo fornisce l'argomento.
Ad esempio a rigor di logica se inserisco 00 equivale a non fare nulla. In seguito quando avrai più esperienza potrai usare
il display e la tastiera in modo più ingegnoso, ad esempio userai la libreria Menu o MENWIZ per rendere l'applicazione interattiva.

L'analisi mi appare errata
Mi pare errata per vari motivi, ma al momento per semplificare mi concentro sul fatto seguente:
Dopo avere acquisito comando e argomento da tastiera, il codice impiegherà un certo tempo per compiere l'azione richiesta, durante questo tempo l'interazione con l'utente tramite tastiera deve essere limitata o completamente disabilitata, in quest'ultimo caso, durante il tempo necessario a compiere l'azione richiesta (azionare il motore fino a raggiungere tot metri) lo stato dell'applicazione dovrebbe essere BUSY (impegnata), per poi passare a IDLE quando tot metri sono stati raggiunti.

Questo meccanismo può essere implementato tramite un flag boolean come da esempio:
Code: [Select]

boolean appState = 0;  // 0 significa IDLE
if ( appState == 0 ) {
   enableUserInteration();  // abilita l'interazione utente al fine di inserire dei dati tramite tastiera
} else {
   // esegue [i]comando[/i] e [i]argomento[/i] inseriti in modo IDLE
   appState = 1;   // 1 significa BUSY, quindi impegnata a compiere un'azione
   // Controlla se l'azione è stata completata, se si cambia stato ad appState
   // if ( actionCompleted() )
   //     appState = 0;
}


Il codice sopra serve solo come supporto all'analisi e quindi non va inserito nell'ide.

Ciao.

[Edit: Cavolo @Victor795 hai postato prima di me, io nel mio post faccio riferimento ai tuoi suggerimenti, che però hai modificato.

gpb01

#18
Sep 15, 2016, 02:10 pm Last Edit: Sep 15, 2016, 02:11 pm by gpb01
@gpb01
Vero, però tutto sto veleno perché? Pensi sia educativo questo atteggiamento?
Veleno ? ? ? ... se non distingui il "sarcasmo" dal "veleno" sei messo male ! :smiley-evil:

E comunque ribadisco (... e non sono il solo qui) che i cosigli si dovrebbero dare quando si conosce esattamente ciò di cui si parla, altrimenti si dovrebbe evitare, dato che informazioni errate sono più dannose che benefiche.

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

Maurotec

#19
Sep 15, 2016, 02:31 pm Last Edit: Sep 15, 2016, 02:42 pm by MauroTec
Quote
E comunque ribadisco (... e non sono il solo qui) che i cosigli si dovrebbero dare quando si conosce esattamente ciò di cui si parla, altrimenti si dovrebbe evitare, dato che informazioni errate sono più dannose che benefiche.
Si ok, ma così finisce che le risposte arrivano solo da pochi eletti e questo non è un problema da sottovalutare; è questo che   che vogliamo ottenere? Non penso.

Siamo entrambi in sintonia piena nella lotta alla informazione distorta, ma non si può arrivare a bacchettare tutti quelli che hanno la volontà di ricambiare l'aiuto ricevuto, ma non hanno una competenza estrema (che solo pochi eletti possiedono).   

Su questo punto forse se lo ritieni opportuno se ne può discutere in altro posto per approfondire senza inquinare il post attuale, ovviamente sempre se altri utenti (da sempre presenti) hanno interesse a discuterne.

Quote
Veleno ? ? ? ... se non distingui il "sarcasmo" dal "veleno" sei messo male !
;D

Ciao.

gpb01

#20
Sep 15, 2016, 02:46 pm Last Edit: Sep 15, 2016, 02:48 pm by gpb01
Si ok, ma così finisce che le risposte arrivano solo da pochi eletti e questo non è un problema da sottovalutare; è questo che   che vogliamo ottenere? Non penso.
Ma dai, non è affatto vero ...
... anzi, oltre l'85% delle risposte e dei suggerimenti sono corrette ... poi c'è un circa 15% che ogni tanto ... le spara grosse senza avere quel minimo di nozioni che servono e, solo quelli ... "vanno riportati sulla giusta strada" ;)

Tutto qui. :)

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

As_Needed

Se il loop è veloce, basta usare una flag dentro l'interrupt e poi metti quello che devi fare nell'interrupt, nel loop con un if :)
Ci devi contare MauroTec, che Guglielmo è Svizzero  :smiley-twist:  :smiley-mr-green:
MY PWS!
http://forum.arduino.cc/index.php?topic=413560.0
http://meteoflaminia.zapto.org:4600

gpb01

#22
Sep 15, 2016, 03:37 pm Last Edit: Sep 15, 2016, 03:37 pm by gpb01
Se il loop è veloce, basta usare una flag dentro l'interrupt e poi metti quello che devi fare nell'interrupt, nel loop con un if :)
E' infatti la forma più semplice ...
... la ISR alza una flag ... che viene controllata ad ogni giro del loop().

Ovvio che il loop() deve essere scritto in modo NON bloccante e deve girare velocemente, altrimenti occorre necessariamente strutturare diversamente il codice.

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

As_Needed

Ovvio che il loop() deve essere scritto in modo NON bloccante e deve girare velocemente, altrimenti occorre necessariamente strutturare diversamente il codice.

Guglielmo
Ovvio, però un loop molto lungo può essere anche lento un paio di secondi.
MY PWS!
http://forum.arduino.cc/index.php?topic=413560.0
http://meteoflaminia.zapto.org:4600

gpb01

#24
Sep 15, 2016, 04:46 pm Last Edit: Sep 15, 2016, 04:46 pm by gpb01
Ovvio, però un loop molto lungo può essere anche lento un paio di secondi.
... mi costringi ad auto-quotarmi ... :D

... deve girare velocemente, altrimenti occorre necessariamente strutturare diversamente il codice.
Guglielmo
Search is Your friend ... or I am Your enemy !

As_Needed

#25
Sep 15, 2016, 04:52 pm Last Edit: Sep 15, 2016, 04:52 pm by As_Needed
... mi costringi ad auto-quotarmi ... :D
Guglielmo
Si lo so :D :D Mi è capitato di ristrutturare il codice all'infinito, però se fai tanta roba in un codice, a volte bisogna ristrutturare qualcosa a livello pure HW, ovvero ad esempio uno standalone che gestisca sensori che magari rallentano troppo e così fai diventare veloce il codice principale.
MY PWS!
http://forum.arduino.cc/index.php?topic=413560.0
http://meteoflaminia.zapto.org:4600

maumari

Ragazzi,

sono felice di vedere che il "problema di facile soluzione" che ingenuamente a me sembrava... in realtà è una cosa da veri esperti.
Devo studiare ancora molto,  ma molto, anche se ho paura che mi manchino le basi, e che quindi sia un impresa ardua.
Non mi scoraggio però, perché se solo penso che fino a un anno fa le mie competenze erano a livello di -filo-interruttore-lampadina accesa-lampadina spenta...e che ora più o meno con Arduino, relè, Rfid, Pir, Ir, Keypad, Rtc e altro, qualche accrocchio ho messo in piedi e per ora sono moolto soddisfatto.
Ho imparato anche che la passione ti porta a fare cose che sembravano essere impossibili.
Sono veramente grato a tutti voi e aldilà di quello che riuscirò a fare con questo progettino, continuerò a leggere, studiare e sopratutto a seguirvi nelle vostre "discussioni".

Maurizio

Victor795

@Victor795
Introdurre l'uso di interrupt per contare eventi è sicuramente un buon consiglio, tuttavia io ho evitato di introdurre cose complesse perché @maumari ha limitate competenze; potrebbe pensare bene di usare delay(2000) dentro la funzione utente attaccata all'interrupt, senza sapere che come recita @Nick Gammon è una cosa da evitare.

Sicuramente potrebbe creare un altro progetto separato dove impiega gli interrupt per contare eventi; con l'intento di capire come funzionano e come usarli. Poi dopo avere acquisito maggiori competenze può decidere di introdurre il conteggio tramite interrupt nel codice dell'applicazione che sta sviluppando.
Il problema è che molto probabilmente lui non lo sa, e pensa si possa fare.
Hai colto nel segno.


Quote
Quote
Se ti riferisci alla serial, e solo un debug temporaneo. Non è un codice definitivo  ma uno spunto :)
Il problema è che molto probabilmente lui non lo sa
Quote
e pensa si possa fare.
Esatto.Questo è stato il mio errore.
Sono a conoscenza che gli isr debbano essere brevi,ma il mio era un tentativo di portare l'utente pian pianino a capire la soluzione proposta, correggendo tutto alla fine.
Un pò come accettare dei compromessi all'inizio e correggere il tiro stradafacendo ,anche perchè attraverso un forum è difficile spiegarsi.

Mi fa comunque piacere che ho rivitilizzato un topic al quale nessuno aveva risposto.

maumari sarebbe interessante vedere una soluzione funzionante dopo i consigli che hai ricevuto.


ciao


Maurotec

#28
Sep 15, 2016, 11:21 pm Last Edit: Sep 15, 2016, 11:27 pm by MauroTec
Quote
Sono a conoscenza che gli isr debbano essere brevi,ma il mio era un tentativo di portare l'utente pian pianino a capire la soluzione proposta, correggendo tutto alla fine.
Un pò come accettare dei compromessi all'inizio e correggere il tiro stradafacendo ,anche perchè attraverso un forum è difficile spiegarsi.
Alcuni utenti (io e molti altri) siamo qui da tanto tempo, ci siamo posti più volte il problema su come sia meglio relazionarsi con l'utente, specie se principiante. Colui che intende rispondere, prima dovrebbe cercare il post di presentazione dell'utente in questione; L'obbiettivo è di ricavare delle informazioni di massima sulle competenze che l'utente ha acquisito.

Ricavata questa informazione gli interventi potranno essere calibrati per lo specifico utente; per esperienza comune, consigliare interrupt, albero binario, buffer circolare ecc, a chi è alle prime armi si è rilevato essere  uno spreco di tempo  oltre che dannoso per l'utente.  

Quote
Mi fa comunque piacere che ho rivitilizzato un topic al quale nessuno aveva risposto.

maumari sarebbe interessante vedere una soluzione funzionante dopo i consigli che hai ricevuto.
Si sarebbe interessante, ma sai ormai io ci ho fatto il callo; la storia del forum è piena di post simili che si concludono in un
nulla di fatto, e non se ne conosce il motivo.

Sono tentato di spingermi oltre le comuni competenze fino a tirare in ballo IEEE 830-1998 che è stato sostituito da una nuova specifica. Questo documenta tutte le fasi da completare prima di iniziare a scrivere una riga di codice. Di questo documento però alcune parti a noi non tornano utili, questo perché noi siamo sia committenti che sviluppatori; inoltre svolgiamo anche l'analisi e ci occupiamo dello sviluppo hardware.

Sarebbe utile avere un documento simile, ma specifico per gli sviluppatore fai da te, che lo guidino lungo tutte le fasi.

@maumari
Vedi di rispondere alle domande dirette e indirette che ti sono state rivolte; ad esempio io ancora non so se tu hai capito cosa si intende per codice bloccante. Mi puoi fare un esempio di codice bloccante?


Ciao.

maumari

Ciao Victor

tu dici
Quote
maumari sarebbe interessante vedere una soluzione funzionante dopo i consigli che hai ricevuto
ok compatibilmente con gli impegni di lavoro e famiglia, sicuramente mi metterò a fare delle prove e speriamo che io me la cavo.

Mauro dice
Quote
la storia del forum è piena di post simili che si concludono in un nulla di fatto, e non se ne conosce il motivo.
Beh caro Mauro, io penso, ma forse mi sbaglio, se tanti post si concludono in un nulla di fatto può essere che nonostante tutti gli sforzi che uno possa fare, le competenze necessarie per risolvere certi problemi non si acquisiscono in due giorni, se no saremmo tutti Professori. Uno magari c prova e ci riprova, ma non ci arriva, ringrazia tutti, e alza le mani, probabilmente come capiterà a me.

A proposito di Professori, ma quando dici
Quote
Vedi di rispondere alle domande dirette e indirette che ti sono state rivolte; ad esempio io ancora non so se tu hai capito cosa si intende per codice bloccante. Mi puoi fare un esempio di codice bloccante?
ma il Prof lo fai di mestiere?

se è così chiedo scusa non sono preparato, negli ultimi tempi ho frequentato poco, anzi è dal giugno del '79 che non vengo a scuola.

ciao buona giornata a tutti



Go Up