LED con solo 1 Boton Bluetooth

Hola, estoy recien empezando con esto del arduino y tengo un problema con una luz led que quiero que se encienda con el Modulo Bluetooth HC-05 y con una app que estoy haciendo en APP Inventor.
lo que quiero es que una sola luz se encienda y se apague usando solo 1 boton y no 2 como lo hice en un principio.
Intenté hacer una variable "Estado" para que cambie mientras pulsaba el boton y resulta que no funcionó.

int bt = 0;
int LEDa = 5;
int LEDv = 6;
int LEDr = 7;
int Estado = 0;

void setup() {
  Serial.begin(9600);
  pinMode(LEDa, OUTPUT);
  pinMode(LEDv, OUTPUT);
  pinMode(LEDr, OUTPUT);

}

void loop() {
  if(Serial.available() >0){
  bt = Serial.read();
 }

 if(bt == '1'&& Estado == 0){
 digitalWrite(LEDa, HIGH);
 delay(100);
 Estado = 1;
 }
 
 if(bt == '1'&& Estado == 1){
  digitalWrite(LEDa, LOW);
  delay(100);
  Estado = 0;
 }
 
 }

Intente leer bt, y si es "1", cambie el estado "Estado", luego coloque el LED en ese estado.

  if (bt)
  {
    Estado != Estado;
    digitalWrite(LEDa, Estado);
  }

Prueba esto

int bt, btAnt = 1;
int LEDa = 5;
int LEDv = 6;
int LEDr = 7;
int Estado = 0;

void setup() {
  Serial.begin(9600);
  pinMode(LEDa, OUTPUT);
  pinMode(LEDv, OUTPUT);
  pinMode(LEDr, OUTPUT);

}

void loop() {
	if (Serial.available() >0){
		bt = Serial.read();
	}

	if (bt && !btAnt){
		Estado = !Estado;
	}
 
	if (Estado == 1){
		digitalWrite(LEDa, HIGH);
	}
	else {
		digitalWrite(LEDa, LOW);
	}
	btAnt = bt;
}

¿Y donde está la librería del BT?

Porque tanto tu código cómo las soluciones que se dan son usando Serial, pero no un BT :confused: ¿Me he perdido algo? ¿Es que quieres hacerlo sólo con Serial y no el BT al final? ¿Falta información? ¿O aquí nadie se ha dado cuenta que falta la librería correspondiente?

Además tu LED dado el nombre de los pines es un LED RGB o bien tienes 3 leds pero tú afirmas que usas 1 (que es lo que vemos en código) ¿Cómo que LOW o HIGH? ¿Y los valores analógicos? ¿Y si son 3 leds porque no se usan o no indicas nada sobre ellos? Esto no te puede funcionar y no entiendo que nadie haya percibido tantas cosas extrañas en el código.
¿Es posible que estés empezando pero copies pedazos de código sin entender lo que hace o nos has dado toda la información?
Saludos

¿Qué librería?
No hace falta ninguna porque lo maneja por puerto serie.

Saludos

y el HC-05???? Perdón que en vez de editar escribí a continuación. Repito, tienesun HT-05 quieres enviar por Bluetooth con una App y el ejemplo es enviar por Serial. No sé, a ver si nos aclaramos.

Vamos a ver el título dice BLUETOOTH, el texto nos menciona el HC-05 y App inventor, pero el código no tiene nada que ver ni al título ni al texto.

Y otra cosa extraña... ¿el led enciende/apaga se envíe lo que se envíe por Serial?

Yo me voy a ceñir a la duda, porque creo que el autor (que afirma está empezando) está haciendo Control+C, control+V. Si la idea es encender un led con cualquier app de bluetooth, sea app inventor u otra...
Suponiendo que escribrimos en cualquier App BT "hola mundo" encender/apagar led.
Para los que saben que un HC-05 difiere de un HC-06 supongo nadie pone el grito en el cielo por el control con la variable contador (ya que no hay /n)

#include <SoftwareSerial.h>

SoftwareSerial BTSerial(10, 11); // TX | RX

