pinMode, digitalRead e digitalWrite

buon giorno a tutti,

avrei un dubbio sullo sketch che sto compilando:

void setup()
{
  lcd.begin(16, 2);

  pinMode(2, INPUT);
  digitalWrite(2,HIGH);
  pinMode(3, INPUT);
  digitalWrite(3,HIGH);
  pinMode(5, OUTPUT);
  //digitalWrite(5, LOW);

}  


void loop()
{
  Boa1 = digitalRead(2);
  Boa2 = digitalRead(3);

  if (Boa1 == HIGH){

    digitalWrite(5,HIGH);
    lcd.setCursor(10,1);
    lcd.print (Boa1);
    lcd.print (Boa2);
  }

  else{

    digitalWrite(5,LOW);
    lcd.setCursor(10,1);
    lcd.print (Boa1);
    lcd.print (Boa2);
  }

l'unico modo per rendere stabile la lettura delle boe (funzionano come un normale pulsante on/off) è impostare i pin 2 e 3 su INPUT e poi HIGH, quindi collegarli al GND; al contrario impostare INPUT e LOW e quindi collegare l'altra estremità ai 5V fa impazzire la lettura: quando è ON è ok, quando è OFF oscilla tra 0 e 1 in continuazione..
Sicuramente sbaglio qualcosa...

Grazie in anticipo

quando fa così di solito è perchè manca una resistenza di pull down...io di solito ne metto una da 1 Mohm ma vanno bene anche di più piccole

Ciao zio,
Io non ci ho capito molto, però nello schema fritzing il pin 3 non è collegato, mentre nello sketch lo leggi. Scusa l'ignoranza, cosa sono ste boe? Che stai facendo?
N.

Ciao superp e grazie per la risposta,

sto realizzando, tramite relè, l'accensione e lo spegnimento di una pompa per l'acquario: sullo schema ho riportato solo i collegamenti di una boa, l'altra, quella collegata al pin 3, segue un collegamento identico (così come per il codice); le boe sono dei comunissimi galleggianti che funzionano come degli interruttori.

Grazie

Mettere un pin in INPUT e poi scriverci HIGH equivale ad attivare la resistenza di pull-up interna.
Poi messo così lo schema non ha molto senso, a che serve la R in serie al pulsante?

Le pull-up si collegano così:
http://arduino.cc/playground/CommonTopics/PullUpDownResistor
E servono per dare un segnale fisso in caso di non pressione

ah... e come posso collegare in modo corretto?
la resistenza l'ho messa per paura di fare corto (sono un pò a terra con l'elettronica =()

impostando i pin 2 e 3 come INPUT, senza l'HIGH, e spostando da GND a 5V ... ho grossi problemi a rilevare la posizione della boa (problemi simili anche se è su GND): se è giù mi dice HIGH, ma se va su, oltre a non accorgersene subito, continua ad oscillare (HIGH/LOW) per almeno 5 secondi...

Ti ho messo un link, l'hai guardato?

si ... ma non ci ho capito tantissimo :slight_smile:

basandomi su un esempio preso dal manualetto ho (sperando di aver fatto una caxxata) così:

Così mi pare vada bene. La resistenza mettila da 10K.
Lo schema è con una pull-down, quindi devi leggere lo stato alto per capire se è stato premuto

leo72:
Così mi pare vada bene. La resistenza mettila da 10K.
Lo schema è con una pull-down, quindi devi leggere lo stato alto per capire se è stato premuto

non mi mandare male... ma non capisco cosa sono sti pull-up/down
dalla guida non riesco a capirlo :frowning:

E' la prima cosa detta nel link che ti ho postato io:

Pull-up resistors are used in electronic logic circuits to ensure that inputs to the arduino settle at expected logic levels if external devices are disconnected or high-impedance. 'Just because you have nothing at all connected to an input pin doesn't mean it is a logical zero.'

Una pull-DOWN serve a dare un valore BASSO ben preciso al pin quando non premi il pulsante, una pull-UP serve inceve a dare una lettura ALTA a pulsante non attivato. In questo modo hai un segnale a riposo non flottante.

quindi nella seconda soluzione ho adottato, non sapendolo, una pull-down?

Sì.
In questo modo il controllo devi farlo sul passaggio del pin ad HIGH.
Ora, il tipo di configurazione da adottare dipende dalla risposta che dà ciò che devi collegarci. Se hai un segnale basso, non puoi mettere una pull-down perché avresti LOW in entrambi i casi :wink:

come si vede dal secondo schema, ho messo un piedino su 5V quindi quando il contatto è chiuso lui vede HIGH, quando è aperto, grazie al pull-down, vede LOW...

o almeno credo sia così...

Non mi riferivo a questo schemino ma a ciò che avevi detto all'inizio, e cioè che dovevi leggere un galleggiante :stuck_out_tongue:

zioTonino:
si ... ma non ci ho capito tantissimo :slight_smile:

basandomi su un esempio preso dal manualetto ho (sperando di aver fatto una caxxata) così:

Si questo é una resistenza pull down (porta basso) dove porta l' entrata a massa se il tastino non é premuto.
Ciao Uwe