Malfunzionamento Pin Input/Output

Buonasera a tutti,

sono un ing delle tlc che da poco si è appassionato al mondo di Arduino e sono nuovo su questo forum. Probabilmente sto sbagliando la sezione, ma il topic mi sembra abbastanza trasversale sia per la parte sw che per la parte hw.

Sto cercando di far accendere un led, attraverso la pressione di un bottone, con una board Arduino Mega, ma temo di aver sbruciacchiato qualche pin (tutti?) della scheda.

Vi allego di seguito il circuito che ho messo su e lo sketch.
Come vedete dallo sketch, il led si dovrebbe accendere alla pressione del bottone che chiude il circuito e fa passare la corrente nella resistenza da 330 Ohm in serie al pin 12 (quella di pull down che va a massa è pari a 10 KOhm

Circuito

Codice:

#define A 2              // pin di output dove è collegato il led  
#define B 12              // pin di input dove è collegato il pulsante  

int val_a; 
int val_b; 

void setup() {
  // put your setup code here, to run once:
   pinMode(A, OUTPUT); 
   pinMode(B, INPUT); 
   Serial.begin(9600);
}

void loop() {

  digitalWrite(B,LOW);
  val_a = digitalRead(A);  // legge il valore dell'input e lo conserva
  val_b = digitalRead(B);  // legge il valore dell'input e lo conserva
  Serial.println(val_a);
  Serial.println(val_b);

  delay(100);
  if (val_b == HIGH)   { 
    digitalWrite(A,HIGH);
   }  
   if (val_b == LOW)   { 
    digitalWrite(A,LOW);
   } 

}

Innanzitutto, il led non è assolutamente infastidito dalla pressione o meno del bottone e si accende più o meno quando vuole, ma la cosa ancora più strana è che, pur levando il bottone (e intendo levandolo fisicamente dalla breadboard), il led continua ad accendersi ad intervalli più o meno regolari (circa ogni 5 secondi). Ora, da quello che ho letto un po' in giro, sembra che il problema possa essere dovuto al bootloader che di default mi va settare su HIGH l'uscita del PIN#12 (per questo motivo l'ho forzata a LOW nel codice), ma anche se fosse così, come è possibile che decida di farlo una volta ogni 5 secondi giù di lì o comunque "a tratti"? :o

Quindi le mie domande sono due (esclusa quella appena sopra)

  1. Dal momento che la board ora mi sembra inutilizzabile, esiste un modo per recuperarla, o devo buttarla definitivamente?
  2. E' possibile fare un check pin per pin per capire se ce ne sta qualcuno bruciato/malfunzionante?

Grazie in anticipo a tutti!

nanne

Perchè hai utilizzato 2 R per il button e nessuna per il led?

Quel circuito non mi sembra possa danneggiare il micro, è solo privo di Resistenza di pull-UP o Down e privo di una R che limita la corrente nel diodo

Ps: scusa ing di cosa? tlc = telecomunicazioni? io non sono ing ma sono perit delle fgt

ciao

scollega tutto , prova a mettere il led sulle uscite digitali quelle di lato
poi prova Cosi

int isPin = "Numero del pin digitale";
int i = 0;
void setup()
{
 Serial.begin(9600);
}
void loop()
{
delay(1000);
digitalWrite(isPin,HIGH);
i = 1;
Serial.println(i);
delay(1000);
digitalWrite(isPin,LOW);
i = 0;
Serial.println(i);
}

dovresti vedere il led lampeggiare circa una volta al secondo e sul monitor seriale dovresti vedere 0 e 1 che si alternano

quelle che usi sono porte pwm dovrebbero andare bene ugualmente ma cosi sei sicuro per sicurezza puoi mettere una resistenza da 220ohm davanti al led in caso come seconda cosa verifica il senso del Led Provando a girarlo mi raccomando spegni la board prima di invertire i poli, cmq non dovrebbe essersi danneggiata
ps i GND puoi collegarli anche assieme

prova a mettere il led sulle uscite digitali quelle di lato

cosa vuol dire ?
tutte sono uscite digitali, anche le analog .. basta impostarle
Ma poi di button+led ci sono schemi a fiumi, non capisco perchè non seguire i tutorial.

@ pablos

La resistenza in serie al led c'è ho dimenticato di disegnarla :slight_smile:

Perché dici che manca la resistenza di pull down? E' quella che ho messo in serie al bottone che va a massa, 10 k dovrebbero bastare!

@silver666it

Si i ground li ho separati per avere il tutto il più isolato possibile ed evitare che le interferenza di una massa sull'altra mi andassero ad accendere il led (sto impazzendo da due giorni)

Ho capito cosa intendi silver, ho già fatto una prova simile, quando setto il pin come Output funziona tutto correttamente, il problema è quando lo setto come Input (come il caso del 12).
E' assurdo che il led si accenda o che io abbia una caduta sul pin#12 quando stacco fisicamente il bottone dalla breadboard!
Quello di cui non mi capicito è come faccia ad arrivare tensione su quel pin senza che sia collegato a nulla...

cosa vuol dire ?
tutte sono uscite digitali, anche le analog .. basta impostarne una
Ma poi di button+led ci sono schemi a fiumi, non capisco perchè non seguire i tutorial.

certo ci sono e pure su fritzing se è per quello, ma cosi almeno può verificare se le altre porte funzionano, è un suggerimento mica è obbligato

guardando su fritzing sotto esempi trovi il tutto

const int buttonPin = 2;     // the number of the pushbutton pin
const int ledPin =  13;      // the number of the LED pin

// variables will change:
int buttonState = 0;         // variable for reading the pushbutton status

void setup() {
  // initialize the LED pin as an output:
  pinMode(ledPin, OUTPUT);      
  // initialize the pushbutton pin as an input:
  pinMode(buttonPin, INPUT);     
}

void loop(){
  // read the state of the pushbutton value:
  buttonState = digitalRead(buttonPin);

  // check if the pushbutton is pressed.
  // if it is, the buttonState is HIGH:
  if (buttonState == HIGH) {     
    // turn LED on:    
    digitalWrite(ledPin, HIGH);  
  } 
  else {
    // turn LED off:
    digitalWrite(ledPin, LOW); 
  }
}

cmq mi sembra di vedere guardando questo codice preso da FRITZING che tu abbia messo o meglio messo if al posto di else nel valutare lo stato
ovviamente occhio ai pin questi sono di un arduino uno

certo ci sono e pure su fritzing

dai facciamo i seri, fritzing non dovresti, non solo non usarlo, ma nemmeno guardarlo .... è una cosa terribile, oscena, e incomprensibile

si certo lo so ma per imparare tutto va bene, certo ho eagle, multisim etc etc
poi non e molto che giocherello con arduino il c++ (marò odio il;) a fine linea
oggi so riuscito a installare e fare pure un piccolo test con VS2015 su arduino (che bello intellisense :slight_smile: lol

cmq nanne non te la prendere io e 4 gg che litigo e non so il perchè nel post dove leggo un sensore di temperatura quando lo trasferisco mi legge solo gli interi e sono sicuro l'errore è mio in quanto se faccio tutto sul medesimo arduino tutto funziona

Nanne14:
Buonasera a tutti,

Ti invitiamo a presentarti (dicci quali conoscenze hai di elettronica e di programmazione) qui: Presentazioni
e a leggere il regolamento se non lo hai già fatto: Regolamento
Qui una serie di link utili, non inerenti al tuo problema:

Fortunatamente l'esame di elettrotecnica l'ho già dato!
Grossolano errore quello di collegare in quel modo il bottone, ma ho dalla mia che ero un po' arrugginito, ora funziona tutto!

@pablos: si tlc vuol dire telecomunicazioni, fgt mi sfugge invece...

Ma non c'è problema tutti facciamo errori, però qui non è questione di ruggine, anche un bambino che ha sempre giocato con le cars collegava un led e un buttons, semplicemente perchè sa che deve guardare un tutorial e se mi dovesse chiedere come si fa, gli rispondo semplicemente "non fare domande inutili", hai un tutorial, hai tutti i mezzi per farlo da solo, se vuoi sapere tecnicamente come funziona allora chiedi pure :slight_smile:

@Pablos: premesso che non ho idea di cosa siano le cars... :smiley:
Il modo che c'è nel tutorial non l'ho guardato ma sono sicuro che non c'è un modo solo di collegare un bottone, mi sono reso conto semplicemente che stavo collegando i capi sbagliati del bottone e che, alla pressione di esso non venivano messe in parallelo le resistenze.
In ogni caso, la mia domanda originale non era su come collegare il bottone, ma in che modo verificare se i pin si fossero bruciati o meno e, in secondo luogo, se qualcuno poteva avere una spiegazione sul perché il led si accendesse in quel modo quantomeno "strano" e assolutamente autonomo.
E comunque ti ringrazio per i consigli e per le risposte, anche perché a breve avrò un'altra domanda, ma stavolta prometto di fare tutto alla perfezione, così potrai dirmi se ho imparato qualcosa e se ho levato un po' più di ruggine!

Grazie e a prestissimo!

Il modo che c'è nel tutorial non l'ho guardato ma sono sicuro che non c'è un modo solo di collegare un bottone, mi sono reso conto semplicemente che stavo collegando i capi sbagliati del bottone e che, alla pressione di esso non venivano messe in parallelo le resistenze.

Si si capita di sbagliare i pin del pulsante, in questo caso il pin di ingresso risultava libero di captare qualunque segnale via etere, forse per questo lampeggiava.

Ciao.

a breve avrò un'altra domanda

ci gioco 1000.00 euro che la domanda che farai è già sul tutorial o su google tra le prime 5 righe :slight_smile: