domingo, 11 de diciembre de 2016

Arduino Bluetooth y Android Studio (1/2)


Comunicación de ARDUINO con SMARTPHONE via Bluetooth

INTRODUCCIÓN:
Además de las desiciones, esperas (para recibir mis compras) y pequeñas pruebas de cada uno de los componentes y luego de pasar por muchas luchas con los Microprocesadores (Caso: PIC F18-XXX).
Junté todo lo aprendido a golpes y preguntas sin respuestas claras (para mi poco conocimiento) en la Web y ya no recuerdo de que modo y como llegué a conocer el mundo ARDUINO.
fue esto lo que terminó de hacerme sentir realmente útil frente a este nuevo mundo de la Electrónica Digital.
Fue así que terminé de comprender y encontrar todas las respuestas que me hacía detrás de la compra de un simple módulo que me permitía hacer y aplicar muchisimas aplicaciones. Muchas de ellas (inimaginables para mi) y que luego de unos días lograba concretar.
Lo que veremos en este Post no es otra cosa que lo explicado en mil y una formas distintas, lo que nos muestran en videos sin decirnos como lo lograron, lo que explican y explican mareandonos llevándonos de un lado para el otro. Diciendonos lo sencillo que es hacer y "MANOS A LA OBRA".
Pero que al final de todo esto ¡NADA FUNCIONA!
Claro Nada funciona porque omitieron explicar detalles creyendo que ya lo sabemos, o porque simplemente consideraron que no hacía falta aclarar o explicar.
Bien de una cosa te juro y aseguro, esto esta hecho para nosotros, los que necesitamos que nos ayuden a ¡ARRANCAR! para que a partir de esto y cuando queramos modificarlo y no funciones comencemos a aprender de verdad. Bueno, ahora como dicen TODOS!!! Manos a la OBRA!.


HARDWARE: Para esta comunicación hemos de usar:
Placa Arduino UNO, NANO, MEGA.
Módulo Bluetooth HC-05
Led colores Azul y Rojo
Sensor DHT-11
ProtoBoard con 8 o 10 Cables para conectar cada múdulo con nuestro Arduino.


SOFTWARE:
Arduino con su editor (.INO)
Android Studio para la realización de la Aplicación (.APK)

Desarrollo de todo
Este código de Arduino permite que con mi Smartphone via Bluetooth pueda:
- Enviarle un texto. Este puede ser una clave de acceso por ejemplo.
- Presionar Tecla Led ON y Tecla OFF para Encender y Apagar un Led de color Azul.
- Por medio de una Barra de Corrimiento Enciendo, Apago y le doy mayor o menor densidad a un Led de color Rojo.
- Presiono una Tecla de nombre Temperatura y me envía la Temp. y Humedad captada por el Sensor DHT-11.


Codigo del Arduino:

// Creado el 11/12/2016 Combinado.INO
// Permite Encender/Apagar LED Azul
// Controla LED Rojo con PWN
// Informa la Temperatura y Humedad con DHT11

#include 

#include 
SoftwareSerial BTxT(10, 11); // Crea nueva conexion- Pin10(RX) a TX y Pin11(TX) a RX

/*-----( Declaro Variables )-----*/
dht DHT;
#define DHT_PIN 3
String Temx; // Variable que contiene Temperatura
String Humx; // Variable que contiene Humedad
String Mensaje;  // Variable de cadena de caracteres para el mensaje
String DigitoEnvio; // La libreria Envia una cadena de a un caracter por vez 
int Bandera; // Bandera de Recepción de mensajes

void setup()
{
  Serial.begin(9600);  // Iniciamos el puerto que esta conectado al PC a 9600 Baudios
  BTxT.begin(9600);    // Iniciamos el puerto nuevo Serial_2 a 9600 Baudios
  
  Serial.println("PROGRAMA Led Azul y Rojo con Sensor DHT11 para Tolba Con Bluetooth");
  Serial.println();

  pinMode(10, INPUT);  // RxD Recepcion
  pinMode(11, OUTPUT); // TxD Transmicion
  pinMode(13, OUTPUT); // Configura Pin 13 como Salida
  pinMode(5, OUTPUT);  // Configura Pin 05 como Salida PWN
  pinMode(3, OUTPUT);  // Configura Pin 03 como Salida Temperatura/Humedad
}

void loop() {

vuelta:
  Mensaje = ""; // Preparamos el mensaje ha recibir hacia el PC
  Bandera = 0;  // Recepcion de mensajes
  
  // Mientras que lleguen caracteres por el puerto BTxT (serial_2)
  while (BTxT.available()) {
     char c = BTxT.read();  // Lee los caracteres uno a uno con la variable c
     delay(10);
     Mensaje += c;          // Almacena la suma de caracteres en el mensaje
     Bandera = 1;
  }

  if (Bandera == 1) {
     Mensaje.trim();
     Serial.println("Hemos recibido un Mensaje: ["+Mensaje+"]"); 
  } else {
     goto vuelta;
  }
  
  if (Mensaje == "A" || Mensaje == "B") {
      Serial.println("Recibimos esta Orden: "+Mensaje);
      if (Mensaje == "A"){
          digitalWrite(13,1);   // Enciende LED en Pin 13
          DigitoEnvio = "A~";
          BTxT.println(DigitoEnvio);
      } else {
          digitalWrite(13,0);   // Apaga LED en Pin 13 
          DigitoEnvio = "B~";
          BTxT.println(DigitoEnvio);
      }
      delay(10);
      Serial.println("Respuesta: " + DigitoEnvio);        
      goto vuelta;
  }
  
  if (Mensaje == "TH"){
     Tolvas();
     Serial.println("Recibimos este Texto "+Mensaje);
     delay(100);
     BTxT.println("TH-"+Temx+"-"+Humx+"~");
     goto vuelta;
  }

  if (Mensaje.substring(0,3) == "TXT"){
     int desde = 4;
     int hasta = Mensaje.length();
     Mensaje = Mensaje.substring(desde, hasta);
     Serial.println("Recibimos este Texto "+Mensaje);
     BTxT.println("Enviaste "+Mensaje+"~");
     goto vuelta;
  }

  if ((Mensaje.toInt() >= 0) && (Mensaje.toInt() < 256)) {
      Serial.println("Recibimos este Numero: "+Mensaje);
      if (Mensaje.toInt() < 65){
          analogWrite(5,0);
          BTxT.println("Led Rojo OFF~");
      } else {
          analogWrite(5, Mensaje.toInt());
//          Esta linea molesta más de lo que sirve
//          BTxT.println(Mensaje+"~");
      }
      delay(10);
      Serial.println("PWM Recibido ["+Mensaje+"]");
  }
}

void Tolvas(){
  int chk = DHT.read11(DHT_PIN);
  delay (100);
  chk = DHT.read11(DHT_PIN);
  delay (1000);
  switch (chk)
  {
    case DHTLIB_OK:  
        Serial.print("OK \t");
        break;
    case DHTLIB_ERROR_CHECKSUM: 
        Serial.print("Error en el Checksum \t");
        break;
    case DHTLIB_ERROR_TIMEOUT: 
        Serial.print("Error Tiempo de Salida \t");
        break;
    case DHTLIB_ERROR_CONNECT:
        Serial.print("Error de Coneccion \t");
        break;
    case DHTLIB_ERROR_ACK_L:
        Serial.print("Error Ack Bajo (Low)/Falta 5v \t");
        break;
    case DHTLIB_ERROR_ACK_H:
        Serial.print("Error Ack Alto (High) \t");
        break;
    default:
        Serial.print("Error Desconocido \t");
        break;
  }
  // DISPLAY DATA
  Temx = "";
  Humx = "";
  Serial.println(DHT.temperature, 1);
  Serial.println(DHT.humidity, 1);
  Temx = DHT.temperature;
  Humx = DHT.humidity;  
  delay (100);
  return Temx, Humx;
}
 
OBSERVACIONES:
No tengo duda alguna, que este codigo luego de analizarlo, podremos conincidir que sobran muchas cosas y que se podía hacer más "técnico" de otros modos y con otros comandos. No es el objetivo de ello. Este programa primario enseña como se comporta cada componente y le dice a TODOS que esta pasando a cada momento. Esa fue la necesidad de hacerlo de este modo tan básico de Comandos y Estructuras.

En la próxima entrega veremos el Desarrollo de la aplicación (.APK) realizada con Android Studio.
Les deseo lo mejor!

