Buenas
hace unos dias, escribi por un problemilla al controlar los servos, atraves de php y serial, ya voy avanzando ( me he leido como medio internet ya )
el problema lo tengo en detener el loop con una condicion, eh intentado hacer otro bucle principal, pero no me lo hace, y se me quedan aveces los servos como “temblando”, como si se quisieran mover y no pudieran.
el codigo que tengo hasta ahora es este:
un HTML o PHP para enviar los datos
<body id="main_body" >
<img id="top" src="top.png" alt="">
<div id="form_container">
<h1><a>Untitled Form</a></h1>
<a href="index.php?valor=1">1<a>
<a href="index.php?valor=2">2<a>
<a href="index.php?valor=3">3<a>
</div>
</body>
EL PHP que los recibe y envia a arduino
<?php
//La siguiente linea configura el modo de conexion a el com3 y 9600 baudios
exec("mode COM3 BAUD=9600 PARITY=N data=8 stop=1 xon=off");
$fp = @fopen ("COM3", "w");
if (!$fp) {
$status = "No conectado";
} else {
$status = "Conectado";
}
echo $status;
if($_GET["valor"] == 1)
{
$datos = 1;
}elseif($_GET["valor"] == 2)
{
$datos = 2;
}elseif($_GET["valor"] == 3)
{
$datos = 3;
}
fwrite($fp, $datos);
sleep(1);
fclose($fp);
?>
y el codigo arduino que los interpreta, yo creo que es aqui donde esta el fallo.
#include <Servo.h>
Servo myservo1; // crea el objeto servo
Servo myservo2; // crea el objeto servo
Servo myservo3; // crea el objeto servo
int numero;
int pos = 0;
int bucle = 0;
void setup()
{
Serial.begin(9600);
myservo1.attach(9); // vincula el servo al pin digital 9
myservo2.attach(11); // vincula el servo al pin digital 9
myservo3.attach(22); // vincula el servo al pin digital 9
}
void loop()
{
if (Serial.available() > 0)
{
numero = Serial.read();
}
for (bucle = 0; bucle <= 2; bucle ++)
{
if (numero == '1')
{
for (pos = 0; pos <= 180; pos += 1)
{
myservo1.write(pos);
}
for (pos = 180; pos >= 0; pos -= 1)
{
myservo1.write(pos);
delay(15);
}
}
if (numero == '2')
{
for (pos = 0; pos <= 180; pos += 1)
{
myservo2.write(pos);
delay(15);
}
for (pos = 180; pos >= 0; pos -= 1)
{
myservo2.write(pos);
delay(15);
}
}
if (numero == '3')
{
for (pos = 0; pos <= 180; pos += 1)
{
myservo3.write(pos);
delay(15);
}
for (pos = 180; pos >= 0; pos -= 1)
{
myservo3.write(pos);
delay(15);
}
}
}
}
alguien sabria decirme cual es el problema? realmente tan solo quiero mover un servo a la vez, segun que opcion le envie, si es un 1, el servo 1, un 2 el servo 2 y asi… y me gustaria que se moviesen solo 1 vez, es decir un ciclo que vaya desde la posicion origen hasta 180º y vuelva al origen y se detenga el loop, pero creo que tengo mal mi bucle for:
for (bucle = 0; bucle <= 2; bucle ++)
Gracias