Malfunzionamento Arduino Mega/breadboard?

Salve a tutti! da ieri sto avendo dei problemi con Arduino Mega. Non sapendo se e un problema software o hardware scrivo qua in "generale" sperando di non far incavolare nessuno.. :slight_smile: . Essendo alle primissime armi, volevo far accendere e restare acceso un led tramite pulsante. Il problema nasce su un secondo pulsante installato sulla parte sinistra della breadboard( allego uno screen di fritzing). Questo pulsante quando e spento mostra, tramite il monitor seriale, valori altalenanti di 0 e 1 quando invece dovrebbe restare fisso su 0 se non premuto. Allego un altro screen in cui e visualizzato il codice e la finestra del monitor seriale. Premetto che i cavetti sono tutti ben collegati. Cosa puo essere successo? e la breadboard o arduino che fa difetto? vi ringrazio per la grossa mano che mi darete..

int pulsante;
int pulsante2;
int stato=0;
int stato2=0;

void setup(){
 pinMode(6,OUTPUT);
 pinMode(7,INPUT);
 pinMode(11,INPUT);
 Serial.begin(9600);
 pinMode(8,OUTPUT);}
 
void loop(){
 pulsante=digitalRead(11);
 if ((pulsante==1) and (stato==0)){
 digitalWrite(8,HIGH);
 stato=1;
delay(300);}
 else if ((pulsante==1) and (stato==1)){
   digitalWrite(8,LOW);
   stato=0;
   delay(300);}
   
   pulsante2=digitalRead(7);
   Serial.println(pulsante2);
 
}

[url=http://[![|500x312](http://s14.imagestime.com/out.php/i1048904_Schermata1.png)](http://www.imagestime.com/show.php/1048904_Schermata1.png.html)

[url=http://[![|500x312](http://s14.imagestime.com/out.php/i1048903_Schermata.png)](http://www.imagestime.com/show.php/1048903_Schermata.png.html)

Premesso che l codice, in conformità al REGOLAMENTO, punto 7, DEVE essere racchiuso tra i tag CODE (... sono quelli che in edit inserisce il bottone fatto così: </>, tutto a sinistra) e non tra i tag QUOTE, a me comunque sembra che il bottone coinvolto sia quello sulla parte "destra" della breadboard (... dato che leggi il pin 7).

Correttamente hai messo delle resistenze di pull-down verso massa, quindi, effettivamente, il valore del pin 7, in assenza di pressione dovrebbe essere LOW (0).
Un'oscillazione tra 0 e 1 di tale pin può indicare un cattivo contatto o un malfunzionamento della MCU.

Fai una prova, metti con un filo direttamente a massa il pin 7 e verifica che il valore sia stabile a LOW (0), così ti togli il dubbio sulla MCU ... se tutto va bene, riverifica il cablaggio ... magari hai sbagliato una connessione sulla breadboard.

Guglielmo

ho collegato il pin 7 a massa e dal monitor seriale mi dice sempre la stessa cosa, valori oscillanti senza toccare nessun pulsante.. ho fritto arduino? l'altro pulsante funziona bene e accende e spegne il led.

cmigoni:
ho collegato il pin 7 a massa e dal monitor seriale mi dice sempre la stessa cosa, valori oscillanti senza toccare nessun pulsante.. ho fritto arduino?

.. beh ... un pin messo a massa che in lettura continua a dare valori a caso ... non è esattamente un buon segno :frowning:

Guglielmo

... fai una controprova e levati il dubbio ... cambia pin ... che so io, usa il pin 5 o il 4 :wink:

Guglielmo

Il LED lo hai collegato come da schema o con la resistenza in serie?
Hai un falso contatto su qualche cavetto Arduino Breadboard?

Poi inizializzi i pin 6,7 e 11 e usi i pin 7,8 e 11. Il LED non puó accendersi (o meglio si accende leggermente perché attivi e disattivi la resistenza pullup interna.)

Quel codice Ti fa ocillare (accendere e spegnere) l' uscita del LED finche premi il pulsante sul pin 11.Devi mettere la variabile stato a 0 solo quando il pulsante sul pin 11 é stato rilasciato (da il valore 0)

Ciao Uwe

Uwe,
i pin sono inizializzati tutti, guarda bene il codice :

pinMode(6,OUTPUT);
pinMode(7,INPUT);
pinMode(11,INPUT);
Serial.begin(9600);
pinMode(8,OUTPUT);}

6,7,11 e 8 ... e le letture gli ballano sul 7 anche se non tocca nulla ...

Il LED .. è da vedere come lo ha collegato realmente ...

Guglielmo

P.S. : cmigoni, usa la funzione dell'IDE Menu -> Tools -> Auto Format per sistemare quel codice che ... le indentature sono tutte messe male :wink:

Grazie Guglielmo, non l' avevo visto.
Ciao Uwe

grazie a tutti per le risposte.. ma com'e possibile che dopo una settimana si frigga arduino? :o ho sempre e solo acceso e spento dei led e son stato sempre attento a polarità..

gpb01:
... fai una controprova e levati il dubbio ... cambia pin ... che so io, usa il pin 5 o il 4 :wink:

Guglielmo

Ma questo test lo hai fatto??

Ciao

Meluino

cmigoni:
ho sempre e solo acceso e spento dei led e son stato sempre attento a polarità..

Se il LED li hai collegati come nel tuo schema ... allora è normale !!!

I LED sono dei diodi e occorre LIMITARE la corrente che ci scorre quindi occorre mettere in SERIE (... come ti ha già indicato Uwe) una resistenza (... che non c'è sul tuo schema o che comunque è collegata male).

Ti rammento che ogni pin di Arduino può dare al massimo, a Vcc, 40 mA (... ma quello è veramente un limite, nel normale funzionamento occorre stare al 60-70% di detto valore) ed inoltre la somma di tutti i pin e dell'assorbimento del chip, non deve superare al massimo i 200 mA (... e anche qui massimo va considerato come valore limite, ma nel normale funzionamento occorre stare al 60-70% di detto valore). Assorbimenti oltre detti limiti possono danneggiare irrimediabilmente il chip.

Se tu colleghi il LED come lo hai disegnato ... praticamente crei un corto tra il pin 8 e la massa ...
... con le conseguenze del caso !

Guglielmo

P.S.: Consiglio la lettura di QUESTA traduzione di un articolo in inglese fatta da Leo :wink:

mi scuso ma per l'agitazione ho fatto male il disegno su fritzing, non fa massa col pin 8. Il test l'ho fatto sul pin 12 e i valori sono sempre oscillanti!

Mmmm ...
... senti facciamo una cosa, togli tutto collega solo il pin a massa, dopo di che fai girare questo programma :

const byte numeroPin = 7;  // qui metti il pin che vuoi provare

void setup() {
  delay(1000);
  Serial.begin(9600);
  pinMode(numeroPin, INPUT);
}

void loop() {
  Serial.println(digitalRead(numeroPin));
  delay(100);
}

... cambiando solo il valore della costante che indica il pin puoi verificare i vari pin. Controlla con quali pin funziona (ovvero da sempre 0) e con quali no.

Guglielmo

quindi collego il gnd alla breadboard e in corrispondenza collego un cavo con un qualsiasi pin per testare giusto? :confused:

Puoi anche fare senza breadboard ... un ponticello tra GND ed il pin da provare ...
... così vediamo anche se è un problema di breadboard :wink:

Guglielmo

la ringrazio tantissimo! allora il risultato e che i pin tra il 2 e 13 collegati direttamente con la massa tramite il codice da lei indicato danno sempre zero..e ci siamo! :). Diverso e il discorso per la breadboard. collegando il gnd nella prima fila orizzontale e poi collegandoci nella stessa fila i pin risulta che: nella parte destra nessun problema.. nella parte sinistra il valore oscilla.

Ok ... hai una breadboard di quelle separate a metà ... :smiley:
... dei fare un ponticello sia per i positivi che i negativi tra una metà e l'altra.

Guglielmo

*P.S.: Si, purtroppo esistono, sono quelle di più bassa qualità. Quelle un po' più serie hanno il collegamento che è continuo, quest'altre sono fatte unendo due pezzi separati *

Ci sono breadbord che non hanno collegato tutta lunghezza delle file esterne ma sono 2 pezzi divisi al centro. Fa un controllo e prelievi la massa per il pulsante dalla stessa metá dove hai collegato la massa del Arduino.
Ciao Uwe

Guglielm perché l' hai scritto prima di me???

si e proprio così! ho fatto un test e la massa non arrivo nella seconda metà! Che sospiro di sollievo! mi sembrava strano che si potesse bruciare così facilmente!! Vi ringrazio tutti per il consulto!!

uwefed:
Guglielmo perché l' hai scritto prima di me???

... perché sono più vecchio e più veloce :smiley: :smiley: :smiley: :grin: :grin: :grin: :smiley: :smiley: :smiley:

Guglielmo