riconoscere un pulsante nel monitor seriale

Ciao a tutti, un aiuto, magari con un esempio su come far riconoscere ad arduino quale pulsante ho premuto.
Esempio:
Ho 4 pulsanti con un nome diverso ( pippo, rossi, alfa, tango) ora vorrei che sul monito seriale mi compaiono queste condizioni:

1 ) se premo un pulsante mi esce il nome del pulsante.
2 ) se premo due pulsanti mi compare il nome dei due pulsanti.
in più volevo sapere se c'è la possibilità di non far scorrere sempre il nome sul seriale. Cioè una volta visualizzato il nome si ferma li.
Grazie mille.
Ripeto mi va bene anche un esempio sulla rete.

2 ) se premo due pulsanti mi compare il nome dei due pulsanti.

cosa intendi? premere 2 buttons contemporaneamente?

non credo che troverai un esempio per 4 pulsanti con la combinazione di più pulsanti contemporaneamente, ma non è difficile.

prendi un esempio buttons, aggiungi un flag con un controllo stampa, se ho già stampato non stampare nuovamente finchè buttons non ritorna a zero

per 4 pulsanti, devi creare le combinazioni che sono parecchie, se spieghi meglio cosa vuoi fare ...

Ti chiedo molto per un esempio? anche solo 2 pulsanti

Mi scoccia dire che non posso, ma non amo lasciare treadh senza risposta.
Non posso perchè non ho ne hardware ne software installato a causa di un guasto serio agli HDD del server, sto ancora installando i driver e terze parti, mi spiace, ma se aspetti qualcuno un indicazione l'avrai.

ciao

Non hai proprio cercato nulla?... È una delle cose basilari... la trovi nel Tutorial! basta solo che aggiungi gli altri tre pulsanti copiando e incollando...

D.

basta solo che aggiungi gli altri tre pulsanti copiando e incollando...

non è proprio così quello che chiede

Cosa chiede allora che non ho capito?

In due minuti ho modificato l'esempio, non l'ho testato ma credo funzioni

/*
  DigitalReadSerial
 Reads a digital input on pin 2, prints the result to the serial monitor

 This example code is in the public domain.
 */

// digital pin 2 has a pushbutton attached to it. Give it a name:
int pushButtonA = 2;
int pushButtonB = 3;
int pushButtonC = 4;
int pushButtonD = 5;

// the setup routine runs once when you press reset:
void setup() {
  // initialize serial communication at 9600 bits per second:
  Serial.begin(9600);
  // make the pushbutton's pin an input:
  pinMode(pushButtonA, INPUT);
  pinMode(pushButtonB, INPUT);
  pinMode(pushButtonC, INPUT);
  pinMode(pushButtonD, INPUT);
}

// the loop routine runs over and over again forever:
void loop() {
  // read the input pins:
  int buttonStateA = digitalRead(pushButtonA);
  int buttonStateB = digitalRead(pushButtonB);
  int buttonStateC = digitalRead(pushButtonC);
  int buttonStateD = digitalRead(pushButtonD);
  
  // print out the state of the button:
  if(buttonStateA = 1)
    Serial.println("Premuto A");
  if(buttonStateB = 1)
    Serial.println("Premuto B");
  if(buttonStateC = 1)
    Serial.println("Premuto C");
  if(buttonStateD = 1)
    Serial.println("Premuto D");
  delay(1);        // delay in between reads for stability
}

in più volevo sapere se c'è la possibilità di non far scorrere sempre il nome sul seriale. Cioè una volta visualizzato il nome si ferma li.

dallo sketch che hai messo si ferma il serial col tasto premuto? lo scrive una volta solo?
dove sono i flag di stampa?
se premo 2 pulsanti o 3 mi scrive ho premuto 1-2-3 e poi si ferma?
se premo 1-4-3-2 me lo dice nello stesso messaggio una volta sola?

pablos:
dallo sketch che hai messo si ferma il serial col tasto premuto? lo scrive una volta solo?
dove sono i flag di stampa?
se premo 2 pulsanti o 3 mi scrive ho premuto 1-2-3 e poi si ferma?
se premo 1-4-3-2 me lo dice nello stesso messaggio una volta sola?

Cosa significa "e poi si ferma"? non deve più comunicare lo stato dei pulsanti? (questo sarebbe impossibile, alla pressione del primo tasto si verificherebbe la condizione e non leggerebbe mai gli altri pulsanti) o che se tengo premuto il tasto sulla seriale viene inviato una sola volta la stringa? comunque sia bastano tre righe di codice, ma la pappa pronta non la preparo :smiley:

Saluti

Ciao ho immaginato a una possibile soluzione, non so se risolve il problema, non l'ho provata perché non ho voglia di costruire il circuito "sono un po pigro", l'idea proposta di considerare le possibili combinazioni mi risultava fastidiosa "trovare e scrivere le combinazioni tasti", allora ho pensato a una soluzione che non prevedesse di conoscere le combinazioni, ma che semplicemente stampasse i pulsanti premuti.

char Pulsanti[4]={8,9,10,11};//Array dove sono memorizzati i pin dei pulsanti
char NomiPulsanti[4][20]={"uno","due","tre","quattro"};// Nome stringa dei pulsanti
char PulsantiPremuti[4]={0}; // Arrey dove memorizzare i pulsanti che sono stati premuti
char statoStampa=0;
int lettura=0; //tiene conto del numero di volte che vengono letti i pulsanti
int i=0;
  
void setup(){
  int i=0;
  Serial.begin(9600);
  for(i=0;i<4;i++){
    
    pinMode(Pulsanti[i],INPUT_PULLUP); // I pulsanti saranno in pullup percui il vaore LOW premuti
    digitalWrite(Pulsanti[i],HIGH);
  }
  
  
  
}
 
     
  



void loop(){
  
  
  
  
  
  for(i=0;i<4 ;i++){// Leggo quali pulsanti sono stati premuti 
    
    PulsantiPremuti[i]=digitalRead(Pulsanti[i]);
    
    
    
  }
  delay(400);
  lettura++;
  for(i=0;i<4 ;i++){
    
        if(PulsantiPremuti[i]==LOW){// se esiste almeno un pulsante premuto
          
             statoStampa=1; 
             
             break;
        }
        
         // se non trova nessun pulsante premuto vuol dire che i pulsanti
        statoStampa=0;           // sono stati rilasciati e porta a zero le letture.
  }
 
  if(statoStampa==0)lettura=0;
  if( statoStampa  && lettura==1){// Stampo i pulsanti che sono stati premuti
  
       /* Se lettura ha valore 1, allora ha letto una volta i pulsanti 
          se lettura ha un valore superiore allora i pulsanti sono ancora premuti
          e legge gli stessi valori */
    
      for(i=0;i<4;i++){
        
        
            if(PulsantiPremuti[i]==0)
                 Serial.println(NomiPulsanti[i]);
        
        
      }
      statoStampa=0;// Annullo la stampa una volta stampati i pulsanti
  }//end if
  
}// end loop

Ciao ragazzi, scusatemi tantissimo per ieri sera. ma per forza maggiore ho dovuto lasciare il forum.
grazie per gli esempi li provo subito e vi faccio sapere.

Eccomi, ok l'esempio di tron24 funziona benissimo anche con la seriale. Grazie mille cosi posso continuare il progetto.