Pages: [1]   Go Down
Author Topic: problemi con InputPullup sulla Leonardo  (Read 277 times)
0 Members and 1 Guest are viewing this topic.
torino, italy
Offline Offline
Sr. Member
****
Karma: 0
Posts: 339
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
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
Logged

Cagliari, Italy
Offline Offline
Tesla Member
***
Karma: 110
Posts: 6974
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.  smiley-wink
Logged

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

torino, italy
Offline Offline
Sr. Member
****
Karma: 0
Posts: 339
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Cagliari, Italy
Offline Offline
Tesla Member
***
Karma: 110
Posts: 6974
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Se commenti tutte le righe relative alla seriale funziona?

Code:
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.
« Last Edit: February 23, 2013, 07:43:52 am by PaoloP » Logged

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 325
Posts: 22498
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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


Pages: [1]   Go Up
Jump to: