ciao ragazzi , ho un sensore temperatura e umidità AM2315,
lo utilizzo con una libreria e scrivo il valore ditemperatura e umidità su un monitor 160128 con un circuito seriale della sparkfun.
In più , il sensore comunica in I2C, quindi, ho la libreria wire....per essere più preciso ecco le librerie:
#include <SoftwareSerial.h>// comunicazione seriale
#include <SparkFunSerialGraphicLCD.h>// libreria per il monitor con circuito seriale
#include <Adafruit_AM2315.h>// sensore temperatura e umidità
#include <Wire.h>// libreria per la comunicazione I2C
Il problema è che dopo innumerevoli esperimenti mi sono accorto che sembra mancare qualcosa alla comunicazione I2C e il sensore è come non esistesse...
mentre se aggiungo la libreria "LiquidCrystal_I2C.h" tutto funziona:
#include <LiquidCrystal_I2C.h>
Qualcuno sa indicarmi cosa manca alla Wire.h che è invece presente alla LiquidCrystal_I2C.h?
In quanto io, in verità ,vorrei togliere la LiquidCrystal_I2C.h perché di fatto non ha senso per questo
La mia <Wire.h> da sola non abilitava le resistenze di pull up, necessittava della <LiquidCrystal_I2C.h> che lo fa di default.
Adesso il codice comprende l'abilitazione con le due righe in setup. tutto funziona.
Se vuoi abilitarle sarebbe meglio usare pinMode (SDA, INPUT_PULLUP).
A parte questo, la resistenza dei pull-up interni potrebbe essere troppo elevata e creare problemi al bus. Se qualcosa non va come deve, prova a mettere dei resistori esterni, ad esempio da 3.3K o 4.7K. Vedi qua e qua per maggiori info.
Si questo è vero, ho letto da qualche parte qui sul forum che si può scendere con le resistenze di pull up fino a 1.8kohm per ottenere il massimo dal bus con 3 mA di corrente...
Per correttezza volevo rettificare questo post perché procedendo con le mie sperimentazioni, posso riferire quanto segue annullando quanto affermato precedentemente:
-la libreria wire.h deve essere inizializzzata in setup con wire.begin(); (questo è ciò che mancava)
-le resistenze di pull up sono attivate dalla libreria wire per default