Errore con digitalRead

Salve ragazzi, da un mesetto ho iniziato a "giocare" con arduino e oggi ho voluto fare un programmino che accenda i diodi led in modo diverso, in base al tasto premuto. Nella compilazione del programma è risultato questo errore:too many arguments to function 'int digitalRead(uint8_t)'
Se ci deste un'occhiata mi fareste un grande favore. Ecco la codifica:

int i;

void setup() 
{
 for (i=7;i<=13;i++)
  pinMode(i, OUTPUT);
pinMode(5, INPUT_PULLUP);
pinMode(4, INPUT_PULLUP);  
for (i=7;i<=13;i++)
{
  digitalWrite(i, HIGH);
  delay(300);
  digitalWrite(i, LOW);
}
}


void loop() 
{
if( digitalRead(4) == LOW) //sequenza
  {
    digitalRead(5, HIGH);
     for (i=7;i<=13;i++)
      {  
        digitalWrite(i,HIGH);
        delay(250);
        digitalWrite(i,LOW);
        delay(250);
      }
    digitalRead(4,LOW);  
 }
if( digitalRead(5) == LOW) //ripple 
   { 
    digitalRead(4,HIGH);
    digitalWrite(7,HIGH);
    digitalWrite(13,HIGH);
    delay(300);
    digitalWrite(7,LOW);
    digitalWrite(13,LOW);
    digitalWrite(8,HIGH);
    digitalWrite(12,HIGH);
    delay(300);
    digitalWrite(8,LOW);
    digitalWrite(12,LOW);
    digitalWrite(9,HIGH);
    digitalWrite(11,HIGH);
    delay(300);
    digitalWrite(9,LOW);
    digitalWrite(11,LOW);
    digitalWrite(10,HIGH);
    delay(300);
    digitalWrite(10, LOW);
    delay(300);
    digitalRead(5,LOW);
   } 
}

Prima di tutto, nella sezione in lingua Inglese si può scrivere SOLO in Inglese ... quindi, per favore, la prossima volta presta più attenzione in quale sezione metti i tuoi post ...

... poi, 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 il su citato REGOLAMENTO ... Grazie.

Guglielmo

P.S.: Il tuo post è già stato spostato nell'opportuna sezione del forum "Italiano”dove puoi proseguire la discussione.
P.P.S.: Ti ricordo che, purtroppo, fino a quando non sarà fatta la presentazione, nessuno ti potrà rispondere, quindi ti consiglio di farla al più presto. :wink:

Il tuo è un errore di "distrazione" ... basta che guardi bene cosa hai scritto in un paio di punti e te ne rendi immediatamente conto.

Suggerimento, cerca tutte le digitalRead() che fai nel tuo programma e guarda se sono scritte in modo esatto :wink:

Guglielmo

Credo di non aver capito cosa tu voglia dire. Ho riguardato la codifica un bel po' di volte e non capisco dove sia il problema. Ciò che voglio fare è un programma che faccia accendere dei led in due sequenze diverse e che mantenga quella sequenza fino a quando non premo l'altro tasto.

T'ho detto che l'errore che riscotri è una questione di "distrazione" ...
... ti sembra normale scrivere: digitalRead(5, HIGH); ? ? ? :o :o :o ... e quest'errore lo hai ripetuto un'infinità di volte nel codice.

Se non ti ricordi la sintasi, usa il "reference" ... digitalread()

Guglielmo

Scusa ORSO2001 ... :smiley: :smiley: :smiley:
...ma voglio che ci arrivi da solo e legga il reference se ha dubbi, altrimenti NON impara nulla ! :wink:

Guglielmo

@Guglielmo: no problem... :wink:

gpb01:
T'ho detto che l'errore che riscotri è una questione di "distrazione" ...
... ti sembra normale scrivere: digitalRead(5, HIGH); ? ? ? :o :o :o ... e quest'errore lo hai ripetuto un'infinità di volte nel codice.

Se non ti ricordi la sintasi, usa il "reference" ... digitalread()

Guglielmo

Sinceramente non sapevo che digitalRead() non potesse accettare sia il pin che HIGH o LOW, ecco perchè non capivo dove fosse il problema. Comunque ho corretto il codice e togliendo i digitalRead() errati devo tenere premuto il tasto per far accendere i led; mentre cambiando digitalRead() con digitalWrite() deve passare del tempo affinchè i led continuino ad accendersi. Avete consigli per far si che accada ciò che voglio?

VitoCarbone29:
Sinceramente non sapevo che digitalRead() non potesse accettare sia il pin che HIGH o LOW ...

Perdona ma .. che senso avrebbe ? ? ? :o :o :o

La digitalread() serve a LEGGERE lo stato di un pin, quindi è lei che ti deve dire se il pin è HIGH o LOW, non tu. Al contrario, la digitalWrite(), che DEVE lei SCRIVERE il valore in uscita su un pin ha ovviamente bisogno di entrambe le cose, il numero di pin e lo stato che vuoi questo assuma (HIGH o LOW).

In riferimento al tuo programma ... un consiglio, comincia con un "scheletro" minimo, senza tutte quelle digitalWrite(), imposta bene la struttura del programma che .. ad aggiungere poi al posto giusto ciò che si deve fare, c'è sempre tempo. Altrimenti ... difficilmente ne esci e sprechi un sacco di tempo. ::slight_smile:

Guglielmo

VitoCarbone29:
too many arguments to function 'int digitalRead(uint8_t)'

In genere i messaggi di errore sono sufficientemente chiari.
Sono stati passati troppi parametri "too many arguments..." sulla funzione che invece ne prevede uno solo "...to function 'int digitalRead(uint8_t)"

Eri partito bene:
Se digitalread (4) è LOW fai la sequenza (ma in questo caso il pulsante 4 non deve essere premuto)...
Però dopo vuoi "FORZARE" la lettura del pin 5 HIGH ? Cioè, il pulsante 5 si preme da solo???
Ecco perché non ha senso il tuo uso della digitalRead.

La digitalWrite la setti tu dicendo cosa scrivere (High oppure Low) su un canale, quindi assegni un valore.
La digitalRead invece serve per LEGGERE (ecco perché READ) e se ci fai caso la puoi usare solo con una IF perché devi leggere il valore di quel canale e vedere a cosa assomiglia, se High oppure Low.
Quindi il valore non glielo puoi dare tu e il campo tra parentesi è solo uno e non due come nella digitalWrite.

Ok ragazzi, sono riuscito a risolvere. Grazie a tutti per gli aiuti :smiley:

Comunque, facendo le temporizzazioni con i delay() non potrai mai intervenire con un pulsante durante una sequenza, ma dovrai sempre aspettare che finisca.

Per poter intervenire in qualsiasi momento devi impostare tutto diversamente, facendo un codice non bloccante che giri sempre e legga continuamente il pulsante. Lo ottieni leggendo continuamente il tempo trascorso tramite il valore di millis() e confrontandolo con valori predeterminati.