[RISOLTO] pulsanti premuti insieme

Ciao a tutti,

a me sembrava semplice.. Ho la necessità di premere 2 pulsanti contemporaneamente per avviare una data azione, ho collegato i pulsanti da breadboard al mio Arduino Uno come sempre con resistenza di pull-down da 10k e ho cercato di farlo con questo sketch:

   digitalWrite (start0, LOW);
   digitalWrite (start1, LOW);
   int buttonState0 = LOW;
   int buttonState1 = LOW;
   buttonState0 = digitalRead (start0);
   buttonState1 = digitalRead (start1);
     if (buttonState0 == LOW && buttonState1 == LOW); 
   else { 
     if (buttonState0 == HIGH && buttonState1 == HIGH); {
   taglio();
   }

Nella prima versione dello sketch controllavo lo stato dei pulsanti con un solo IF se entrambi erano in HIGH, ma in questo modo era come se fossero sempre HIGH (per quello avevo messo in Low i pin), e passavano direttamente alla Void taglio.

In questa versione invece attendono la pressione dei 2 pulsanti , ma anche se ne premo uno solo dei due vanno alla Void taglio e questo è ciò che non voglio, solo quando premuti insieme ci devono andare. Mi ci sono ingrugnito tutto il pomeriggio, poi magari è una cosa semplice che mi è sfuggita dal troppo ingrugnimento.

grazie a tutti.

Ciao, puoi evitare di sfruttare il software per verificare la pressione dei due pulsanti, basta che li metti in serie, tra pin e primo pulsante metti la pull-down e i +5 li metti dopo il secondo pulsante, in questo modo se li premi entrami il pin va a high altrimenti resta low. Se poi vuoi rispariamiare ancora più hardware metto il pin high con la resistenza di pullup interna

pinMode(NumeroPin, INPUT_PULLUP)

e sempre collegando in serie i pulsanti colleghi il secondo a GND e a quel punto testi se il pin è LOW, che viene messo in tale stato solo se li premi entrambi. P.S. = Il fatto che premendoli entrambe vai alla void Taglio mi fa pensare che userai arduino per controllare una macchina potenzialmente pericolosa e è bene ricordare che Arduino non è impiegabile direttamente in ambito civile/industriale ma solo per prototipazione.

Ciao

Ciao Fabpolli,

grazie per la risposta e tranquillo per adesso sto sviluppando solo la parte software se poi ti dico cosa ho in mente di fare ti viene da ridere. Adesso provo come hai detto, ma il fatto del controllo tramite software mi rimane sullo stomaco.

Grazie Fab o risolto non avevo pensato ai pulsanti in serie. Ma se qualcuno sa ,come fare dal lato software lo ringrazio , giusto per conoscere il modo che non ho trovato.

Ciao

P.S: Non mi ricordo come si modifica il titolo in risolto..

A prescindere che usare i pulsanti in serie è un ottimo suggerimento, per quanto riguarda il lato software che chiedi tu, la prima strada che verificava se i buttons sono in high mi sembra sia la migliore

     if (digitalRead(pulsante1) && digitalRead(pulsante2));  taglio();
     else stop();

dove stop() è la funzione che spegne, però non sono chiare alcune cose

  • i 2 button sono mantenuti premuti e al rilascio deve spegnere o sono consensi impulsivi
  • cosa sono start0 e start1? output che metti volontariamente in low e poi li vai a leggere ...
  • perchè azzeri i buttonstate e poi li vai a leggere subito dopo? se sono degli input non puoi forzarli non è proprio chiaro l'hardware che hai
digitalWrite (start0, LOW);
   digitalWrite (start1, LOW);
   int buttonState0 = LOW;
   int buttonState1 = LOW;
   buttonState0 = digitalRead (start0);
   buttonState1 = digitalRead (start1);

Non capisco perché ci metti digitalWrite (start0, LOW); Questi disattivano le risistenze pullup interne e basta. Se non hai resistenze pullup esterne non riesci a leggere i pulsanti in modo affidabile. Ciao Uwe

Ciao ,

Pablos allora i pulsanti devono essere premuti insieme e sono consensi impulsivi.

start0 e start1 sono i pulsanti che devono essere premuti insieme.

E' colpa mia se sono rimasti copiati digitalwrite low, prima i 2 start dovevano fare un altra cosa, e poi li ho assegnati ai pulsanti, ma avevo fatto così tante modifiche al codice che ero al limite dal capirci qualcosa.

     if (digitalRead(pulsante1) && digitalRead(pulsante2));  taglio();
     else stop();

Be effettivamente come hai suggerito te non ho provato, io controllavo in questo modo:

 if (pulsante1 == HIGH && pulsante2 == HIGH);  taglio();
          else mettevo in low i pulsanti

Ma cosi facendo anche senza premere nulla andava a taglio, e forse sbagliavo proprio li il controllo, invece di leggere lo stato dei pulsanti io controllava se la variabile andava in HIGH.

UweFed come ho detto prima è colpa mia su quelle righe copiate.

Comunque come ha suggerito Fabpolli all'inizio , mi sembra meglio ho risparmiato un pin per altre cose.

Ciao

Vespucci: ... Ma se qualcuno sa ,come fare dal lato software ...

Premesso che non sono un programmatore, e che se sono una sicura, meglio in serie fisicamente ... ma giusto nel caso che fosse obbligatorio il controllo su due pulsanti collegati a due ingressi differenti (tipo, se poi da soli devono fare altre cose in altre parti dello sketch), forse potrebbe funzionare un sistema simile (ora non posso provarlo pero', quindi se vuoi devi controllarlo tu)

supponendo di usare le pullup interne e di
chiudere a massa i pulsanti (caso piu comune)
sono da impostare a HIGH in setup le variabili
puls_1, puls_2, stato1
(tutte di tipo bin, per risparmiare memoria)



{
    puls_1 = digitalRead(pin_pulsante_1)   //legge pulsante 1
    puls_2 = digitalRead(pin_pulsante_2)   //legge pulsante 2
    if ((puls_1 == 0) && (puls_2 == 0) && (stato1 == 1)) // entrambi i pulsanti sono appena stati premuti
    {
        ...
        ... //qui ci vanno tutte
        ... //le istruzioni da eseguire quando
        ... //vengono premuti entrambi
        ...
        stato1 = 0; //setta un flag per evitare che le istruzioni vengano ripetute ad ogni ciclo
    }
    if ((puls_1 == 1) && (puls_2 == 1) && (stato1 == 0)) //entrambi i pulsanti sono appena stati rilasciati
    {
        stato1 = 1; //resetta il flag di controllo antiripetizione
    }
}

In teoria, in questo modo, dovrebbe anche evitare di rieseguire le istruzioni nel ciclo di controllo finche' non hai lasciato andare entrambi i pulsanti ... in teoria ;)

Ciao Etemenanki ,

proverò volentieri (per pura pratica), il tuo sketch chissà che non mi torni utile, d'altra parte in questo ambiente i pezzi che si raccolgono, ti torneranno utili in futuro.

Credo di capire (ma potrei sbagliare) che vuoi azionare una macchina che taglia qualcosa, obbigando l'operatore a tenere tutte e due le mani sui pulsanti per impedire che si faccia del male, se questo è il caso, è meglio mettere i due pulsanti in serie e utilizzare un unico ingresso sulla scheda e col software controllare quell'unico ingresso. Ho fatto una macchina che richiedeva la stessa normativa, se ho capito male, allora ignorate questo post.

Potrebbero essere anche 2 microswitch che controllano l'abbassamento dello schermo di protezione più un pulsante start e altre cose, il punto qui è più che altro il controllo software di più ingressi a livello didattico. Se andiamo a vedere non serve nemmeno un micro per fare ciò :)

ma non capisco perchè fare complicanze di programma, se sono protezioni basta una riga sola di codice.

ciao

Ciao,

triac60 e #pablos diciamo che avete tutti e 2 avete indovinato, oltre alle mani impegnate sto già prevedendo microswitch sullo chiusura della schermo di protezione e pulsante emergenza di stop.

L'idea è tutta in fase sperimentale nulla di costruito , sto solo buttando giù codice. Poi mica e detto che lo costruisco anzi.. , è l'idea di progettare cose che mi diverte.

In alcune macchine lo schermo di protezione non serve e non è richiesto dalle normative, inoltre abbassare e sollevare lo schermo comporterebbe una notevole perdita di tempo da parte dell'operatore che deve maneggiare con velocità il pezzo da lavorare e nuoce alla produzione in termini di tempi e costi. Controllare un ingresso sul quale sono collegati due (o anche 10) pulsanti in serie è una cosa così banale che non merita altro tempo secondo me.

Triac60 grazie del consiglio.

Effettivamente per me si può chiudere .

triac60: ... inoltre abbassare e sollevare lo schermo comporterebbe una notevole perdita di tempo da parte dell'operatore che deve maneggiare con velocità il pezzo da lavorare e nuoce alla produzione in termini di tempi e costi...

Ehm ... e quanto nuoce alla produzione, un'operaio che si trancia le dita per non aver rispettato le norme di sicurezza ?

Dove lavoravo prima, per un certo ciclo di lavoro, usavamo frese a disco per gli intagli dei cilindri portaaghi, che per "normativa" non richiedevano schermi ... solo che una volta ad uno degli operai che per fare piu in fretta non spegnevano il disco prima di infilare le braccia nella macchina per fare le misure (perche' l'ufficio tempi e metodi li rimproverava di perdere troppo tempo, se rispettavano tale obbligo come era indicato nelle istruzioni :P), la fresa gli ha agganciato la manica del camice e gli ha tirato il braccio su contro la lama, tranciandogli tutti i tendini superiori dell'avanbraccio (e gli e' andata di lusso che era una lama in widia da 1/4 di mm di spessore e si e' frantumata con l'impatto con l'osso, se fosse stata una di quelle spesse ci rimetteva il braccio :P) ... risultato: un mese e mezzo in ospedale, sei operazioni per ricostruire e riattaccare tutto quanto il possibile, 10 mesi di rieducazione fisica per recuperare quasi il 90% della mobilita' e del funzionamento del braccio, una denuncia da parte dell'ASL alla ditta ed una a lui (perche' comunque non aveva seguito le istruzioni, anche se gli era stato ordinato di non farlo dai superiori), e l'obbligo di installare immediatamente nuovi schermi di protezione anche a tutte le macchine che non lo richiedevano (47 macchine, per le quali e' stato necessario far costruire gli schermi su misura e modificare i quadri per inserirli nei sistemi, dato che non erano previsti di fabbrica) ...

Forse alzare ed abbassare uno schermo in questo caso sarebbe costato molto meno ... :P :D

E comunque, come dissi una volta al mio ex capo li dentro, che si era azzardato a rimproverarmi perche' lavoravo al trapano con i guanti di protezione, e ci mettevo piu tempo di quelli che non li usavano, "le dita sono mie, e quando torno a casa la sera, mi servono tutte e dieci" ...

Non so su quali macchine avete lavorato, ma gli schermi scendono insieme ai dischi o comunque alle parti rotanti pericolose, l'alimentazione è ad autoritenuta (se manca tensione al suo ritorno non si riarmerà), il fungo di emergenza è un NC, qualsiasi danno all'uomo è causato da un cattivo uso, carenza di manutenzione dell'utensile e assenza spesso di DPI (Dispositivi di Protezione Individuale).

Pablos: parliamo di parecchi anni fa, quando le attuali normative non esistevano, le macchine erano costruite "a norme" ma con le norme dell'epoca, e tutti i DPI che riuscivi ad avere erano camice, mascherine di carta e guanti gialli Nitrotough (o quelli in tela e cuoio pesanti, se gli dicevi che dovevi maneggiare lamiere taglienti e se ti andava bene che li avevano e te li davano :P :D)

Fai conto che in quelle macchine non era previsto nessuno schermo (a parte un paraolio di plastica trasparente spesso 2mm, che posizionavi a mano davanti al pezzo per non riempirti di olio e briciole di metallo se schizzavano un po in giro all'inizio del taglio, e che comunque non aveva alcun micro di sicurezza, solo due gancetti a cui appenderlo :P :D) e nessun fungo di sicurezza, "perche' sulle istruzioni era chiaramente riportato che l'operatore doveva spegnere la fresa prima di rimuovere il pezzo o eseguire misurazioni", e ti rendi conto di come si lavorava ... :P

Etemenanki: Ehm ... e quanto nuoce alla produzione, un'operaio che si trancia le dita per non aver rispettato le norme di sicurezza ?

Non sei stupido e sai leggere benissimo, allora perchè hai tagliato il pezzo più importante distorcendo tutto il significato della frase?

la frase corretta era questa:

"In alcune macchine lo schermo di protezione non serve e non è richiesto dalle normative, inoltre abbassare e sollevare lo schermo comporterebbe una notevole perdita di tempo da parte dell'operatore che deve maneggiare con velocità il pezzo da lavorare e nuoce alla produzione in termini di tempi e costi."

Non sto parlando di 20 o 30 anni fa, la macchina di cui parlavo l'ho fatta un anno fa, e le normative le conosco benissimo, non ci sono solo macchine che hanno parti rotanti e taglienti, ce ne sono di più semplici dove il solo pericolo è quello di pestarsi un dito.