Prender ya apagar un led con un solo boton desde appinventor

Que tal, queria saber como encender y apagar un led por ejemplo pero con un solo boton desde android usando appinventor.
Ya logre hacerlo pero utilizando dos botones uno de encendido y otro de apagado, un boton envia un numero y el otro otro numero que los defino en arduino.
Lo que busco es tener un solo boton y prender o apagar..

usa una variable booleana asi

Esto en la definición de variables globales

boolean status = false;

luego en tu código que no posteaste agregas luego de recibir el comando del boton1, tienes toda una comparación proveniente del BT asi que yo a continuación de eso que llamaré recibidorPorBT

if (recibidoPorBT) {
   status = !status;  // cada vez que se presiona el boton y es leido via BT por tu arduino cambia el estado de ON a OFF y a ON otra vez
}

luego con esa variable status prendes apagas lo que quieras

Perdon, este es mi codigo, es mucha programacion por lo que uso dos botones para encender o apagar, en la ultima linea coloque el codigo que me pusiste, esta bien asi?.
estoy armando una casa para mostrar como se puede automatizar. Queria agregarle una alarma, me compre el sensor pir, me gustaria hacer un mini teclado en android y que cuando sea el codigo correcto que reciba arduino recien active el sensor..

#include <SoftwareSerial.h>

SoftwareSerial BT(0,1);
int ledred=3; //Pin rojo
int ledgreen=5;//Pin verde
int ledblue=6; //Pin azul
int analogPin = 0;//sensor
boolean status = false;
 
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') status = !status;  // cada vez que se presiona el boton y es leido via BT por tu arduino cambia el estado de ON a OFF y a ON otra vez

         
      
        
    
}

Si. Esta bien pero continua con lo que debe hacer?
Además hay errores varios
Me sorpende el uso de , para poner instrucciones seguidas sin llaves.

#include <SoftwareSerial.h>

SoftwareSerial BT(0,1);
int ledred=3; //Pin rojo
int ledgreen=5;//Pin verde
int ledblue=6; //Pin azul
int analogPin = 0;//sensor
boolean status = false;
 
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') {
            status = !status;  // cada vez que se presiona el boton y es leido via BT por tu arduino cambia el estado de ON a OFF y a ON otra vez
          
            if (status)
               //hago una tarea
             else
               // hago otra tarea      
        } // lo pongo dentro del if (c==q) para que se ejecute solo en ese momento.
    
}

Gracias por tu ayuda, no se mucho, pero trato de hacer lo que necesito viendo otros ejemplos no entendi cuando me dijiste: Me sorpende el uso de , para poner instrucciones seguidas sin llaves.
Esta mal? porque ami si mi funciona, como seria la manera correcta?

Nooo no esta mal, y justamente por eso, porque no lo había visto me sorpendió y te estaba llamando la atención por ello hasta que me di cuenta que era algo que desconocía.
Te sirvió mi sugerencia?

todavia no lo probe, se me ocurrio separar por coma porque tenia que hacer una aplicacion para controlar un tablero deportivo que estaba echo con pic. Entonces necesita enviar codigo en binario 0001,0010,0011..y asi, jeje.
Con lo que me sugeriste, y si sirve, me reduce la mitad del codigo,espero que funcione!

A mi maqueta le coloque unas luces rgb, tiene 2 piezas, un baño la cocina y el living.
Quise programarla para que desde appinventor a traves de 3 sliders, eliga el color que quiera, pero a la hora de programar la salida pwm de los 3 sliders se mezclaba con las salidas digitales para las habitaciones y demas espacios. Porque el slider manejaba el valor de 0 a 255. entonces opte por hacer un cuadro de colores directamente y que por ejemplo para hacer un blanco las 3 salidas esten altas, ahi es donde use la coma para hacer diferentes combinaciones.
este es el codigo que no me funciono.

#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);
        
  }

          
   
}

Vi la aplicacion de ardudroid, esta genial, maneja todo por separado todas las salidas pwm se pueden controlar, y tambien se pueden hacer on off sin perturbar el sistema.
vi en el codigo que maneja el serial.flush pero la verdad que no entiendo

buenos dias,

