Joystick pulsante

Ciao a tutti,
come certi di voi sapranno sto progettando una mini serra, e man mano che mi arrivano i componenti monto tutto.

E' appena arrivato un joystick (http://www.ebay.it/itm/151755008916?_trksid=p2057872.m2749.l2649&ssPageName=STRK%3AMEBIDX%3AIT), del quale riesco a far funzionare perfettamente la parte analogica, ma non proprio il pulsante incorporato.

logicamente è un ingresso digitale, che inizialmente ho collegato direttamente al pin 2, senza ottenere nessun cambiamento sul monitor seriale una volta pigiato.

Collegango una resistenza di pull-up da 10Kohm a 5V funziona, ma segna 1 quando non è premuto, 0 quando invece lo tengo premuto... qualcuno ha idea del perchè? E poi, perchè quella resistenza? A logica mi verrebbe da collegarlo direttamente al pin digitale in ingresso all'arduino...

Ecco lo sketch:

#include <Wire.h>  // Comes with Arduino IDE
#include <LCD.h>
#include <LiquidCrystal.h>
#include <LiquidCrystal_I2C.h>


LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

// JOYSTICK
#define asseX A0
#define asseY A1
#define butt 2
// FINE jOYSTICK



void setup()
{
  // MONITOR SERIALE
  Serial.begin(9600);  // Used to type in characters
  // FINE MONITOR SERIALE
  
  //JOYSTICK
  pinMode( asseX,INPUT );
  pinMode( asseY,INPUT );
  pinMode( butt,INPUT );
  // FINE jOYSTICK

  // LCD
  lcd.begin(20,4);         // initialize the lcd for 20 chars 4 lines and turn on backlight

// ------- Quick 3 blinks of backlight  -------------
  for(int i = 0; i< 3; i++)
  {
    lcd.backlight();
    delay(250);
    lcd.noBacklight();
    delay(250);
  }
  lcd.backlight(); // finish with backlight on  
  
//-------- Write characters on the display ----------------
// NOTE: Cursor Position: CHAR, LINE) start at 0  
  lcd.setCursor(3,0); //Start at character 4 on line 0
  lcd.print("Hello, world!");
  delay(1000);
  lcd.setCursor(2,1);
  lcd.print("From Me");
  delay(1000);  
  lcd.setCursor(0,2);
  lcd.print("20 by 4 Line Display");
  lcd.setCursor(0,3);
  delay(2000);   
// Wait and then tell user they can start the Serial Monitor and type in characters to
// Display. (Set Serial Monitor option to "No Line Ending")
  lcd.setCursor(0,0); //Start at character 0 on line 0
  lcd.print("Start Serial Monitor");
  lcd.setCursor(0,1);
  lcd.print("Type chars 2 display"); 
  // FINE LCD  

}


void loop()  
{
  Serial.print( "Asse X: " );
  Serial.print( analogRead( asseX ) );
  Serial.print( " Asse Y: " );
  Serial.print( analogRead( asseY ) );
  Serial.print( " Butt A: " );
  Serial.print( digitalRead( butt ) );
  Serial.print( "\n" );
  delay( 300 );
}

Perche la resistenza di pull up funziona cosi, se sul pulsante NO viene applicata una resistenza di pull-up questo non premuto restituirà HIGH.

Grazie mille della dritta, allora continuo su questa strada :wink:

E poi, perchè quella resistenza? A logica mi verrebbe da collegarlo direttamente al pin digitale in ingresso all'arduino...

Perché quando il pulsante non é premuto l'entrata non é collegata a niente e percui legge disturbi ed é H o L a caso. Mettendo una resistenza pullup pulldown definisci lo stato del entrata a pulsane non premuto.

Ciao Uwe