Go Down

Topic: AIUTO CON UN PROGRAMMA (Read 1 time) previous topic - next topic

Claudio_FF

#15
May 21, 2019, 09:51 pm Last Edit: May 21, 2019, 09:52 pm by Claudio_FF
Per me per rilevare il primo pulsante che preme *dopo* l'accensione del led, bisogna controllare solo il primo fronte una sola volta... se uno ha premuto prima o continua a pigiare a raffica non va considerato. Una volta letto il risultato si riabilitano i pulsanti.
********* IF e SWITCH non sono cicli ! *********
**** Una domanda ben posta è già mezza risposta ****
*** La corrente si misura in mA, la quantità di carica in mAh ***

AmericanDreamer

Buona l'obiezione della raffica
Ai miei tempi, coi relè, non ero riuscito a escluderla, ma solo per mancanza di voglia

Standardoil

Banale, basta squalificare i pulsanti trovati alti 'prima' della luce verde...
Prima legge di Nelson (che sono io): Se vuoi il mio aiuto dimostrami almeno che hai letto il nostro "aiutateCi ad aiutarVi"

Non bado a studenti, che copino altrove

Tu hai problema-Io ti domando-Tu non mi rispondi: vuol dire che non ti serve più

docdoc

...e pensare che io a 12 anni feci una pulsantiera per quiz usando solo 2 pulsanti, 2 lampadine, un paio di relé (doppio deviatore, configurati per disattivarsi a vicenda al primo che si attiva)... ;)
Alex "docdoc" - ** se ti sono stato d'aiuto, un punto karma sarà gradito, clicca su "add" qui a sinistra, vicino al mio nome ;) **

AmericanDreamer

Io mi riferivo a quello, prima
Mi ricordo che ho usato gli interruttori del cruscotto di una 600 rottamata.
E le lampadine degli stop, avevo messo la lampada di un giocatore davanti all'altro. Così la lampada rossa indicava il perdente

Claudio_FF

#20
May 22, 2019, 06:22 pm Last Edit: May 22, 2019, 06:51 pm by Claudio_FF
Banale, basta squalificare i pulsanti trovati alti 'prima' della luce verde...
Se si controlla solo la prima pressione, la squalifica avviene automaticamente.

Code: [Select]
p1dn = 0;  // segnali impulsivi alla prima pressione
p2dn = 0;

if      (mr)               {            p1ena = 1; }
else if (p1 & p1ena)       { p1dn = 1;  p1ena = 0; }
else                       {                       }

if      (mr)               {            p2ena = 1; }
else if (p2 & p2ena)       { p2dn = 1;  p2ena = 0; }
else                       {                       }

if      (mr)               { q1 = 0; }
else if (p1dn & led & !q2) { q1 = 1; }
else                       {         }

if      (mr)               { q2 = 0; }
else if (p2dn & led & !q1) { q2 = 1; }
else                       {         }

if (p1dn & p2dn & led)     { q1 = 1;  q2 = 1; }

'mr' è il master reset che abilita i pulsanti e azzera le uscite
'led' è il segnale di "via"
'p1' e 'p2' sono i pulsanti, 1=premuto
'q1' e 'q2' le uscite
...e permettiamo anche la parità  :)

********* IF e SWITCH non sono cicli ! *********
**** Una domanda ben posta è già mezza risposta ****
*** La corrente si misura in mA, la quantità di carica in mAh ***

gpb01

...
'mr' è il master reset che abilita i pulsanti e azzera le uscite
'led' è il segnale di "via"
'p1' e 'p2' sono i pulsanti, 1=premuto
'q1' e 'q2' le uscite
...
... a voi v'hanno rovinato i PLC   :smiley-yell:  :smiley-yell:  :smiley-yell:

Ma ti paiono nomi di variabili da usare?  Quelli sono i nomi dei morsetti a vite ...  :smiley-mr-green:  :smiley-mr-green:  :smiley-mr-green:

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

Claudio_FF

#22
May 22, 2019, 06:53 pm Last Edit: May 22, 2019, 07:01 pm by Claudio_FF
... a voi v'hanno rovinato i PLC   :smiley-yell:  :smiley-yell:  :smiley-yell:
Che poi... secondo me se si iniziasse da subito a pensare un programma come per un PLC (logica a ciclo di scansione), non ci si troverebbe sempre inevitabilmente nelle peste con le operazioni bloccanti, delay ecc ;D
********* IF e SWITCH non sono cicli ! *********
**** Una domanda ben posta è già mezza risposta ****
*** La corrente si misura in mA, la quantità di carica in mAh ***

maubarzi

