Hola a todos.
Mi problema esta en que al querer controlar un servomotor que uso en un proyecto de una casa domotica. Me funciona correctamente con el sensor que es una LDR, pero si yo quiero controlarlo con la aplicación no me funciona, parece que hay conflicto. Entonces si yo comento la programación del sensor si funciona con la aplicación, entonces yo necesito una forma de activar o dividir las instrucciones para cada forma de controlar. Necesito su ayuda, gracias de antemano. Aquí les dejo el código.
También les dejo el archivo adjunto por si les es mas cómodo.
#include <Servo.h> // Libreria usada para el servomotor.
Servo myservo1; // crea el objeto del servo 1.
Servo myservo2; // creo el objeto del servo 2.
Servo myservo3; // Creo el objeto del servo 3. Que servira para activar la perilla donde entra el carro.
//const int rxpin = 2;
//const int txpin = 3;
const int speed0 = 88;
char dato; //variable donde se almacenara cada dato que se reciba de la Aplicacion a travez de Bluetooth
int led1 = 4, pos, led2 = 5, led3 = 6, led4 = 7, led5 = 8, led6 = 2, led7 = 3; //Variables identificadoras de los pins donde sera la salida para cada led.
//Variables que ocupara la o el detector de oscuridad.
int pinLDR = A0; // Variable correspondientfotoresistenciae a almacenar el pin del sensor.
int ledLDR1 = 12, ledLDR2 = 13; // Variables que almacenan los pines que se activaran por el fotoresistor o LDR.
int valorLDR = 0; // Variable donde se almacenara el valor que se lea del sensor o fotor resistencia.
//Variables que ocupara la o el detector de oscuridad.
int pinLDR1 = A1; // Variable correspondientfotoresistenciae a almacenar el pin del sensor.
int valorLDR1 = 0; // Variable donde se almacenara el valor que se lea del sensor o fotor resistencia.
//SoftwareSerial bluetooth(rxpin, txpin);
void setup() {
Serial.begin(9600);
//bluetooth.begin(9600);
//Serial.println("Lo recibido es lo siguiente");
myservo1.attach(9); //Declaramos el pin 9 como salida para el servomotor.
myservo2.attach(10);
myservo3.attach(11);
//Declaramos los pines que activaran los leds como salida.
pinMode(led1,OUTPUT);
pinMode(led2,OUTPUT);
pinMode(led3,OUTPUT);
pinMode(led4,OUTPUT);
pinMode(led5,OUTPUT);
pinMode(led6,OUTPUT);
pinMode(led7,OUTPUT);
// Declaramos lo pines de los leds como salida basados a activarse con la fotoresistencia o sensor.
pinMode(ledLDR1,OUTPUT);
pinMode(ledLDR2,OUTPUT);
//Los pines analogicos no necesitan declararse como salidas. :p lol
myservo1.write(speed0);
myservo2.write(0);
myservo3.write(0);
}
void loop() {
if (Serial.available() > 0){ //¿Existen un dato disponible recibido a travez de bluetooth?
dato = Serial.read(); //Entonces guardarlo en la variable dato.
//Serial.println(dato); //Imprimimos lo recibido en el puerto serial.(Solo se usa para prueba al final lo quitaremos :p)
/*Con la funcion switch estamos comparando el valor de la variable dato, en base al valor qe se reciba desde la aplicacion.
Valores que son los que estan determinado en case '': Si se lee un dato en la variable dato que corresponda al que se puso
en el case, entonces se ejecutara una serie de codigos que se establencen, de esa manera se pueden ejecutar muchos
codigos para diferentes acciones. */
switch (dato) {
//Correspondiente a la Sala...
case 'A':
digitalWrite(led1,HIGH);
break; // el break se utiliza para salir de la estructura switch y seguir comparando si se recibe algo.
case 'a':
digitalWrite(led1,LOW);
break;
//Correspondiente a la cocina...
case 'B':
digitalWrite(led2,HIGH);
break;
case 'b':
digitalWrite(led2,LOW);
break;
//Correspondiente al cuarto 1...
case 'C':
digitalWrite(led3,HIGH);
break;
case 'c':
digitalWrite(led3,LOW);
break;
//Correspondiente al cuarto 2...
case 'D':
digitalWrite(led4,HIGH);
break;
case 'd':
digitalWrite(led4,LOW);
break;
//Correspondiente al Baño...
case 'E':
digitalWrite(led5,HIGH);
break;
case 'e':
digitalWrite(led5,LOW);
break;
//Opcion de ecender todo.
case 'G':
digitalWrite(led1,HIGH);
digitalWrite(led2,HIGH);
digitalWrite(led3,HIGH);
digitalWrite(led4,HIGH);
digitalWrite(led5,HIGH);
break;
// Apagar todo.
case 'g':
digitalWrite(led1,LOW);
digitalWrite(led2,LOW);
digitalWrite(led3,LOW);
digitalWrite(led4,LOW);
digitalWrite(led5,LOW);
break;
//Correspondiente al Ascensor...
case '1':
//servo 100% CW (equivalente a angulo 180º)
pos = 180;
myservo1.write(pos);
delay(5);
break;
case '2':
// poner el servo a 0 grados que equivale girar a la derecha o abajo para el ascensor.
pos = 0;
myservo1.write(pos);
delay(5);
break;
case '3':
//Simplemente detener el servomotor.
myservo1.write(speed0);
delay(5);
break;
//Correspondiente a la puerta de la casa..
case 'F':
//Abrimos la puerta:
//Led Azul
digitalWrite(led6,HIGH);
delay(5);
myservo2.write(100);
break;
case 'f':
//Cerramos la puerta:
//Apagar led Azul
digitalWrite(led6,LOW);
delay(5);
digitalWrite(led7,HIGH);
delay(3);
myservo2.write(0);
break;
//Para la barras del carro
//AQUI PRETENDO CONTROLARLO CON EL CELULAR PERO NO RESPONDE.
case 'H':
myservo3.write(160); //Abrir
break;
case 'h':
myservo3.write(0); // Cerrar paso
break;
} //Fin del switch
} //Fin de la funcion if()
//Posible programacion para una foto resistencia conectada al pin A0
// leer el valor del sensor y guardarlo en la variable valorLDR para activar los leds externos.
valorLDR = analogRead(pinLDR);
if (valorLDR < 15) // Si hay oscuridad entonces encender los leds.
{
digitalWrite(ledLDR1,HIGH);
digitalWrite(ledLDR2,HIGH);
}
else { //Si no es menor el valor o hay luz entonces apagarlos.
digitalWrite(ledLDR1,LOW);
digitalWrite(ledLDR2,LOW);
}
//Leer los valores que ingresen el en el pin A1 de la fotoresistencia y guardarlos en la variable valorLDR1.
//Que se ocupara para abrir la perilla al carro.
//ESTE ES EL PROBLMA, LO SIGUIENTE ES EL CODIGO PARA EL SENSOR Y CONTROLAR EL SERVOMOTOR
valorLDR1 = analogRead(pinLDR1);
if (valorLDR1 < 18) { // Si el valor es menor o hay oscuridad entonces posicionar el servo a 160 grados.
myservo3.write(160);
}
if (valorLDR1 > 20){ // Si el valor es mayor o ya hay luz porque el carro paso, entonces esperar dos segundos por seguridad y luego...
delay(1500);
myservo3.write(0); // Posicionar el servomotor a como estaba antes o cerrar.
}
} //Fin del loop
prueba_bluetooth.ino (6.07 KB)