Wire.h o LiquidCrystal_I2C.h

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

progetto privo di un display che la utilizza...

Posta il codice.

ciao,ecco il codice:

#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,20,4);

#include <SoftwareSerial.h>
#include <Wire.h>
#include <Adafruit_AM2315.h>
#include <SparkFunSerialGraphicLCD.h>

Adafruit_AM2315 am2315; 

#define maxX 159
#define maxY 127
LCD LCD;

void setup()
{
lcd.init();

LCD.setX(80);LCD.setY(65);  
LCD.printNum (am2315.readTemperature());
LCD.setX(120);LCD.setY(65);
LCD.printNum (am2315.readHumidity());
}

void loop(){}

Ho trovato il codice che funziona:

#include <SoftwareSerial.h>
#include <Wire.h>
#include <Adafruit_AM2315.h>
#include <SparkFunSerialGraphicLCD.h>

Adafruit_AM2315 am2315; 

#define maxX 159
#define maxY 127
LCD LCD;

void setup(){
digitalWrite(SDA, 1);
digitalWrite(SCL, 1);}

void loop(){
LCD.setX(80);LCD.setY(65);  
LCD.printNum (am2315.readTemperature());
LCD.setX(120);LCD.setY(65);
LCD.printNum (am2315.readHumidity());
delay(500);}

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