Offline
Newbie
Karma: 0
Posts: 16
|
 |
« on: February 22, 2012, 12:49:21 am » |
Tengo un problemita y es el siguiente:
este es el pequeño programa que tengo el cual no es muy complicado es algo muy basico #include <Servo.h>
Servo servo1; void setup() { servo1.attach(9); }
void loop() { for(int i=0; i<=45; i=i+1) { servo1.write(i); delay(100); } }
en este programa lo que hago es aumentar de angulo de 1 en 1 hasta llegar a 45 grados al llegar a 45 este comienza de nuevo desde 0 grados.
el problema es que yo necesito que cuando llegue a 45 grados pare ahi mismo, se que puedo dar el angulo directamente de 0 a 45 de golpe pero no es correcto para lo que quiero realizar. con esto e intentado varias cosas agregandole if,con while etc. y no e podido e leido bastante e intentado muchas cosas y el ciclo continua sin parar en el angulo 45 que tengo que hacer? (soy aprendiz).
|
|
|
|
|
Logged
|
|
|
|
|
0
Offline
Sr. Member
Karma: 0
Posts: 489
Arduino inside
|
 |
« Reply #1 on: February 22, 2012, 02:22:06 am » |
Hola humbertog, te aconsejo te mires los tutoriales del playground que seguro te ayudaran mucho. Hay varias maneras de hacer lo que quieres, por ejemplo le puedes poner una condicion que se cumpla siempre una vez que ha llegado a la posición deseada, por ejemplo usando un while.
|
|
|
|
|
Logged
|
|
|
|
|
COM22
Offline
God Member
Karma: 3
Posts: 579
|
 |
« Reply #2 on: February 22, 2012, 04:31:43 am » |
el problema es que yo necesito que cuando llegue a 45 grados pare ahi mismo, se que puedo dar el angulo directamente de 0 a 45 de golpe pero no es correcto para lo que quiero realizar. Podría meter el for dentro de un if definiendo antes una variable de control. go = true if ( go == true ) { for {} go = FALSE } Luego si quieres reactivar el servo por ejemplo con un botón seria añadir más código para cambiar la variable go a TRUE al pulsar el mismo. Un saludo!
|
|
|
|
|
Logged
|
|
|
|
|
Euskadi
Offline
God Member
Karma: 10
Posts: 595
Arduinotarrak
|
 |
« Reply #3 on: February 22, 2012, 06:52:52 am » |
Hola, Para salir de un for(;  puedes usar break. Cuando haya varios for() anidados, también se puede usar el goto, aunque se recomienda no abusar de ese recurso.
|
|
|
|
|
Logged
|
|
|
|
|
Elche, Spain
Offline
Newbie
Karma: 0
Posts: 39
|
 |
« Reply #4 on: February 22, 2012, 04:55:13 pm » |
No seria más fácil usar un while?
#include <Servo.h>
Servo servo1; int i = 0;
void setup() { servo1.attach(9); }
void loop() { while(i<=45) { servo1.write(i); delay(100); i++; } }
|
|
|
|
|
Logged
|
|
|
|
|
Onda
Offline
Jr. Member
Karma: 0
Posts: 81
This is personal...
|
 |
« Reply #5 on: February 22, 2012, 07:22:38 pm » |
Hola, Para salir de un for(;  puedes usar break. Cuando haya varios for() anidados, también se puede usar el goto, aunque se recomienda no abusar de ese recurso. Cada vez que un programador usa un goto, $deity hace un corto en una placa  Puedes meter ese for en el setup, si solo lo ha de realizar una vez, el loop es la rutina que va a estar siempre repitiéndose continuamente. El while que propone chocala también es una buena solución.
|
|
|
|
|
Logged
|
|
|
|
|
0
Offline
Sr. Member
Karma: 0
Posts: 489
Arduino inside
|
 |
« Reply #6 on: February 23, 2012, 09:51:45 am » |
hay muchas maneras de hacerlo:
#include <Servo.h>
Servo servo1;
void setup() { servo1.attach(9); }
void loop(){ for (int i = 0; i < 45; i++){ servo1.write(i); delay(100); i++; } while (1 == 1){//aquí podrías poner por ejemplo un botón por si quieres que vuelva a hacerlo delay (100); }
|
|
|
|
|
Logged
|
|
|
|
|
Argentina
Offline
Newbie
Karma: 0
Posts: 7
Fabricaco Circuitos impresos
|
 |
« Reply #7 on: March 05, 2012, 11:22:02 pm » |
si lo hace una sola vez, te conviene ponerlo en el setup().
Opcion 1 :
#include <Servo.h>
Servo servo1;
void setup(){ servo1.attach(9); for (int i = 0; i < 45; i++){ servo1.write(i); delay(100); i++; } }
void loop(){ }
Opcion 2 :
como el loop() se repite indefinidamente, tenes que poner un corte de control. poniendo un if antes y utilizar una variable global como contador.
#include <Servo.h>
Servo servo1;
int cant = 0 ;
void setup() { servo1.attach(9); }
void loop(){ if (cant < 1 ){ // modificando la cantidad del if es la cantidad de veces que se hace! for (int i = 0; i < 45; i++){ servo1.write(i); delay(100); i++; } delay (100); cant++; } }
|
|
|
|
|
Logged
|
|
|
|
|
Elche, Spain
Offline
Newbie
Karma: 0
Posts: 39
|
 |
« Reply #8 on: March 06, 2012, 08:38:58 am » |
si lo hace una sola vez, te conviene ponerlo en el setup().
Opcion 1 :
#include <Servo.h>
Servo servo1;
void setup(){ servo1.attach(9); for (int i = 0; i < 45; i++){ servo1.write(i); delay(100); i++; } }
void loop(){ }
Opcion 2 :
como el loop() se repite indefinidamente, tenes que poner un corte de control. poniendo un if antes y utilizar una variable global como contador.
#include <Servo.h>
Servo servo1;
int cant = 0 ;
void setup() { servo1.attach(9); }
void loop(){ if (cant < 1 ){ // modificando la cantidad del if es la cantidad de veces que se hace! for (int i = 0; i < 45; i++){ servo1.write(i); delay(100); i++; } delay (100); cant++; } }
en la opcion 1 dentro del for no hace falta poner i++ porque ya esta puesto en el incremento
|
|
|
|
|
Logged
|
|
|
|
|
Onda
Offline
Jr. Member
Karma: 0
Posts: 81
This is personal...
|
 |
« Reply #9 on: March 06, 2012, 06:12:27 pm » |
De hecho, es un error de programación, haces el incremento de 2 en 2, con lo que el for no da el resultado esperado.
|
|
|
|
|
Logged
|
|
|
|
|
|