Go Down

Topic: problemi con InputPullup sulla Leonardo (Read 322 times) previous topic - next topic

secondsky

Ciao a tutti, sto avendo problemi con l'esempio InputPullupSerial sulla Leonardo.
http://arduino.cc/en/Tutorial/InputPullupSerial
Ho modificato lo script tenendo conto di alcuni consigli relati alla scheda:

while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }

e poi un delay(1); dopo la scrittura del valore sulla seriale.

Lo script risulta questo:

Code: [Select]
void setup(){
  //start serial connection
  Serial.begin(9600);
 
   while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }
 
  //configure pin2 as an input and enable the internal pull-up resistor
  pinMode(2 , INPUT_PULLUP);
  pinMode(13, OUTPUT);

}

void loop(){
  //read the pushbutton value into a variable
  int sensorVal = digitalRead(2);
  //print out the value of the pushbutton
  Serial.println(sensorVal);
  delay(1);
 
  // Keep in mind the pullup means the pushbutton's
  // logic is inverted. It goes HIGH when it's open,
  // and LOW when it's pressed. Turn on pin 13 when the
  // button's pressed, and off when it's not:
  if (sensorVal == HIGH) {
    digitalWrite(13, LOW);
  }
  else {
    digitalWrite(13, HIGH);
  }
}


Ora, che se non si blocca tutto come prima all'apertura della seriale, non viene comunque letto il cambiamento di stato del pulsante.
Leggevo che potrebbe trattarsi del fatto che il cambio di stato digitale sul processore dela leonardo avviene a un voltaggio inferiore rispetto che su quello della Uno, e servirebbe quindi un'ulteriore resistenza esterna.
Voi sapete qualcosa di più in merito?
Grazie

PaoloP

Hai attivato la pull'up interna quindi il pulsante, dall'altro lato, va collegato a GND.
Non è necessaria un'ulteriore resistenza essondoci già quella interna al micro.
Quando premi il pulsante l'ingresso va in LOW. Se non lo premi rimane HIGH.

Controlla i collegamenti e la logica del programma.  ;)

secondsky

Sì ho presente il fatto che l'altro vada collegato in ground, infatti con la UNO funziona perfettamente.
A parità di connessioni sulla leonardo però non va.
Sullo script mi sono limitato ad aggiungere quello che solitamente va aggiunto per la leonardo.

PaoloP

#3
Feb 23, 2013, 01:41 pm Last Edit: Feb 23, 2013, 01:43 pm by PaoloP Reason: 1
Se commenti tutte le righe relative alla seriale funziona?

Code: [Select]
void setup(){
  pinMode(2 , INPUT_PULLUP);
  pinMode(13, OUTPUT);

}

void loop(){
  int sensorVal = digitalRead(2);
  delay(10); // debounce
  if (sensorVal == HIGH) {
    digitalWrite(13, LOW);
  }
  else {
    digitalWrite(13, HIGH);
  }
}


Ad esempio questo sketch minimale.

leo72

Lo sketch che ha proposto Paolo a me fa quel che deve. Provato ora con la mia Leonardo.

Go Up