• Compra una licencia de Windows 10/11 (10€) u Office (18€) al mejor precio u Office al mejor precio. Entra en este post con las ofertas
  • Conoce los Días Naranjas de PcComponentes: descuentos de hasta un 40% en tecnología. Entra en este post con las ofertas
  • ¡Bienvenid@! Recuerda que para comentar en el foro de El Chapuzas Informático necesitas registrar tu cuenta, tardarás menos de 2 minutos y te dará valiosa información además de ayudarte en lo que necesites o pasar un rato agradable con nosotros.

Tanque RC controlado con Arduino

feryomiju

Nuevo
Registrado
19 Abr 2020
Mensajes
38
Puntos
8
Buenas! Llevo unos meses con este proyecto, es un tanque controlado por bluetooth a través de una app y arduino. La duda que tengo es la siguiente. Tengo un servo (MicroServo SG90) que voy a usar para controlar el giro de la torreta. El servo debe girar en concordancia con los dos botones que tengo en la app, derecha e izquierda únicamente, los valores de velocidad de giro ya los tengo calculados. El hecho es que al mandar por serie el valor tengo que hacerlo pulsando muchas veces y lo que quiero es poder mantener pulsado el botón en la app y que gire hasta que yo suelte. Os adjunto el programa. A al pulsar izquierda manda un valor de 70 y al pulsar derecha 110. Gracias de antemano.

#include <Servo.h>
Servo myservo;
int pos = 0;

void setup(){

Serial.begin(9600);
while (!Serial);
Serial.println("-------------------------");
Serial.println("ARos is loading....");
delay(1000);
Serial.println("ARos loaded succesfully");
Serial.println("-------------------------");
myservo.attach(9);
Serial.println("calibrating servo...");
for(pos = 0; pos <= 180; pos += 1)
myservo.write(0);
delay(1000);
myservo.write(180);
delay(1000);
myservo.write(90);
delay(1000);
Serial.println("servo calibrated");
Serial.println("-------------------------");
Serial.println("Comand input online, write command to perform action");
Serial.println("-------------------------");

}

void loop() {

for(pos = 0; pos <= 180; pos += 1)
if (Serial.available())


{

int state = Serial.parseInt();

if (state < 10)

{
Serial.print(">");
Serial.println(state);
Serial.println("cannost execute command, too low number");

}

if (state >= 10 && state < 170)
{
Serial.print(">");
Serial.println(state);
Serial.print("turning servo to ");
Serial.print(state);
Serial.println(" degrees");
delay(100);
myservo.write(state);
delay(150);
myservo.write(90);


}
}
}
 
Buenas. No he leído el código. En lugar de enviar un "pulso" lo que puedes hacer es detectar el evento de PULSAR y activar el modo girar, en el cual no paran de ejecutarse acciones de girar. Luego detecta el evento SOLTAR y cancela dicho modo.

La repetición de la acción de girar puedes hacerla en origen (la app no para de enviar el comando de girar hasta que sueltes el botón) o bien en destino (el Arduino recibe un "GIRAR ON" y no para de girar hasta que reciba un "GIRAR OFF", la app sólo envía esos dos comandos).

Si la haces en origen el tráfico inalámbrico es mayor pero si se corta la comunicación (se reinicia el móvil, por ejemplo) el Arduino para al instante. Si la haces en destino el tráfico inalámbrico es muy poco pero si se corta la comunicación tendrás que intervenirlo manualmente para que se detenga. Tú decides (y)
 
Arriba