#define ledAzul 5

void setup(){
  Serial.begin(9600);
  BTSerial.begin(9600); 
  pinMode(ledAzul,OUTPUT);
}

void loop(){
  static String texto_BT;
  static bool estado;
  static byte contador;
  
  if(BTSerial.available() > 0){
	texto_BT += (char)BTSerial.read();
  }
  //finaliza la lectura BT
  else if(texto_BT != ""){
	Serial.println(texto_BT);
    
    if(texto_BT == "hola mundo"){ //apaga y enciende
      estado = !estado;
      texto_BT = "";
    }
    
    //si el valor ingresado por BT no fuese
    //uno de los que buscamos, eliminamos
    //tras un  tiempo
    contador += (contador == 40) ? -40 : 1; 
    if(contador == 0){
      texto_BT = "";
    }
  }

  digitalWrite(ledAzul, estado);
}
1 Like

@cuantron creo que te cuesta ver otras alternativas. El OP quiere hacerlo asi, y esta bien.
Se puede poner un BT por el puerto serie si es que no estamos monitoreando nada por el puerto serie? Claro que si!! Qué problema hay si para eso fue diseñado.
Claro que cuando queremos ver situaciones y comportamientos del código usamos el puerto serie (como en tu código ejemplo, pero eso es lo que tu has pensado, no el autor del hilo) para que lo indique pero en este caso no hay nada de malo en usarlo.
Solo prende apaga un led, usando un dispositivo HC05 conectado a los pines del unico puerto serie hardware disponible.
Uso el puerto serie disponible conectado en forma cruzada con el BT 05 o 06 o el que le plazca y funcionará perfectamente, claro que no puede cometer un solo error.

El título del hilo dice LED con solo 1 boton BT, dime en que falla el título?

1 Like

Gracias por la ayuda, como tu me recomendaste no funcionó pero como dijo @cuantron si funcionó, pero tuve que agregar una librería de Bluetooth.
Ahora tengo que agregar más Leds y agregar más estados para que funcionen.
yo quería usar esto para automatizar las Luces de mi habitacion pero estoy probando con leds y otras cosas para despues empezar a reemplazar los leds por Relés.

Gracias, funcionó.
A ver... recien hace 1 semana que empiezo con esto y busqué tutoriales de como usar los modulos bluetooth en arduino y uno de los videos mostraba que no necesitaba agregar librerías solo colocar los pines RX y TX crusados.
y si en mi codigo solo puse una LED porque quería arreglar lo de usar solo un botón antes de agregar los otros LEDs ( Verde y rojo, No RGB).
Ahora el tema es que si yo quisiera agregar esos nuevos LEDs tendría que agregar más estados uno para cada LED no?
tipo:

void loop(){
  static String texto_BT;
  static bool estadoAZUL;
  static bool estadoVERDE;
  static bool estadoROJO;
  static byte contador;

y así despues con sus respectivos !

Ojo con esto, no se que tipo de Arduino estas usando pero si tu Arduino trabaja en su pin de TX con 5V tienes que tener en cuenta que el RX del modulo BT trabaja con 3'3V, asi que deberas colocar un divisor de tension para no sobrecargar el RX del modulo BT.
imagen

No existe librería de BT, si una librería para crear un puerto Serie Virtual en los pines que designes.
Tenias razón, mi código no funciona, pero este debería.

int dato, bt;
int LEDa = 5;
int LEDv = 6;
int LEDr = 7;
int Estado = 0;

void setup() {
  Serial.begin(9600);
  pinMode(LEDa, OUTPUT);
  pinMode(LEDv, OUTPUT);
  pinMode(LEDr, OUTPUT);

}

void loop() {
	if (Serial.available() >0){
		dato = Serial.read();
                if (dato != '\n' ) {
                    if (bt == '1') 
           		Estado = !Estado;
                }
	}
	if (Estado == 1){
		digitalWrite(LEDa, HIGH);
	}
	else {
		digitalWrite(LEDa, LOW);
	}
}

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.