Pages: [1]   Go Down
Author Topic: Pregunta, código no loopea.  (Read 570 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 5
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Tengo este código (estoy recién empezando) y realiza la acción una vez y luego no loopea, tengo algún error?

int led = 13;
int arrayDelay[] = {100, 200, 300, 400, 500, 600, 700, 800, 900, 999};

void setup() {               

  pinMode(led, OUTPUT);     
}

void loop() {
  for(int delaysito = 1; delaysito <= 10; delaysito ++) {
  digitalWrite(led, HIGH);   
  delay(arrayDelay[delaysito]);               
  digitalWrite(led, LOW);   
  delay(arrayDelay[delaysito]);       
  } 
  for(int delaysito = 10 ; delaysito == 10; delaysito -=1) {
    digitalWrite(led, HIGH);
    delay(arrayDelay[delaysito]);
    digitalWrite(led, LOW);
    delay(arrayDelay[delaysito]);
  }
}
Logged

Offline Offline
God Member
*****
Karma: 7
Posts: 635
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Las posiciones de un array se direccionan comenzando por cero. Como tu array tiene 10 posiciones el for tienes que ponerlo

  for(int delaysito = 0; delaysito <= 9; delaysito ++) {
Logged


Onda
Offline Offline
Jr. Member
**
Karma: 0
Posts: 91
This is personal...
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Pues tienes varios problemas en el código.
He reconvertido tu código a C (tengo los arduinos conectados a 1000 cosas y por no toquetearlos…);
Code:
#include <stdio.h>

int led = 13;
int arrayDelay[] = {100, 200, 300, 400, 500, 600, 700, 800, 900, 999};

int main() {
  int delaysito;
  while(1==1){
    for(delaysito = 1; delaysito <= 10; delaysito ++) {
     printf("%d", arrayDelay[delaysito]);
     printf("\n");
    }  
    printf("Segunda parte\n");
    for(delaysito = 10 ; delaysito == 10; delaysito -=1) {
     printf("%d", arrayDelay[delaysito]);
     printf("\n");
    }
  }
}

Esta es la salida que obtengo:
Code:
Nikola:pruebas pepe$ gcc -o kk codigoweb.c
Nikola:pruebas pepe$ ./kk
Primera parte
200
300
400
500
600
700
800
900
999
0
Segunda parte
0
Primera parte
200
300
400
500
600
700
800
900
999
0
Segunda parte
0


Problemas:
-Los vectores, en programación, no van de 1 a N, sino de 0 a N-1
Code:
int arrayDelay[] = {100, 200, 300, 400, 500, 600, 700, 800, 900, 999};
son 10 elementos, pero se cuentan como 0,1,2,3,4,5,6,7,8,9
-los for funcionan desde el valor inicial (antes del primer punto y coma, y eso sólo se ejecuta una vez), condición de parada (que se ejecuta en todas las iteraciones) e incremento (positivo o negativo y se ejecuta en todas las iteraciones, excepto la primera). En el primer for, lo hace casi bien, va desde el elemento 1 (aunque debería ser el 0) hasta el 10 (que debería ser el 9). Si quieres recorrer el vector entero, deberías hacer;
Code:
   for(delaysito = 0; delaysito < 10; delaysito ++)

En el segundo for, le asignas valor 10, y le dices que la condicion de parada sea que delaysito sea 10, con lo que sólo entra la primera iteración, luego ya no se cumple y sale del for. Si lo que quieres es que vaya de 10 a 0, deberías poner;
Code:
for(delaysito = 10; delaysito >= 0; delaysito--)

CONCLUSIÓN; sí te está haciendo el loop, pero tienes fallos en tu código y no hace lo que quieres que haga, jeje
Creo que quieres que te haga algo similar a esto;
Code:
int led = 13;
int arrayDelay[] = {100, 200, 300, 400, 500, 600, 700, 800, 900, 999};

void setup() {                

  pinMode(led, OUTPUT);    
}

void loop() {
  for(int delaysito = 0; delaysito < 10; delaysito ++) {
  digitalWrite(led, HIGH);  
  delay(arrayDelay[delaysito]);              
  digitalWrite(led, LOW);    
  delay(arrayDelay[delaysito]);        
  }  
  for(int delaysito = 10 ; delaysito >=  0; delaysito -=1) {
    digitalWrite(led, HIGH);
    delay(arrayDelay[delaysito]);
    digitalWrite(led, LOW);
    delay(arrayDelay[delaysito]);
  }
}
« Last Edit: August 31, 2012, 06:09:44 pm by PepeChorva » Logged

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

Pages: [1]   Go Up
Jump to: