Pages: [1]   Go Down
Author Topic: Como salir de un ciclo for?  (Read 2250 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 18
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 Offline
God Member
*****
Karma: 1
Posts: 524
Arduino inside
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 Offline
God Member
*****
Karma: 6
Posts: 702
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.

Code:
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 Offline
God Member
*****
Karma: 16
Posts: 711
Arduinotarrak
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hola,
Para salir de un for(;smiley-wink 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 Offline
Newbie
*
Karma: 0
Posts: 42
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 Offline
Jr. Member
**
Karma: 0
Posts: 91
This is personal...
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Hola,
Para salir de un for(;smiley-wink 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  smiley-mr-green
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

---
Saludos,
José Chorva
www.pepechorva.com
@pepechorva on twitter

0
Offline Offline
God Member
*****
Karma: 1
Posts: 524
Arduino inside
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 Offline
Newbie
*
Karma: 0
Posts: 20
Fabricacion Circuitos impresos
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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 Offline
Newbie
*
Karma: 0
Posts: 42
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 Offline
Jr. Member
**
Karma: 0
Posts: 91
This is personal...
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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

---
Saludos,
José Chorva
www.pepechorva.com
@pepechorva on twitter

Pages: [1]   Go Up
Jump to: