Hola a todos,
Quiero solicitar un poco de ayuda con respecto al bus I2C. Resulta que trato de obtener los datos del DS1307 y el SHT15 por el mismo bus, el codigo funciona pero solo obteniendo los datos individualmente. Estoy utilizando las librerias SHT1x y RTClib, el bus de datos esta configurado en los pines A4 y A5. El codigo funciona individualmente, comentando lo siguiente:
Sin nada comentado esta es la salida:
2014/10/27 23:54:14
Temperatura: -40.0099983215 C Humedad: -4.69%
2014/10/27 23:54:18
Temperatura: -40.0099983215 C Humedad: -4.69%
2014/10/27 23:54:23
Temperatura: -40.0099983215 C Humedad: -4.69%
2014/10/27 23:54:27
Comentando fecha(); esta es la salida:
Temperatura: -40.0099983215 C Humedad: -4.69%
Temperatura: -40.0099983215 C Humedad: -4.69%
Temperatura: -40.0099983215 C Humedad: -4.69%
Comentando fecha(); y Wire.begin(); esta es la salida:
Temperatura: 24.1399993896 C Humedad: 44.88%
Temperatura: 24.1199951171 C Humedad: 44.81%
Temperatura: 24.1100006103 C Humedad: 44.81%
Temperatura: 24.1199951171 C Humedad: 44.82%
Comentando tem_hum(); esta es la salida:
2014/10/27 23:58:12
2014/10/27 23:58:13
2014/10/27 23:58:14
2014/10/27 23:58:15
Comentando Wire.begin(); esta es la salida:
2165/165/165 165:165:85
Temperatura: -40.0099983215 C Humedad: -4.69%
2165/165/165 165:165:85
Temperatura: -40.0099983215 C Humedad: -4.69%
2165/165/165 165:165:85
Temperatura: -40.0099983215 C Humedad: -4.69%
2165/165/165 165:165:85
Agradeceria si pudieran ayudarme, la idea es tener en la salida serial este formato:
2014/10/27 23:58:13 Temperatura: 24.1100006103 C Humedad: 44.81%
Este es el codigo sin comentar.
#include <SHT1x.h>
#include <Wire.h>
#include "RTClib.h"
#define dataPin A4
#define clockPin A5
SHT1x sht1x(dataPin, clockPin);
RTC_DS1307 RTC;
void setup()
{
Serial.begin(9600); // Open serial connection to report values to host
Wire.begin(); // Inicia el puerto I2C
RTC.begin(); // Inicia la comunicación con el RTC
Serial.println("");
}
void loop()
{
fecha();
delay(1000);
tem_hum();
}
void fecha()
{
DateTime now = RTC.now(); // Obtiene la fecha y hora del RTC
Serial.print(now.year(), DEC); // Año
Serial.print('/');
Serial.print(now.month(), DEC); // Mes
Serial.print('/');
Serial.print(now.day(), DEC); // Dia
Serial.print(' ');
Serial.print(now.hour(), DEC); // Horas
Serial.print(':');
Serial.print(now.minute(), DEC); // Minutos
Serial.print(':');
Serial.print(now.second(), DEC); // Segundos
Serial.println();
}
void tem_hum()
{
float temperatura;
float humedad;
temperatura = sht1x.readTemperatureC();
humedad = sht1x.readHumidity();
Serial.print("Temperatura: ");
Serial.print(temperatura, DEC);
Serial.print(" C");
Serial.print(" Humedad: ");
Serial.print(humedad);
Serial.println("% ");
}
Tengo claro que cada dispositivo debe contar con una direccion pero no comprendo como señalar en las librerias o en codigo que direccion que corresponde a cada dispositivo, RTC y Sensor. Realice un escaneo del bus con el codigo I2CScanner y solo detecta la direccion 80. este es el resultado.
I2CScanner ready!
starting scanning of I2C bus from 1 to 100...
addr: 1 addr: 2 addr: 3 addr: 4
addr: 5 addr: 6 addr: 7 addr: 8
addr: 9 addr: 10 addr: 11 addr: 12
addr: 13 addr: 14 addr: 15 addr: 16
addr: 17 addr: 18 addr: 19 addr: 20
addr: 21 addr: 22 addr: 23 addr: 24
addr: 25 addr: 26 addr: 27 addr: 28
addr: 29 addr: 30 addr: 31 addr: 32
addr: 33 addr: 34 addr: 35 addr: 36
addr: 37 addr: 38 addr: 39 addr: 40
addr: 41 addr: 42 addr: 43 addr: 44
addr: 45 addr: 46 addr: 47 addr: 48
addr: 49 addr: 50 addr: 51 addr: 52
addr: 53 addr: 54 addr: 55 addr: 56
addr: 57 addr: 58 addr: 59 addr: 60
addr: 61 addr: 62 addr: 63 addr: 64
addr: 65 addr: 66 addr: 67 addr: 68
addr: 69 addr: 70 addr: 71 addr: 72
addr: 73 addr: 74 addr: 75 addr: 76
addr: 77 addr: 78 addr: 79 addr: 80 found!
addr: 81 addr: 82 addr: 83 addr: 84
addr: 85 addr: 86 addr: 87 addr: 88
addr: 89 addr: 90 addr: 91 addr: 92
addr: 93 addr: 94 addr: 95 addr: 96
addr: 97 addr: 98 addr: 99 addr: 100
done