Estoy haciendo un proyecto para la escuela en el cual tengo que hacer que una puerta corrediza se abra o se cierre mediante 2 botones en una aplicacion con bluetooth, pero no logro hacer que el motor se mueva cuando apreto los botones en la aplicacion no hay errores en pantalla, solamente no funciona, dejo el codigo a continuacion:
#include <Servo.h>
int mover;
int mover2;
Servo servoMotor1;
Servo servoMotor2;
char rxChar;
void setup(){
servoMotor2.attach(8,600,2400);
Serial.begin(9600);
pinMode (4,INPUT);//Fin de carrera 1
pinMode (2,INPUT);//Fin de carrera 2
mover=90; //0 Abrir 180 Cerrar 60-120 Velocidades
mover2=180;//motor Cerradura
servoMotor1.attach(8);//Motor Pin8
servoMotor2.attach(9);//Motor Pin9
}
void loop() {
int lectura;
int lectura2;
servoMotor1.write(mover);
servoMotor2.write(mover2);
lectura=digitalRead(4);//fin de carrera
lectura2=digitalRead(2);//fin de carrera
if (Serial.available()){
rxChar=Serial.read();
}
if(rxChar=='a'){
mover=60;
Serial.print(mover);
}
else if(rxChar=='b'){
mover=120;
Serial.print(mover);
}
servoMotor1.write(mover);
if (lectura==LOW and mover==60){
mover2=180;//Motor Cerradura Abierto
mover=90;//motor frena
}
if (lectura2==LOW and mover==120){
mover=90;//motor frena
mover2=20;//Motor Cerradura Cerrado
}
}
el unico motor que necesito que se mueva con bluetooth es el servoMotor1
Moderador:
Por favor, lee las Normas del foro y edita tu código/error usando etiquetas de código.
Ve a edición, luego selecciona todo el código que has publicado, lo cortas y click en </>
Por lo que veo nada mas iniciarse el programa el servo se queda en la posicion 90, desconecta la alimentacion de la placa, situa el servo en cualquiera de los extremos y alimenta la placa y veras que automaticamente se situa en la posicion 90.
Y no veo nada en el codigo que haga que la variable mover cambie de valor
Eso no funciona asi, es un servo 360 con rotacion continua, 90 es para frenar el 0 para que gire contrareloj y 180 para que gire a la direccion del reloj. y la unica forma de que frene es cambiandole el valor a 90 y la idea es que cuando la aplicacion me devuelva 'a' "mover" cambie a 60 que es que gire en contrareloj
servoMotor2 donde funciona finalmente, en pin 3 o pin 9?
Obviamente quedará en pin 9, pero para que lo defines antes en pin 3? Comenta esa linea o elimínala.
Imagino que ya tiene conectadas las respectivas resistencias a 5V en los finales de carrera pero si caso no las tuviese, es una buena observación la del amigo.
Tienes que aislar el problema.
Prueba enviando los caracteres desde la consola, debería responder.
Si desde la consola responde entonces revisa las conexiones.
comprobe todo, ahora modifique un poco el codigo y cuando presiono el boton de la aplicacion me devuelve algo, pero no lo que quiero, dejo la imagen a continuacion
Ahora me gusta más, me "hacía ruido" que usaras el serial para el módulo.
¿Verificarse que en la app esté correcta la velocidad y lo mismo para el módulo?
Agrego:
Esto no está bien
if (BTserial.available())
{
Serial.write(BTserial.read());
char rxChar = BTserial.read();
}
lee el caracter del serial y lo envía a consola, luego lee otro caracter para guardar en rxChar.
Además la variable rxChar que defines dentro del if() es local por lo que no es la misma que defines como global (de hecho, esa variable local se pierde al salir del if()).
Prueba así
if (BTserial.available())
{
rxChar = BTserial.read();
Serial.write(rxChar);
}