Go Down

Topic: Pregunta, código no loopea. (Read 599 times) previous topic - next topic

dodors

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]);
  }
}

Cheyenne

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 ++) {
http://cuadricopterodiyarduino.blogspot.com/

PepeChorva

#2
Sep 01, 2012, 01:07 am Last Edit: Sep 01, 2012, 01:09 am by PepeChorva Reason: 1
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: [Select]
#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: [Select]
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: [Select]
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: [Select]
   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: [Select]
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: [Select]
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]);
 }
}
---
Saludos,
José Chorva
www.pepechorva.com
@pepechorva on twitter

Go Up