sábado, 15 de febrero de 2014

Ejercicio 002

El siguiente ejercicio me permite modificar
- El tamaño,
- Forma,
- Color y Contenido de un DIV
Además cambia el Texto dentro de un Botón










<!DOCTYPE html>

<!--Permite cambiar la forma de un Div existente, su contenido y el contenido del Boton de la pagina -->

<html>

<head>
<style type="text/css">
#caja { width:200px; height:60px; background-color:green; color:white; font-size:15px; text-align:center; }
</style>
</head>

<body>
   <div id="caja">Aqui esta el div rojo </div>
   <br>
   <input id="miboton" type="button" onClick="cambios()" value="Clic aca para los cambios del div rojo arriba" />
</body>

<script language="javascript">
function cambios(){
document.getElementById("caja").style.width = "500px";
document.getElementById("caja").style.height = "450px";
document.getElementById("caja").style.fontSize = "62px";
   document.getElementById("caja").style.textAlign = "center";
   document.getElementById("caja").style.backgroundColor = "#FFB3B3";
   document.getElementById("caja").style.border = "4px dashed red";
   document.getElementById("caja").style.color = "black";
   document.getElementById("caja").innerHTML="Se puede insertar Estilo y contenido de elementos en un Div";
   document.getElementById("miboton").value = "Y funciona";
   }
</script>

</html>










viernes, 14 de febrero de 2014

Ejercicio 001

Esta codificación permite crear una galería de imágenes en una página HTML5 por medio de una Barra de Corrimiento Horizontal (Scroll). Una vez que presionamos el Botón para repetir la acción. Limpia el Vector y vuelve a cargar todo de nuevo.












<!doctype html>
<html lang="es">
<!--
Te permite ver (n) imagenes en tira de acuerdo a tus necesidades
Si presiono el boton... LIMPIA LOS VECTORES y COMIENZA DE NUEVO
Galeria de imagenes
Cadena >>>>>>>>>>>>>>>>>>>> file:///C:/barra/img01.jpg
-->

<head>
<meta charset="utf-8">
<title>Barra Horizontal V.05</title>
</head>

<body onload="agregar()">

<style>
/* Barra Horizontal de Corrimiento */
.barra-panel {overflow:auto; position:absolute; left:10px; top:80%; width:98.5%; right:20px; height:140px; z-index:1; }
.borde-Panel {border: 1px solid RGB(0,0,0); background: RGB(215,201,168); }
.punta-Izq {border-top-left-radius: 5px; }
.punta-Der {border-top-right-radius: 5px; }
.barra-Scroll {width: 4500px; } /* Aca entran 20 fotos con un incremento de 130px por fotograma +/- */
.contiene-Item img {border: 1px solid RGB(0,0,0); width:150px; height:100px; float:left; margin: 10px; }
</style>

<div class="barra-panel borde-Panel punta-Izq punta-Der">
<div class="barra-Scroll" id="tira">
</div>
</div>
<input type="button" onclick="agregar()" value="Dame clic"/>
</body>

<script>
var bandera=0; // impide que limpie el vector recien creado al inicio del proceso
    var kT = 11; // Cantidad de Imagenes
    var misImagenes= new Array(kT); // Vector con las imagenes
    // Completo el Vector con 22 imagenes
    for (k = 0; k < kT; k++) {
        if(k<10) {misImagenes [k] ="./Imagenes/img0"+k+".jpg";} else {
        misImagenes[k] ="./Imagenes/img"+k+".jpg";}
    };

function agregar() {
// **** Limpiar y recomenzar *****************************************************
if (bandera!=0) {
var kT=11;
for (k = 0; k < kT; k++) {
var papa = document.getElementById("P0"+k);
papa.parentNode.removeChild(papa);
}
};
// **** Carga las Imagenes *******************************************************
var kT=11;
for (k = 0; k < kT; k++) {
var elemento = document.createElement("div");
elemento.id="P0"+k;
elemento.className = "contiene-Item img";
elemento.innerHTML = "<img id=H0"+k+" src="+misImagenes[k]+">";
document.getElementById("tira").appendChild(elemento);
// document.getElementById('padre').insertBefore(nuevo_parrafo,segundo_p);
}
bandera=1;
};
</script>


</html>