Arduino si blocca !

Ciao a tutti
scusate il disturbo ma non so come fare ! Sono ormai un po di giorni che arduino si blocca e non riesco a capire il perché !! Si blocca dal nulla in momenti diversi ! E' un programma che mi serve per controllare un acquario ed è collegato ad un display che mi stampa ora e qualche parametro e alle volte quando arrivo a casa mi accorgo che è bloccato perché l'ora non scorre ...
potete aiutarmi ? Ho già provato a controllare la ram in real time ed è praticamente vuota !
Grazie mille

Se non posti il codice racchiuso nei tag code e ci dici cosa e come hai collegato non possiamo dirti nulla.

Senza vedere il programma che usi e lo schema elettrico è molto difficile comprendere le cause.

Così a occhio... o dipende dal software, probabilmente qualche variabile, o dall'hardware (relè se ne hai).

Scusate avevo scritto le presentazioni ma non erano partite non so perché !! Comunque vi spiego: arduino controlla delle prese elettriche tramite dei relè; come sensori ha un sensore della temperatura dell'acqua, un sensore di livello, un sensore della temperatura e umidità dell'aria e un display I2C. Se devo essere onesto il problema è nato da quando ho messo il display ....
vi posto il programma
come alimentazione lo alimento con un alimentatore da 7,5 V tramite il Jack e alimento in modo separato tutti gli altri dispositivi.
Grazie ancora

Sto provando a postare il codice col tag ma mi dice che il messaggio e troppo lungo ! come posso fare ?

Allega il codice (attachments ...)

Ok allegato grazie ! Cerco anche di fare uno schema delle connessioni se mi dite che il problema non è il programma !
Grazie

Programma_acquario_con_LCD.ino (9.27 KB)

ciao...che libreria usi per liquidCrystal_I2C.h (link) ?...quelle che ho trovato io accettano da 3 a 4 parametri nella tua ce ne sono "tanti"

#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

Ciao si ci sono uscito pazzo a far andare il modulo I2C questa libreria si chiama NewliquidCrystal ! Ne ho provate 3 o 4 prima di trovare questa che funziona ! La ho impostato cercando il canale con l'I2Cfinder e poi ho copiato la stringa che c'era sul sito in cui ho trovato la libreria ! dici che potrebbe essere quello il problema ?
Grazie ancora

Ho fatto una prova e con la libreria I2C che dici te cioè LiquidCrystal_I2C lcd(0x3F,16,2);
mi scrive solo la prima lettera sia nella prima che seconda riga

Verifica una cosa: le scritte sul display sono bloccate o sono presenti anche caratteri strani?
Verifica un'altra cosa: è proprio tutto bloccato o è solo il display?

Ciao si ci sono uscito pazzo a far andare il modulo I2C questa libreria si chiama NewliquidCrystal ! Ne ho provate 3 o 4 prima di trovare questa che funziona ! La ho impostato cercando il canale con l'I2Cfinder e poi ho copiato la stringa che c'era sul sito in cui ho trovato la libreria ! dici che potrebbe essere quello il problema ?
Grazie ancora

ho cercato ma non ho trovato una libreria che necessita di quei valori...a cosa si riferiscono?...hai un link?

Ho fatto una prova e con la libreria I2C che dici te cioè LiquidCrystal_I2C lcd(0x3F,16,2);
mi scrive solo la prima lettera sia nella prima che seconda riga

ho solo detto che le librerie liquidcrystal che ho trovato chiedevano 3-4 valori...attenzione che alcune necessitano di un begin() nel setup()...devi sempre dare un occhio agli esempi.

Verifica una cosa: le scritte sul display sono bloccate o sono presenti anche caratteri strani?
Verifica un'altra cosa: è proprio tutto bloccato o è solo il display?

come dice paulus cosa succede o non succede esattamente?

Allora in pratica si blocca il display e nel contempo anche arduino perché io stampo sia sul display che in seriale e anche quello si blocca e se sta facendo un azione resta bloccato su quella (per esempio una volta mi si è bloccato mentre effettuava un rabbocco dell'acqua e difatti mi si è allagata casa). Pero ora ho tolto il display e sono tornato alla modalità seriale e non si è più bloccato per ora ! quindi credo che il problema sia il display o forse più che il display l'I2C !! comunque con questa stringa

#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

poi metto lcd.bigin(16,2);

Orso non capisco la tua domanda; io ho ho provato tutte le librerie I2C che ho trovato e nessuna funzionava tranne questa ! Pero evidentemente anche questa va male !! quindi potrebbe essere anche il modello di I2C che non va bene ...
Difatti pensavo di comprare un display 40x4 con già l'I2C integrato e vedere se mi da lo stesso problema
Se volete posso postare il link di eBay dove ho comprato l'I2C

grazie mille a tutti

  1. metti i link al display LCD che usi così si vede che controller monta

  2. metti il link al modulo I2C che hai aggiunto così si vede che modulo è

  3. tutto può essere, ma mi sembra strano che si blocchi per il display ... fai un po' di debug inserendo delle Serial.println() con messaggi precisi nei vari punti del programma in cui passi e vedi dove si blocca ... magari subito prima e subito dopo le scritture sul LCD ... ::slight_smile:

Magari è più colpa della "connessione" fisica ... quanto sono lunghi i cavetti che dal modulo I2C vanno ad Arduino ?

Guglielmo

ciao...

Orso non capisco la tua domanda....

quello che intendevo e che non conoscendo questa libreria mi è difficile provare a capire se c'è un errore nel codice...

se non ho capito male il "congelamento" avviene random nel codice però ,come suggerisce Guglielmo, se vuoi tentare un debug devi inserire nel codice qualche cosa che ti dia dei riferimenti di dove si è bloccato; delle Serial.println() vanno bene.

Se volete posso postare il link di eBay dove ho comprato l'I2C

per capire...LCD aveva già il modulo I2C o ce l'hai inserito tu dopo?

per esempio una volta mi si è bloccato mentre effettuava un rabbocco dell'acqua e difatti mi si è allagata casa

immagino la felicità!

ciao, eh lascia stare che è pure di acqua salata l'acquario e sotto ho il computer ahahah
comunque l'i2c lo ho comprato a parte e poi lo ho saldato al display che avevo.
Comunque allora un giorno che resto a casa provo a inserire dei serial.print in modo da vedere a che livello del programma si blocca ! grazie mille

Ah dimenticavo i cavetti sono abbastanza lungi ! Circa un metro e ho usato un cavo abbastanza grosso (0,75 mm) per fare i collegamenti !! Potrebbe essere quello il problema ?

Il BUS I2C è per collegamenti LOCALI ... massimo 10/15 cm ... lunghezze maggiori danno sempre problemi !

Nei casi in cui serve "remotizzare" oggetti I2C ... si usano degli appositi chip che fanno da I2C Bus Externder (es. P82B715).

Guglielmo

Ah allora ho capito dov'è il problema !!! Grazie mille ! Non ci sarei mai arrivato ! Allora compro il bus extender e vedo se si risolve il problema

QUI il datasheet del chip ... studiatelo bene perché NON è cosa così banale ...

Guglielmo

P.S.: ma devi avere il display così lontano ? ? ? :o