Go Down

Topic: Pregunta, código no loopea. (Read 632 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
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy