Go Down

Topic: Problemi con pulsanti e arduino Mega 2560 (Read 924 times) previous topic - next topic

cyberhs

Escludendo che il tuo MEGA sia guasto, è probabile che nel tuo sketch ci sia un errore.

Ad esempio, nel ciclo if inserire un "=" al posto di "==", oppure una singola graffa al posto di due, ecc.

Sono gli errori più semplici che sono "invisibili"!

In qualsiasi caso, per rendere più gestibile ed elegante il programma, fai così:
Code: [Select]

...
const byte DigInCount = 12;
const byte DigInPin[] = {31, 33, 35, 37, 39, 41, 43, 45, 47, 49, 51, 53};
boolean DigInVal[] = {HIGH, HIGH, HIGH, HIGH, HIGH, HIGH, HIGH, HIGH, HIGH, HIGH, HIGH, HIGH};                   
...
  for (byte I = 0; I < DigInCount; I ++) {
    pinMode(DigInPin[I], INPUT_PULLUP);           // set as input with internal 20k pull-up resistor
  }
...
  boolean Status;

  for (byte I = 0; I < DigInCount; I ++) {
    Status = digitalRead(DigInPin[I]);
    if (Status != DigInVal[I]) {
      delay(20);                                    // 20 ms
    }
    DigInVal[I] = digitalRead(DigInPin[I]);
  }
...
  for (byte I = 0; I < DigInCount; I ++) {
    if(DigInVal[I]==HIGH) lcd.print(DigInPin[I]);
}



marcolindo94

#6
Jan 16, 2013, 05:35 pm Last Edit: Jan 16, 2013, 05:37 pm by marcolindo94 Reason: 1
Aggiornamento:

Ho ricontrollato la scheda su cui vanno i pulsanti (da cui parte poi il cavo dell'arduino mega), e l'ho pulita da dei residui che sembravano di pasta salda... FUNZIONA

Adesso funziona, ovviamente adesso devo mettere a posto il codice come dice Cyberhs, il quale ringrazio per il codice che ha postato, che adesso adotterò per la gestione dei miei pulsanti.

Quindi ho scoperto che la pasta salda conduce (se ne rimangono dei pezzetti solidi).. Non come il rame, ma un pezzettino grande quanto un pin di un integrato DIL ha una resistenza di circa 1,5 KOhm... Non so se è normale, se è una caratteristica di ogni tipo di pasta, comunque la mia conduce.

Ringrazio tutti voi per l'aiuto (e mi scuso per il tempo perso), e in particolar modo l'utene Cyberhs, per il codice che adesso utilizzerò.

PS: devo cambiare il titolo del topic e mettere [RISOLTO] o va bene se lo lascio così com'è?

LeonidRusnac

ciao, in questi casi, quando non sai se non va la scheda o hai sbagliato il codice ti conviene mettere manualmente i pin di arduino a vcc o a gnd con dei semplici cavetti, così almeno sai dove sta il problema :)

marcolindo94


ciao, in questi casi, quando non sai se non va la scheda o hai sbagliato il codice ti conviene mettere manualmente i pin di arduino a vcc o a gnd con dei semplici cavetti, così almeno sai dove sta il problema :)


Infatti sono riuscito a risolvere il problema proprio facendo così  XD

pablos

#9
Jan 16, 2013, 07:28 pm Last Edit: Jan 16, 2013, 08:04 pm by pablos Reason: 1
La pasta salda non è convincente, non conduce

Se tu mi metti gli input in pull-up interno verso +5v e usi un controllo
if(digitalRead(37)==0){
lcd.print("4");
}
con pulsanti aperti tra pin e gnd come faceva a darti valori sballati senza toccare i bottoni ? anche con falsi contatti non poteva darti i numeri anche senza cavi verso la pulsantiera. Allora c'erano dei corti da troppo stagno  :D

no comment

Go Up