me encuentro realizando un con sensor de nivel análogo + bluetooth y una app inventor que estoy creando..
lo que quiero es poder utilizar un solo botón que me permita que cambie de color cuando el sensor análogo cambie su estado.

este es código arduino que estoy desarrollando:

int sensor1=12; //Indicamos el pin al que tenemos conectado el sensor de nivel de alerta de liquido 11.
int led1=11; //Indicamos el pin al que tenemos conectado el led que indica alarma del sensor de alerta 11.

void setup() {

Serial.begin(9600); //iniciar el serial.
pinMode(sensor1,INPUT); //sensor de nivel de liquido
pinMode(led1, OUTPUT); //salida led

}

void loop() {

inData=""; //declaramos la variable inData como vacia para volverle a sumar los caracteres que recibimos del serial y luego compararla.
}
if(digitalRead(sensor1)==HIGH) //declaramos si la variable del sensor1 esta alta y por consiguiente el leb1:
digitalWrite(led1,HIGH); //declaramos que la variable del leb1 esta encendido.
else
digitalWrite(led1,LOW); //declaramos si la variable del sensor1 esta baja y por consiguiente el leb1 esta apagado.

}

lo que necesito es que un solo botón cambie de color cuando el leb este encendido y cambie de color cuando este apagado.

agradezco a quien me pueda asesorar....soy nuevo en este tema....muchas gracias

Edita ese ultimo post por favor para que el código este con el tag correspondiente.

Entiendo que quieres hacer pero no pones nada respecto del problema con app inventor.
yo haria un slide que cambiara el color del boton dentro todo de app inventor, luego cuando funcione reemplazaría el cambio que produce el ajuste de color con la información proveniente del arduino.

Se entiende o justamente todo eso es lo que no puedes o no sabes hacer.

buenas tardes,

realice un ajuste al código arduino según los ejemplos anteriores, la cual me permite cada vez que el sensor de nivel sube prender el led y cuando baje el nivel apagar el led. sin embargo en la app que estoy desarrollando no puedo lograr que el botón tome la misma condición del led.

agradezco su apoyo.

cordialmente andres.

asi quedo el codigo.

int sensor1=12; //Indicamos el pin al que tenemos conectado el sensor de nivel de alerta de liquido 11.
int led1=11; //Indicamos el pin al que tenemos conectado el led que indica alarma del sensor de alerta 11.
boolean status = false;

void setup() {

Serial.begin(9600); //iniciar el serial.
pinMode(sensor1,INPUT); //sensor de nivel de liquido
pinMode(led1, OUTPUT); //salida led

}

void loop() {

if(digitalRead(sensor1)==HIGH) //declaramos si la variable del sensor1 esta alta y por consiguiente el leb1:
digitalWrite(led1,HIGH); //declaramos que la variable del leb1 esta encendido.
else
digitalWrite(led1,LOW); //declaramos si la variable del sensor1 esta baja y por consiguiente el leb1 esta apagado.
status = !status; // cada vez que se presiona el boton y es leido via BT por tu arduino cambia el estado de ON a OFF y a ON otra vez
}

Hola andres

dos cosas

primero te respondo la duda que te ha traído aquí: si ese es todo tu código, en verdad te digo que etas mal esperando que la app se actualice porque nunca mandas el dato a la app.
Si es un bluetooth serial tienes que mandarle el dato por serial con Serial.println(status), correcto?

En segundo lugar dices que tienes un sensor analogo y utilizas digitalRead para leer su valor, eso te va a dar un valor totalmente inexacto, mira tendrás un valor HIGH cuando este lleno, un valor HIGH cuando este a 3/4, y si el nivel esta mas abajo de eso tendrás un valor LOW.(las lecturas dependen de tu circuito)
Para tener un valor analogo que represente el estado actual del recipiente tienes que usar analogRead(#pinSensor), con esto tendras un valor proporcional que representa el nivel del liquido en el recipiente.

Mira tienes que hacerlo de nuevo teniendo en cuenta lo que te he escrito,

Buenas tardes, tengo un código que enciendo en led con el mismo pulsador y al soltarlo se apaga el botón es físico, pero ese mismo código quiero hacerlo para android para desde ahí con un botón al pulsarlo se active el led y al soltar el botón se apague tipo rebote.