Go Down

Topic: Sketch che dopo poco si blocca senza cause apparenti (Read 467 times) previous topic - next topic

maubarzi

metti una Serial.print su read_buttons e vedi cosa ti ritorna la pcf8574.digitalReadAll()

e soprattutto cosa ti ritorna la read_buttons



Quello che intende Datman è di usare un principio analogo al debounce che usi già per non aggiornare l'LCD per 1 secondo o un secondo e mezzo dopo ogni aggoirnamento.
Nessuna buona azione resterà impunita!

Preistoria -> medioevo -> rinascimento -> risorgimento -> rincoglionimento!

gionata73

Ho provato a commentare anche la parte che genera la progress ba ma si blocca comunque.

Ho messo anche sotto controllo seriale lo stato dei bottoni (l'ho fatto solo con i due bottoni di speed up e speed down per provare).

Quando si blocca il display anche nel monitor seriale non registro più variazioni premendo i pulsanti.

E' come se l'intero I2c andasse a farsi friggere.




Datman

Hi,I'm Gianluca from Roma.I play&work with electronics since I was16(1984).
After 25yrs of maintenance on cameras&video mixers,since 2013myJob is HDTVstudios design.
Since Jan2015 IPlayWith Arduino:bit.ly/2F3LPWP
Thanks 4 a Karma if U like my answer

fabpolli

A questo punto scatta il metodo rasoiata di occam, stacca tutto ciò che non è necessario (motori, relé, RTC, ecc. ecc.) e lascia collegato SOLO il display.
Fai un piccolo programma che aggiorna il display ogni mezzo secondo e che dichiara e inizializza solo lo stretto necessario a far andare il display, quindi via TimerOne, e roba simile, lascia solo la LiquidCrystal e tutto ciò che le necessita e una roba simile a questa:
Code: [Select]


unsigned long idx = 0;

void setuo()
{
 ...inizializzazione ecc...
}

void loop()
{
  lcd.setCursor(0,0);
  lcd.print("Indice: ");
  lcd.print(idx++);
  delay(500);
}

E vedi se anche così si blocca o se nel display vedi scorrere i numeri due per secondo.
Se così funziona allora aggiungi la gestione dei pulsanti e verifica che il sistema continui a sentirne la pressione e aggiornare il display di conseguenza
Se anche così andasse alora aggiungi man mano le altre parti una alla volta fino a trovare il colpevole

maubarzi

ma ci entra nella read_buttons?
prova un serial print come prima istruzione
Nessuna buona azione resterà impunita!

Preistoria -> medioevo -> rinascimento -> risorgimento -> rincoglionimento!

gionata73

Provato anche con lcd shield con display non su i2c e pulsanti su pulsantiera con ingresso A0, si blocca pure cosi, quindi linee corte non è la problematica.

PS: per Fabpolli, non ho mai collegato nulla se non display e schedina di i2c extender con un paio di pulsanti collegati, alimentatore 5v e stop, quindi non sono da considerare eventuali disturbi di motori/rele perchè mai collegati fin ora.

In altri progetti ho usato questo modulo I2c per lcd senza mai aver blocchi o altro. A questo punto comincio a pensare che questo sketch dal quale ho tratto ispirazione ha qualche bug, anche collegando tutto come da indicazioni dell'autore si blocca dopo pochi secondi

https://github.com/lucadentella/A4988-and-Arduino

maubarzi

Se continua a scrivere nella seriale vuol dire che lo sketch sta ancora girando.
Devi indagare lo stato delle variabili per capire se entra nei vari metodi e cosa fanno questi metodi.
Lo puoi fare con le Serial.print per tracciare dove passi e lo stato delle variabili.

Comunque, prova a fare in modo che il display venga aggiornato solo una volta ogni tot secondi.
Nessuna buona azione resterà impunita!

Preistoria -> medioevo -> rinascimento -> risorgimento -> rincoglionimento!

Go Up