... a voi v'hanno rovinato i PLC   :smiley-yell:  :smiley-yell:  :smiley-yell:
e mi sa pure le schede perforate ;)
noto poi anche un tocco di design misto a feng shui nelle cose tipo:
Code: [Select]
else                       {         }

per avere tutti gruppi da 3 righe allineati e coperti per tenere ben aperti i chakra :P

Per lo OP una domandina ina ina:
prevedi solo due concorrenti? oppure anche di più?
Nessuna buona azione resterà impunita!

Preistoria -> medioevo -> rinascimento -> risorgimento -> rincoglionimento!

Claudio_FF

#24
May 22, 2019, 07:17 pm Last Edit: May 22, 2019, 07:23 pm by Claudio_FF
per avere tutti gruppi da 3 righe allineati e coperti per tenere ben aperti i chakra :P
In realtà quell'else vuoto è esplicitamente previsto nelle regole del barr-group... dopo un po' è come avere il berrettino in inverno :)
********* IF e SWITCH non sono cicli ! *********
**** Una domanda ben posta è già mezza risposta ****
*** La corrente si misura in mA, la quantità di carica in mAh ***

maubarzi

Io purtroppo faccio molta ma molta fatica ad adeguarmi a certe pratiche.
Per me è innaturale spezzare in questo modo i vari test.
Però è una mia personale deformazione ;)
E poi ci stava la battuta, in attesa che l'OP torni dalla latitanza :P
Nessuna buona azione resterà impunita!

Preistoria -> medioevo -> rinascimento -> risorgimento -> rincoglionimento!

Standardoil

#26
May 22, 2019, 08:21 pm Last Edit: May 22, 2019, 08:24 pm by Standardoil
In realtà quell'else vuoto è esplicitamente previsto nelle regole del barr-group... dopo un po' è come avere il berrettino in inverno :)
per la verità li specificano solo che l'else finale è obbligatorio dopo un else...if, non dopo un if semplice,
Prima legge di Nelson (che sono io): Se vuoi il mio aiuto dimostrami almeno che hai letto il nostro "aiutateCi ad aiutarVi"

Non bado a studenti, che copino altrove

Tu hai problema-Io ti domando-Tu non mi rispondi: vuol dire che non ti serve più

maubarzi

l'else vuoto lo capisco, fa intendere che non ci si è dimenticati un pezzo...
E' l'allineamento che in realtà aveva scatenato la mia curiosità e mi aveva fatto pensare al feng shui ;)
Sinceramente, con quel tipo di formattazione, io faccio un po' di fatica a leggere il codice, non ci sono proprio abituato.
E anche il fatto di resettare a rate le varie variabili cozza con il mio modo di fare.
Io preferisco avere tutto assieme in una unica
Code: [Select]
if (mr)

e dentro nidificare il resto invece di spezzettarlo per funzionalità.
E' sicuramente più modulare come ha fatto @Claudio_FF ma io non mi ci trovo tanto.
Nessuna buona azione resterà impunita!

Preistoria -> medioevo -> rinascimento -> risorgimento -> rincoglionimento!

Standardoil

#28
May 23, 2019, 07:00 am Last Edit: May 23, 2019, 07:05 am by Standardoil
Secondo il mio socio, secondo me, e anche secondo il barr_group citato da claudio, indentare in quella maniera è emendabile "proprio" perchè rende illeggibile il programma
citare per citare sono capace anch'io:
regola 3.3a Un solo statement per riga
regola 7.1e le variabili devono avere nome lunghi almeno 3 caratteri, anche i contatori dei cicli
e , rullo di tamburi, la regola più violata di tutte:
regola 1.3b le parentesi graffe aperte devono essere da sole su una riga all'inizio del blocco che aprono, le corrispondenti parentesi graffe chiuse devono essere da sole su una riga alla fine del blocco
Ora, io sono d'accordo che queste regole sono solo consigliate, ma citarne una, la più "nascosta", oltretutto citarla male, dopo aver disatteso tutte le altre non mi è sembrato bello, per nulla
Comunque, alla fine di tutto il pistolotto:
quel frammento di programma è "mal scritto", NON è un esempio di programmazione 'C'
Prima legge di Nelson (che sono io): Se vuoi il mio aiuto dimostrami almeno che hai letto il nostro "aiutateCi ad aiutarVi"

Non bado a studenti, che copino altrove

Tu hai problema-Io ti domando-Tu non mi rispondi: vuol dire che non ti serve più

gpb01

#29
May 23, 2019, 07:06 am Last Edit: May 23, 2019, 07:07 am by gpb01
Secondo il mio socio, secondo me, e anche secondo il barr_group ....
Concordo al 100% su tutto quanto scritto d Standaroil;  quel pezzo di codice è ... un ottimo esempio di come NON si devono scrivere i programmi.  :smiley-mr-green:

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

Go Up