Pages: [1]   Go Down
Author Topic: Mover Servo y Encender led a la ves  (Read 1655 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 44
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hola, into hacer que el arduino mueva un servo y prenda un led, pero cuando agrego el codigo del led y mando la señal para que se mueva el servo a veces solo prende el led y el servo no hace el movimiento, este es el codigo que uso:
Quote
#include <Servo.h>
Servo servo1;
int pos1 = 90;

void setup()
   {
     Serial.begin(9600);   
     Serial.flush();
     servo1.attach(2);
     servo1.write(0);
     servo1.write(pos1);
     delay(15);
     pinMode(13,OUTPUT);

void loop()
{
   if (Serial.available() > 0) {         
    data = Serial.read();
    }
   if ((data == 'E') || (data == 'e')) {
   pos1 += 10;
   servo1.write(pos1);         
   delay(15);         
   }
   if ((data == 'F') || (data == 'f')) {
   pos1 -= 10;
   servo1.write(pos1);         
   delay(15);         
   }
   
if (Serial.available()) {         
    data = Serial.read();
   }
   if ((data == 'F') || (data == 'f')) {
   digitalWrite(13, HIGH);   
   delay(15);   
   digitalWrite(13, LOW);   
   delay(15);   
         }
Podrian decirme que esta mal? es todo y gracias de antemano.
Logged

Donostia
Offline Offline
God Member
*****
Karma: 3
Posts: 744
elektronikadonbosco
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Primero comentar que arriba pones:
     servo1.write(0);
     servo1.write(pos1);

Pos1=90 por lo que mandas 2 instrucciones seguidas de 0 y 90 no se si tiene alguna utilidad pero yo quitaría una de las dos.

Por otra parte, en el programa yo quitaría el segundo

if (Serial.available()) {         
    data = Serial.read();
   }

que has puesto. De esa manera creo que te funcionaría. Salu2
Logged

Madrid
Offline Offline
Sr. Member
****
Karma: 5
Posts: 481
Life isn't about finding yourself, life is about creating yourself!!
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

@Eduort
Tienes que usar lo que se llama time triggered patters.

Básicamente es crear un control de tiempo mediante un tic, luego ejecutas cada función cuando lo necesites. No se ejecutan en paralelo real pero es una simulación cercana.

Aquí tienes una explicación buenísima en español para crear un tic en arduino escrita por IgorR:
http://real2electronics.blogspot.com.es/2011/01/timer-2.html

Y aquí un libro en inglés con explicación exhaustiva de Time-Triggered Patterns
http://www.tte-systems.com/books/pttes

Resumiendo tienes que usar interrupciones y quitar cualquier delay.
Logged

Engineering is the art of
making what you want from
things you can get.

     

[SOLUCIONADO]

Offline Offline
Newbie
*
Karma: 0
Posts: 44
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

@Eduort
Tienes que usar lo que se llama time triggered patters.

Básicamente es crear un control de tiempo mediante un tic, luego ejecutas cada función cuando lo necesites. No se ejecutan en paralelo real pero es una simulación cercana.

Aquí tienes una explicación buenísima en español para crear un tic en arduino escrita por IgorR:
http://real2electronics.blogspot.com.es/2011/01/timer-2.html
No le entendi mucho a eso, pero segun

Y aquí un libro en inglés con explicación exhaustiva de Time-Triggered Patterns
http://www.tte-systems.com/books/pttes

Resumiendo tienes que usar interrupciones y quitar cualquier delay.
No podrias decirme un pequeño ejemplo de como hacer eso? esque no tengo mucha experiencia con el arduino y no entendi muy bien lo que dice ahi, y otra duda que tengo, no se podria hacer que se hagan las funcionas seguidas pero con una pequeña diferencia de tiempo?
Logged

Madrid
Offline Offline
Sr. Member
****
Karma: 5
Posts: 481
Life isn't about finding yourself, life is about creating yourself!!
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Si has leído en enlace que te he dado:

http://real2electronics.blogspot.com.es/2011/01/timer-2.html

Verás que tiene  un ejemplo de cómo usar el Timer2 para controlar diferentes tareas.
En ese ejemplo, conmuta el estado de dos pines (pin 13 y pin 2 de Arduino) a dos frecuencias diferentes.

Si tienes poca experiencia te recomendaría probar lo siguiente:

http://www.arduino.cc/en/Tutorial/BlinkWithoutDelay
Logged

Engineering is the art of
making what you want from
things you can get.

     

[SOLUCIONADO]

Donostia
Offline Offline
God Member
*****
Karma: 3
Posts: 744
elektronikadonbosco
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Si no te quieres poner a controlar los registros del Timer y las señales que hay que enviar al servo, otra posibilidad es que en vez que esté parpadeando todo el rato el led, haz que se encienda cuando empiece a moverse el servo y cuando se pare se apague el led. Mola más que parpadee pero tiene mucho trabajo.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 44
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Si no te quieres poner a controlar los registros del Timer y las señales que hay que enviar al servo, otra posibilidad es que en vez que esté parpadeando todo el rato el led, haz que se encienda cuando empiece a moverse el servo y cuando se pare se apague el led. Mola más que parpadee pero tiene mucho trabajo.
Como podria hacer eso? hasta ahora solo logre que cuando envio la señal de movimiento se prenda el LED, pero el problema es que se paga hasta que vuelvo a mandar la señal de que se mueva el servo, entonces podria quedarse encendido aunque el servo ya no se mueva.
Logged

Donostia
Offline Offline
God Member
*****
Karma: 3
Posts: 744
elektronikadonbosco
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ya no se exactamente lo que quieres hacer pero empieza quitando el segundo

Code:
if (Serial.available()) {         
    data = Serial.read();
   }
   if ((data == 'F') || (data == 'f')) {

que sirve para encender y apagar los leds y mete las instrucciones de encender y apagar los leds donde mandas moverse al servo.

Code:
digitalWrite(13, HIGH);
servo1.write(pos1);
digitalWrite(13, LOW);

 Esto es una idea luego puedes modificarlo a tu gusto. Salu2
Logged

Pages: [1]   Go Up
Jump to: