Como programo esto en arduino?

Iniciado por JCRb, 1 Diciembre 2014, 15:01 PM

0 Miembros y 3 Visitantes están viendo este tema.

JCRb

Buenas, estoy haciendo un proyecto que es un brazo robótico con arduino.

Quiero poder controlar los servos del brazo con una app desde android y para ello he hecho una secilla app con el app inventor a modo de mando de consola.

La cosa es que se programar los servos para que giren con un potenciometro o que giren ciertos grados cada cierto tiempo etc. Lo que no se es como hacer que giren indefinidamente para un lado mientras esté pulsado un botón y que paren cuando suelte el botón.

Podriais ayudarme?

Gracias.

engel lex

Primero, si quieres controlarlo con una app desde arduino necesitaras un medio para interconectarlos, ya sea usb, wifi(con su respectivo shield) o una pc conectada al arduino

Para que giren indefinidamente con un while deberia bastar

Coloca la sección de codigo que no sabes modificar y te podemos explicar
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

JCRb

Para interconectarlos utilizare un modulo bluetooth HC-06.
Mira, aqui dejo el codigo que utilizo para mover un servo con un potenciómetro:

#include <Servo.h>

Servo s1;

void setup(){
s1.attach(3);
}


void loop(){
int val = analogRead(1);

val = map(val,0,1023,0,179);

s1.write(val);
 
}


Si uso el while que comando debo poner para que gire indefinidamente hacia un lado?
O sea, while aprieto un boton ---> servo.write(LoQueSeaParaQueGireIndefinidamente)
En el servo.write() si pongo un numero solo girará esos grados.

Gracias.

engel lex

val = map(val,0,1023,0,179);
"map" es una regla de tres

Entonces sabemos que tus valores del servo deben estar entre 0 y 179 (no se si gira hasta 360 te queda a ti averiguar)


Seria hacer una variable externa al while y el while es mientras el boton este presionado
Cada ciclo la variable crece en uno y si llega a 180 vuelve a 0 y ese valor es el que va al write
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

JCRb

#4
Pero como hago que vaya creciendo el uno mientras lo mantengo pulsado?

Escribo los comandos de manera chapucera porque aun no me los se en arduino, pero para que me entiendas:

void setup(){
int val = 0;
servo.write(Val);
}

void loop{
   while "boton pulsado"
   servo.write(val ++ 1);
}

Algo así?

Gracias.

engel lex

Usa siempre las etiquetas GeSHi o de codigo para publicar codigo (arduino es C)

Con val++ incrementas 1, no es necesario el 1 alli

val =(val++)%180

El % es 'modulo', su resultado es el resto de la division.... es una operacion muy usada por el asunto de los ciclos, te recomiendo aprendas sobre ella

Por otro lado lo hago por asignacion para que no se desborde la variable... lo otro es que, no se si el servo.write es bloqueante, asi que recomiendo que si no lo es uses un timer para controlar la velocidad
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

JCRb

Ok gracias. Lo intetaré a ver si funciona.