Saludos terricolas----
estoy haciendo un proyecto en donde tengo, entre otros sensores y leds,... un sensor de temperatura y humedad... hasta ahora he podido hacer via bluetooth con app inventor que me encienda y apague ciertos puertos o leds... lo que quiero hacer ahora es que en la app me muestre los indices de temperatura y humedad .. he logrado que los muestre en arduino, en la pantalla lcd.. pero no logro los muestre en una app.... gracias a quienes me puedan ayudar o tengan algun totorial simple que enseñe como mostrar datos de sensores....
por lo pronto les muestro como tengo mis codigos..
CODIGO ARDUINO:
#include <Wire.h> // incluye libreria para interfaz I2C
#include <RTClib.h> // incluye libreria para el manejo del modulo RTC
#include <LiquidCrystal_I2C.h> // Libreria para LCD
#include <DHT.h> // importa la Librerias DHT
#include <DHT_U.h>
#include <SoftwareSerial.h> // libreria que permite establecer pines digitales
// Definimos el pin digital donde se conecta el sensor DHT TEMPERATURA HUMEDAD
#define DHTPIN 2
// Dependiendo del tipo de sensor
#define DHTTYPE DHT11
SoftwareSerial miBT(11, 12); // pin 11 como RX, pin 12 como TX
RTC_DS3231 rtc; // crea objeto del tipo RTC_DS3231
bool evento_inicio = true; // variable de control para inicio de evento con valor true
bool evento_fin = true; // variable de control para finalizacion de evento con valor true
# define RELE 4 // CINTA LED (+) - pin digital 4
int FOCOTEMP = 5; // LED / FOCO TEMPERATURA (+) - ENCIENDE O APAGA SEGUN TEMPERATURA
int TRIG = 10; //DISTANCIA ULTRASONIDO
int ECHO = 9;
int LEDROJO = 3;
int LEDAMARILLO = 6;
int DURACION;
int DISTANCIA;
/// BLUETOOTH
char DATO = 0; // variable para almacenar caracter recibido
LiquidCrystal_I2C lcd(0x27, 16, 2); //PANTALLA LCD)
// defino los nuevo caracter o imagenes
byte letra1[8] = { B11111, B10101, B10101, B10001, B10001, B10101, B10101, B11111 }; // HUMEDAD
byte letra2[8] = { B11111, B10001, B11011, B11011, B11011, B11011, B11011, B11111 }; // TEMPERATURA
byte letra3[8] = { B00000, B10001, B11111, B11111, B11111, B11111, B11111, B00000 }; // NIVEL LLENO
byte letra8[8] = { B00000, B10001, B10001, B10001, B10001, B10001, B11111, B00000 }; // nivel vacio
byte letra4[8] = { B01110, B11111, B11111, B11011, B11011, B01110, B01110, B00100 }; // light off
byte letra5[8] = { B01110, B10001, B10001, B10101, B10101, B01110, B01110, B00100 }; // light on
byte letra6[8] = { B11100, B10100, B11100, B00000, B00111, B00100, B00100, B00111 }; // GRADOS CELCIUS
byte letra7[8] = { B10010, B00100, B01000, B10010, B00000, B01010, B01110, B01010 }; // % HUMEDAD
///DHT11
int SENSOR = 2; // pin DATA de DHT22 a pin digital 2
int TEMPERATURA;
int HUMEDAD;
DHT dht(DHTPIN, DHTTYPE); // creacion del objeto, cambiar segundo parametro // por DHT11 si se utiliza en lugar del DHT22
///fin DHT22
void setup(){
//pruebas
pinMode(LEDAMARILLO, OUTPUT); //pin 6 led amarillo LED
//bluetooth
miBT.begin(38400); // comunicacion serie entre Arduino y el modulo a 38400 bps
pinMode(LEDROJO, OUTPUT); // pin 3 como salida
// INICIAR DHT
dht.begin(); // inicializacion de sensor
// inicializar LCD:
lcd.begin();
lcd.backlight();
lcd.clear();
lcd.createChar(1, letra1); // asigna los nuevos caracteres por numeros
lcd.createChar(2, letra2);
lcd.createChar(3, letra3);
lcd.createChar(4, letra4);
lcd.createChar(5, letra5);
lcd.createChar(6, letra6);
lcd.createChar(7, letra7);
lcd.createChar(8, letra8);
//DISTANCIA ULTRASONIDO
pinMode (TRIG, OUTPUT);
pinMode (ECHO, INPUT);
pinMode (LEDROJO, OUTPUT);
Serial.begin(9600);
// CINTA LUZ LED
// FOCO TEMPERATURA (+)
pinMode(FOCOTEMP, OUTPUT); // pin 5 como salida FOCO TEMPERATURA
if (! rtc.begin()) { // si falla la inicializacion del modulo
Serial.println("Modulo RTC no encontrado !"); // muestra mensaje de error
while (1); // bucle infinito que detiene ejecucion del programa
}
//rtc.adjust(DateTime(__DATE__, __TIME__)); // funcion que permite establecer fecha y horario
// al momento de la compilacion. Comentar esta linea
}
void loop(){
// pruebas
pinMode(RELE, OUTPUT); // pin 4 como salida CINTA LUZ
//BLUETOOTH
if (miBT.available()){ // si hay informacion disponible desde modulo
DATO = miBT.read(); // almacena en DATO el caracter recibido desde modulo
if( DATO == '1' ) // si el caracter recibido es el numero 1
digitalWrite(LEDAMARILLO, !digitalRead(LEDAMARILLO)); // escribe valor opuesto al leido del LED rojo
}
//DISTANCIA ULTRASONIDO
digitalWrite(TRIG, HIGH);
delay(1);
digitalWrite(TRIG, LOW);
DURACION = pulseIn(ECHO, HIGH);
DISTANCIA = DURACION / 5.82;
Serial.println(DISTANCIA);
DateTime fecha = rtc.now(); // funcion que devuelve fecha y horario en formato
// DateTime y asigna a variable fecha
if ( fecha.hour() == 12 && fecha.minute() == 40 ){ // si hora = 14 y minutos = 30
if ( evento_inicio == true ){ // si evento_inicio es verdadero
digitalWrite(RELE, HIGH); // activa modulo de rele con nivel alto
Serial.println( "Rele encendido" ); // muestra texto en monitor serie
evento_inicio = false; // carga valor falso en variable de control
} // para evitar ingresar mas de una vez
}
if ( fecha.hour() == 12 && fecha.minute() == 45 ){ // si hora = 15 y minutos = 30
if ( evento_fin == true ){ // si evento_fin es verdadero
digitalWrite(RELE, LOW); // desactiva modulo de rele con nivel bajo
Serial.println( "Rele apagado" ); // muestra texto en monitor serie
evento_fin = false; // carga valor falso en variable de control
} // para evitar ingresar mas de una vez
}
Serial.print(fecha.day()); // funcion que obtiene el dia de la fecha completa
Serial.print("/"); // caracter barra como separador
Serial.print(fecha.month()); // funcion que obtiene el mes de la fecha completa
Serial.print("/"); // caracter barra como separador
Serial.print(fecha.year()); // funcion que obtiene el año de la fecha completa
Serial.print(" "); // caracter espacio en blanco como separador
Serial.print(fecha.hour()); // funcion que obtiene la hora de la fecha completa
Serial.print(":"); // caracter dos puntos como separador
Serial.print(fecha.minute()); // funcion que obtiene los minutos de la fecha completa
Serial.print(":"); // caracter dos puntos como separador
Serial.print(fecha.second()); // funcion que obtiene los segundos de la fecha completa
if ( fecha.hour() == 2 && fecha.minute() == 0 ){ // si hora = 2 y minutos = 0 restablece valores de
evento_inicio = true; // variables de control en verdadero
evento_fin = true;
}
// Imprimir en la primera línea del LCD
lcd.setCursor(0,0);
lcd.clear();
lcd.print(fecha.day()); // funcion que obtiene el dia de la fecha completa
lcd.print("/"); // caracter barra como separador
lcd.print(fecha.month()); // funcion que obtiene el mes de la fecha completa
lcd.print("/"); // caracter barra como separador
//lcd.print(fecha.year()); // funcion que obtiene el año de la fecha completa
lcd.print(fecha.year() % 100);
lcd.print(" "); // caracter espacio en blanco como separador
lcd.print(fecha.hour()); // funcion que obtiene la hora de la fecha completa
lcd.print(":"); // caracter dos puntos como separador
lcd.print(fecha.minute()); // funcion que obtiene los minutos de la fecha completa
lcd.print(":"); // caracter dos puntos como separador
lcd.print(fecha.second()); // funcion que obtiene los segundos de la fecha completa
//loop DHT
TEMPERATURA = dht.readTemperature(); // obtencion de valor de temperatura
HUMEDAD = dht.readHumidity(); // obtencion de valor de humedad
Serial.print("Temperatura: "); // escritura en monitor serial de los valores
Serial.print(TEMPERATURA);
Serial.print("|");
Serial.print(" Humedad: ");
Serial.println(HUMEDAD);
lcd.setCursor(0, 1); // Posicion TEMPERATURA
lcd.print(TEMPERATURA);
lcd.write(byte(6));
lcd.print(" ");
lcd.print(HUMEDAD);
lcd.write(byte(7));
lcd.print(" ");
if (TEMPERATURA < 24){
digitalWrite(FOCOTEMP, HIGH);
}
else{
digitalWrite(FOCOTEMP, LOW);
}
// LOOP DISTANCIA
if (DISTANCIA >=40){
digitalWrite(LEDROJO, HIGH);
lcd.write(byte(8));
lcd.print(DISTANCIA);
lcd.print(" ");
}
else{
digitalWrite(LEDROJO, LOW);
lcd.write(byte(3));
lcd.print(DISTANCIA);
lcd.print(" ");
}
if( digitalRead(RELE) ){ //if high
lcd.write(byte(5));
}
else{
lcd.write(byte(4));
}
delay(1000);
}
ACA COMO TENGO EL APP INVENTOR...
LO QUE QUIERO ES QUE ME MUESTRE LOS DATOS DONDE APARECE "text for lebel8... 10 y 12"