Un proyecto que realize, y necesito algunos cambios

Se trata de una maqueta para demostrar como se puede automatizar una casa.
Realice esta pequeña maqueta, con 2 habitaciones, baño, cocina y living.
Afuera de la casa coloque unas luces rgb, para darle un buen aspecto y es aqui donde se me complica y creo que al encontrar la solucion podria resolver muchas cosas.
Hice la aplicacion en appinventor. la Sgte:

Coloque los botones para cada espacio de la casa, habitacion, baño, etc. con dos botones uno para encender otro para apagar. Queria ver si queda mejor un solo boton, que encienda o apague de un solo boton.
Luego realice una matriz de colores, para cambiar el color de las luces de afuera, pero aqui esta el problema, tube que hacerlo de esta manera, poner los colores directamente porque mi idea era tenes 3 slider( 3 barras desplazables) para hacer cualquier color. pero al recibir el arduino datos desde el celular de 0 a 255 me causaba inteferencia y por ejemplo me prendia el led 13, y asi iba fallando por lo que decidi directamente programar cada color, pero estoy limitado a los que puse mientras que si tendria los 3 sliders podria formar los que quiera.




este es el codigo que use

#include <SoftwareSerial.h> //Librería que permite establecer comunicación serie en otros pins
 
//Aquí conectamos los pins RXD,TDX del módulo Bluetooth.
SoftwareSerial BT(52,53); //10 RX, 11 TX.
 
int ledred=3; //Pin LED Red
int ledgreen=5;//Pin LED Green
int ledblue=6; //Pin LED Blue
 
void setup()
{
 
  BT.begin(9600);  //Velocidad del puerto del módulo Bluetooth
 
  pinMode(13,OUTPUT);
   pinMode(12,OUTPUT);
   pinMode(11,OUTPUT);
   pinMode(10,OUTPUT);
   pinMode(9,OUTPUT);
   pinMode(8,OUTPUT);
   pinMode(7,OUTPUT);
   pinMode(ledblue,OUTPUT);
   pinMode(ledgreen,OUTPUT);
   pinMode(4,OUTPUT);
   pinMode(ledred,OUTPUT);
}
 
void loop()
{
        
    char c=BT.read();
         if(c=='1') digitalWrite(13,HIGH);
         if(c=='2') digitalWrite(12,HIGH);
         if(c=='4') digitalWrite(11,HIGH);
         if(c=='7') digitalWrite(10,HIGH);
         if(c=='8') digitalWrite(9,HIGH);
         if(c=='9') digitalWrite(8,HIGH);      
         if(c=='a') digitalWrite(7,HIGH); 
         if(c=='0') digitalWrite(4,HIGH); 
         if(c=='i') digitalWrite(4,LOW); 
         if(c=='b') digitalWrite(13,LOW);
         if(c=='c') digitalWrite(12,LOW);
         if(c=='d') digitalWrite(11,LOW);
         if(c=='e') digitalWrite(10,LOW);
         if(c=='f') digitalWrite(9,LOW);
         if(c=='g') digitalWrite(8,LOW);
         if(c=='h') digitalWrite(7,LOW); 
         if(c=='j') digitalWrite (ledred,LOW),digitalWrite (ledgreen,LOW),digitalWrite (ledblue,LOW);
         if(c=='k') digitalWrite (ledred,HIGH),digitalWrite (ledgreen,LOW),digitalWrite (ledblue,LOW);
         if(c=='l') digitalWrite (ledred,LOW),digitalWrite (ledgreen,HIGH),digitalWrite (ledblue,LOW);
         if(c=='m') digitalWrite (ledred,LOW),digitalWrite (ledgreen,LOW),digitalWrite (ledblue,HIGH);
         if(c=='n') digitalWrite (ledred,HIGH),digitalWrite (ledgreen,LOW),digitalWrite (ledblue,HIGH);
         if(c=='o') digitalWrite (ledred,HIGH),digitalWrite (ledgreen,HIGH),digitalWrite (ledblue,LOW);
         if(c=='p') digitalWrite (ledred,LOW),digitalWrite (ledgreen,HIGH),digitalWrite (ledblue,HIGH);
         if(c=='q') digitalWrite (ledred,HIGH),digitalWrite (ledgreen,HIGH),digitalWrite (ledblue,HIGH);
        
    
}

No eres el mismo que pedia que con un boton cambiar de estado? Porque no pruebas en lugar de esto

if(c=='j') digitalWrite (ledred,LOW),digitalWrite (ledgreen,LOW),digitalWrite (ledblue,LOW);

usarlo asi

if(c=='j') {
   digitalWrite(ledred,LOW);
   digitalWrite(ledgreen,LOW);
   digitalWrite (ledblue,LOW);
}

Si el mismo. Es que ese no es mi problema, mi problema surgue al insertar 3 sliders..se mezclan los codigos al manejar valores entre 0 y 255. Estube viendo como funciona el ardudroid nose si la conoces. Me vendria de 10. puso sliders para cada salida pwm, pero al mismo tiempo puede encender o apagar y controlar normalmente los otros pines digitales. Vi que utiliza serial.flush, tiene algo que ver? no soy experto trato de entender algo, pero qme quede trabado. de ultima lo dejo asi como esta, porque si funciona pero me gustaria lograr resolver mi duda. ahora le quiero agregar un sensor pir, y que poniendo un password en la app active la alarma en este caso el PIR y ante cualquier moviemiento active una sirena o parpadeen todas las luces..

El problema podria ser de saturacion ,el slider envia un evento cada vez que cambia de valor ,en donde se programa el envio de los datos,lo que unido a la velocidad de proceso de los moviles actuales ,el simple hecho de cambiar el slider de 10 a 200 por ejemplo ,genera una gran cantidad de eventos y envio de datos que podrian saturar el buffer.la solucion podria ser ligar el envio de datos a un timer (es decir cada x tiempo ,lee los valores de los slider )y no al evento de cambio de valor (no se si con app inventor se puede hacer) .Tambien tendrias que modificar el sketch para poder recibir valores de mas de un caracter .

yo veo el problema en mandar el valor, el Arduino no sabe si p. e. que el 1 del 123 del slider no es un 1 para encender la salida 13

has de usar un protocolo, p. e. en vez de 1 mandas "ledon=13", o "rojo=123" de esta manera no se confunde el Arduino,

Este es el codigo, si ejecuto por separado funcionan perfectamente, osea los 3 sliders solo controlando nada mas que los leds rgb con la app funcionan de diez.
combinandolos, y nose si los habre con¿mbinado bien, falla este es el codigo

#include<SoftwareSerial.h>

// se define al Pin2 como RX, Pin3 como TX
SoftwareSerial BT(2,3);

int habitacion1=13;
int habitacion2=12;
int habitacion3=11;
int cocina=10;
int frente1=9;
int frente2=8;
int motor=7;
int ledblue=6;//pin azul
int ledgreen=5;//pin verde
int opcion1=4;
int ledred=3; //Pin LED Rojo



void setup()
{      

//inicializa la comunicacion serial  
   Serial.begin(9600);
   BT.begin(9600);
   
//se configura los pines de entrada y salida   
   pinMode(habitacion1,OUTPUT);
   pinMode(habitacion2,OUTPUT);
   pinMode(habitacion3,OUTPUT);
   pinMode(cocina,OUTPUT);
   pinMode(frente1,OUTPUT);
   pinMode(frente2,OUTPUT);
   pinMode(motor,OUTPUT);
   pinMode(opcion1,OUTPUT);
   pinMode(ledred,OUTPUT);
   pinMode(ledgreen,OUTPUT);
   pinMode(ledblue,OUTPUT);
   
// inicializa el estdo de los LEDs   
   pinMode(habitacion1,LOW);
   pinMode(habitacion2,LOW);
   pinMode(habitacion3,LOW);
   pinMode(cocina,LOW);
   pinMode(frente1,LOW);
   pinMode(frente2,LOW);
   pinMode(motor,LOW);
   pinMode(opcion1,LOW);
   pinMode(ledred,LOW);
   pinMode(ledgreen,LOW);
   pinMode(ledblue,LOW); 
}

void loop() 
{
  //Cuando haya datos disponibles
    while (BT.available()>0)
    {
        int red = BT.parseInt(); //Leemos el primer valor entero (Red) y lo almacenamos en la variable
 
        int green = BT.parseInt(); //Leemos el segundo valor entero (Green) y lo almacenamos en la variable
 
        int blue = BT.parseInt(); //Leemos el último valor entero (Blue) y lo almacenamos en la variable
 
        //Cuando lea el carácter fin de línea ('\n') quiere decir que ha finalizado el envío de los tres valores
        if (BT.read() == '\n')
        {
          //Enviamos los valores de los tres colores al LED RGB através de PWM
          analogWrite(ledred,red);
          analogWrite(ledgreen,green);
          analogWrite(ledblue,blue);
        }
        char c=BT.read();
         if(c=='1') digitalWrite(habitacion1,HIGH);
         if(c=='2') digitalWrite(habitacion1,HIGH);
         if(c=='3') digitalWrite(habitacion1,HIGH);
         if(c=='4') digitalWrite(frente1,HIGH);   
         if(c=='5') digitalWrite(frente2,HIGH);
         if(c=='6') digitalWrite(motor,HIGH);
         if(c=='7') digitalWrite(opcion1,HIGH);
         if(c=='8') digitalWrite(habitacion1,LOW);
         if(c=='9') digitalWrite(habitacion1,LOW);
         if(c=='a') digitalWrite(habitacion1,LOW);
         if(c=='b') digitalWrite(frente1,LOW);   
         if(c=='c') digitalWrite(frente2,LOW);
         if(c=='d') digitalWrite(motor,LOW);
         if(c=='e') digitalWrite(opcion1,LOW);
        
  }

          
   
}

Estas separando los colores con comas por ejemplo? porque si le mandas 200225100 lo entendera como un unico int (y en este caso se desbordaria ya que supera la capacidad de int) y no quedaria ningun valor para los demas colores.

Lo que quiero hacer es controlar la intensidad de 0 a 255 con un slider, y tambien prender o apagar otros leds, pero tiene problemas y no funciona! este es el codigo basico.

#include <SoftwareSerial.h> //Librería que permite establecer comunicación serie en otros pins
 
//Aquí conectamos los pins RXD,TDX del módulo Bluetooth.
SoftwareSerial BT(52,53); //10 RX, 11 TX.
 
int ledred=3; //Pin LED Red
int ledgreen=5;//Pin LED Green
int ledblue=6; //Pin LED Blue

 
void setup()
{
 
  BT.begin(9600);  //Velocidad del puerto del módulo Bluetooth
 
  pinMode(ledred,OUTPUT);
  pinMode(ledgreen,OUTPUT);
  pinMode(ledblue,OUTPUT);
  pinMode(13,OUTPUT);
  
 
}

void loop()

{    
         char c=BT.read();
        
         if(c=='a') digitalWrite(13,HIGH);
         if(c=='b') digitalWrite(13,LOW);
           

          
         while (BT.available()>0)
    {
        int red = BT.parseInt(); //Leemos el primer valor entero (Red) y lo almacenamos en la variable
 
        int green = BT.parseInt(); //Leemos el segundo valor entero (Green) y lo almacenamos en la variable
 
        int blue = BT.parseInt(); //Leemos el último valor entero (Blue) y lo almacenamos en la variable
 
        //Cuando lea el carácter fin de línea ('\n') quiere decir que ha finalizado el envío de los tres valores
        if (BT.read() == '\n')
        { 
          //Enviamos los valores de los tres colores al LED RGB através de PWM
          analogWrite(ledred,red);
          analogWrite(ledgreen,green);
          analogWrite(ledblue,blue);
          
           

        }
        }
        
  }

A ver ,puedo ver el codigo del arduino ,pero no tengo ni idea de la cadena de caracteres que manda la aplicacion que has hecho con app inventor,por eso te pregunto....segun lo que mande la aplicacion, el codigo del arduino puede estar bien o no.

Ok. este es el diagrama del appinventor. es la configuracion de un slider pero es la misma para los tres.

