domanda sull'istruzione pinMode()

salve a tutti, ho una domanda semplice semplice,ho bisogno che la dichiarazione di un'imput venga fatta dentro alla funzione di loop, e non dentro al setup, ho già provato in questo modo :

  while(filo10==0){
  randomSeed(analogRead(1));
  filo10=random(16,17);
  pinMode(filo10,INPUT);
  digitalWrite(filo10,HIGH);
  }
 if(filo10==1){
    Serial.println("prova :3");
  }

ho abilitato la resistenza di pullup sui pin analogici perchè non ho altri pin disponibili, e ho il filo costantemente a mazza(livello logico0) ma quando tolgo il filo dalla massa, dovrebbe tornare a livello logico 1, e quindi scrivermi "prova:3" sul monitor seriale. ma ciò non avviene. P.S. il codice comprende molti fili random, quindi ho modificato la funzione random in modo che mi dia sempre 16. sbaglio qualcosina?

Premesso che la pinMode, come tutt le istruzioni, può essere messa in qualunque punto dello sketch, non solo nel setup(), l'attivazione della pull-up interna, nelle ultime versioni dell'IDE, puoi farla con una unica istruzione:

pinMode(pin, INPUT_PULLUP);

Detto questo, quanto è lungo il cavetto che hai collegato al pin? Se fosse molto lungo potrebbe darsi che la resistenza interna (che è di 30/50K di valore) non ce la faccia a garantire un livello sufficientemente alto per esssere letto come HIGH.

grazie per la risposta leo, i fili , sono cortissimi, meno di 7-8 cm circa, sto solo prototipando con bread board ecc ecc, comunque ho seguito il tuo consiglio, ma ugualmente non funge. ho scritto in questo modo:

 while(filo10==0){
  randomSeed(analogRead(1));
  filo10=random(16,17);
  pinMode(filo10,INPUT_PULLUP);

  }
if(filo10==1){
    Serial.println("prova :3");
  }

sbagliato ancora qualcosina? uff :blush:

Scusa, ma stai confrontando la variabile che tiene il numero del pin, non il valore letto da quel pin! :stuck_out_tongue_closed_eyes:

if(filo10==1){
    Serial.println("prova :3");
  }

deve diventare

if (digitalRead(filo10) == 1) {
...
}

salvio810: sbagliato ancora qualcosina? uff :blush:

Si, a non postare tutto il codice. Non si vede dove dichiari le variabili ad esempio. Sarebbe stato più chiaro che stai facendo confusione tra variabile che contiene il numero del pin e valore letto.

Di solito hai una costante per definire il numero del pin e una variabile per gestirne il valore.

const byte pinXX=10;
int pinXXVal;
...
pinVal=digitalRead(pinXX);
if(pinVal==HIGH)...

ops… ha ragione leo >.< grazie mille leo, io leggevo il numero della porta, non il valore della porta >.< ora funziona tutto a meraviglia . grazie mille .
il moderatore può chiudere e marcare come risolto questo topick :3

Puoi farlo tu. :grin:

Vai in modifica al tuo primo post in questo topic. Ti viene permesso di modificare il titolo, basta che aggiungi tu "[Risolto]"

salvio810:
ops… ha ragione leo >.< grazie mille leo, io leggevo il numero della porta, non il valore della porta >.< ora funziona tutto a meraviglia . grazie mille .
il moderatore può chiudere e marcare come risolto questo topick :3

Non abbiamo abbastanza tempo per farlo per te. :wink: :wink: :wink: e per tutti gli altri.
Ciao Uwe