Go Down

Topic: Mover Servo y Encender led a la ves (Read 1 time) previous topic - next topic

Eduort

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.

ionhs

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

yOPERO

@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.
Engineering is the art of
making what you want from
things you can get.

     

[SOLUCIONADO]

Eduort


@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?

yOPERO

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
Engineering is the art of
making what you want from
things you can get.

     

[SOLUCIONADO]

Go Up