Nunca he trabajado con app Inventor,para cacharrear con Android uso Basic4Android ya que usa un lenguaje parecido al Visual Basic que tengo mas por la mano que el farragoso java pero bueno....parece que en cada cambio de slider sea el que sea modificas los tres a la vez,no tiene sentido si por ejemplo modificas el rojo ,volver a mandar los datos para el azul y el verde ya que estos solo van a cambiar cuando muevas su correspondiente slider.Me imagino que esto es asi por que recoges los tres valores a la vez,y tal vez por eso los problemas ,cada vez que se produce un evento se mandan datos innecesarios .yo miraria la manera de hacer una especie de comando ,que puede ser un array de char o un String ,para recibir ordenes tipo "r120" -> red 120 o "g200" -> green 200.Recibes el comando ,ya sabes que el primer caracter va a ser el color que tienes que modificar y el numero a continuacion el valor.

jose aqui esta toda la explicacion: http://diymakers.es/crear-app-para-arduino-con-app-inventor/.

lucasdanielisa: jose aqui esta toda la explicacion: http://diymakers.es/crear-app-para-arduino-con-app-inventor/.

pues esta super bien explicado si el software en el arduino y en el mobil lo tienes exactamente igual que en ejemplo que pones,debe ser algo que no has conectado correctamente ,de todas maneras tu codigo no es igual,a no ser que hayas modificado la app en el mobil:

void loop()

{    
         char c=BT.read();                          // estas tres lineas no estan en el ejemplo  y estan      
         if(c=='a') digitalWrite(13,HIGH);    // leyendo caracteres del serial
         if(c=='b') digitalWrite(13,LOW);
   
         while (BT.available()>0)

Ese codigo me anda muy bien. pero solamente con los 3 sliders, para manejar 3 salidas pwm del arduino 3,5y6. El problema esta que quiero agregar botones, para panejar el resto de las salidas digitales, por ejemplo prender un led en la salida 13, 12 11 10 9 8 7 4 2. Y no funciona!

lucasdanielisa: Ese codigo me anda muy bien. pero solamente con los 3 sliders, para manejar 3 salidas pwm del arduino 3,5y6. El problema esta que quiero agregar botones, para panejar el resto de las salidas digitales, por ejemplo prender un led en la salida 13, 12 11 10 9 8 7 4 2. Y no funciona!

volvemos a lo mismo ,ese codigo tal como lo tienes en arduino solo te vale para capturar los colores de los sliders y alguna letra que venga despues ,pero si quieres que haga mas cosas deberas modificar tanto el codigo de arduino como el de la aplicacion y 'fabricarte' o diseñarte tu propio protocolo de ordenes,es decir cuando el arduino reciba un comando debe poder diferenciar que control o view del mobil lo envia y actuar en consecuencia,y esto solo puedes hacerlo como te puse antes :

"yo miraria la manera de hacer una especie de comando ,que puede ser un array de char o un String ,para recibir ordenes tipo "r120" -> red 120 o "g200" -> green 200.Recibes el comando ,ya sabes que el primer caracter va a ser el color que tienes que modificar y el numero a continuacion el valor." Mirate este link,es para una aplicacion de pago pero si observas el codigo de arduino ,veras que crea un array de caracteres donde almacena nombre y valor y luego segun lo que haya recibido pues hace una cosa u otra: http://www.josematm.com/controla-tu-arduino-desde-el-movil/

Hola estimados, me gustaria tener su ayuda, estoy realizando un proyecto de encendido y apagado de luminarias con app inventor2 y arduino, necesito su ayuda ya que necesito implementar el encendido/apagado automatico estableciendo el tiempo, osea a que hora se encienda y a que hora se pueda apagar una luminraria(prograamr el encendido/apagado automatico de las luminarias) cualquier ayuda les quedo muy agardecido y si pueden compartir la información, favor enviar a ricajav0106@hotmail.com

Viste la fecha de la última respuesta? 03-12-2014, 19:27
Recibiste una advertencia que te indicaba que el post no tenía movimientos hacía mas de 120 días que ignoraste.

Por favor, lee las normas del foro y luego crea un hilo nuevo con tu consulta.