no realiza for

Ante todo reciban un saludo y de antemano gracias a quienes me puedan ayudar,Nunca he programado nada y recién empiezo a interesarme con Arduino.
Mi problema es que no logro que se cumpla el ciclo con for, se realiza un bucle infinito y el código es muy sencillo,eso me parece, lo dejo aquí y si alguien me lo puede mirar y ayudarme indicando mi error se lo agradecería.
Utilizo un led RGB de cátodo común.

int ledverde=10;
int ledazul=9;

void setup() 
{
pinMode (ledverde, OUTPUT);
pinMode (ledazul,OUTPUT);
}
void loop()
{
 for (int i=0;i<5;i++){
   analogWrite(ledverde,255);
   delay(2000);
   analogWrite(ledverde,0);
   delay(2000);
   }
 analogWrite(ledazul,255);
}

Tu código dice que por 5 ciclos predes un ledverde x 2 segundos y lo apagas x 2 seg
Y al finalizar mantienes prendido un ledazul.

Eso es lo que has programado y como no te has explicado no puedo ayudarte mas.

Esta en el loop por lo tanto es un ciclo infinito.
Si quieres que ocurra una sola vez, pon todo en el setup y deja vacío el loop asi

void loop() {
}

Muchísimas gracias por tu explicación. Con lo que aquí me has expuesto se me aclaran varias cosas. Muy agradecido.Un saludo

Lo que no te aconsejo aunque nada cambia es usar analogWrite(ledverde,255);

te aconsejo digitalWrite(ledverde, HIGH); vs digitalWrite(ledverde, LOW);

Ante todo pido disculpas si es necesario abrir otro post para realizar esta consulta, si es así ,comentármelo.
Quiero realizar un control con Arduino para que rellene automáticamente un acuario.Como parte de este proyecto he pensado utilizar una pequeña boya que tendrá asignada una entrada digital. La idea es que un pin digital asignado como OUTPUT este constantemente en HIGH. La boya al detectar un nivel de agua bajo cierre un contacto y alimente la entrada del pin digital asignada a la boya. Quiero saber si hay algún problema en alimentar una entrada digital de Arduino con una salida,también desde el mismo Arduino,es decir,alimentar una entrada digital con una salida digital de la misma placa.

Y abusando de la experiencia de vosotros quería consultar también lo siguiente:
con do While he intentado el siguiente sketch como prueba para mi proyecto:

int ledazul=9;
int ledverde=10;
int alimentacion5v=4;
int boya=7;

void setup()
{
pinMode(ledazul,OUTPUT);
pinMode(ledverde,OUTPUT);
pinMode(alimentacion5v,OUTPUT);
pinMode(boya,INPUT);
}

void loop() {
do
{digitalWrite(ledazul,HIGH);}

while(boya==HIGH);
digitalWrite(ledazul,LOW);
digitalWrite(ledverde,HIGH);

}

Según entiendo este sketch debería ejecutarse una vez, luego al repetir el loop si no se cumple el while no ejecutaría el do,saltando al siguiente paso y no volveria a ejecutar el do hasta que la sentencia del while se cumpla nuevamente.Eso es lo que entiendo, pero al ejecutarlo se queda el led azul encendido junto con el verde sin que se cumpla la condición del while. Necesito entender como hacer que esto funcione indefinidamente siempre y cuando se cumpla lo indicado en while.

Seguro que me pueden ayudar, tengo muchos días intentando entender esto y no avanzo, gracias por vuestra ayuda.

cata1970:
Ante todo pido disculpas si es necesario abrir otro post para realizar esta consulta

Siempre que la pregunta sea diferente si seria conveniente.

cata1970:
Quiero saber si hay algún problema en alimentar una entrada digital de Arduino con una salida,también desde el mismo Arduino,es decir,alimentar una entrada digital con una salida digital de la misma placa.

No hay problema, pero creo que es totalmente inecesario, ya que por programación puedes saber si el pin esta activado o desactivado, no necesitas otro pin para poder leer el estado.

cata1970:
Y abusando de la experiencia de vosotros quería consultar también lo siguiente:
con do While he intentado el siguiente sketch como prueba para mi proyecto:

La estructura do ... while lo que hace es ejecutar el código que se encuentra dentro y luego si se cumple la condición repite a partir del do, pero una vez se ejecuta si o si el código dentro del bucle. Por lo tanto en tu codigo siempre se ejecuta una vez digitalWrite(ledazul,HIGH) en cada buelta del loop, si lo que quiere es que se ejecute si se cumple la condición seria.

while(digitalRead(boya)==HIGH)
{
  digitalWrite(ledazul,HIGH);
}

a demas como ves he usado digitalRead(boya) para leer el pin digital 7, no solo boya que es una variable que vale 7.

Gracias por la ayuda rodripelto. Evitando el void loop he colocado el código como me lo has detallado en el void setup para probarle. Según entiendo solo se debería de encender el led si se cumple la condición digitalWrite(boya)==HIGH), pero resulta que se enciende inmediatamente se sube el sketch al Arduino, sin estar boya en HIGH .Yo quiero alimentar el pin boya(7) con el pin alimentación5v)(4), simulando que la boya cierra el contacto indicando nivel de agua bajo. Lo del led azul es solo para simular la señal que posteriormente enviare a un rele.

El problema se me da si utilizo do while o do while. Es como si el pin digital 7 recibiera una señal HIGH. que no es posible puesto que aunque esta programado como input no esta recibiendo la señal del pin 4. A mi entender debería encenderse solo si al iniciar el sketch encuentra señal en el pin 7(que la logra cuando conecto el pin 4 con el 7).

Te comento que en el while si coloco: while(digitalRead(boya)==LOW); solo se deberia ejecutar si se cumple la condicion de que el pin 7 este LOW,. El misterio es que no se enciende, pero al darle alimentacion desde el pin 4 y no debiendose de encender el ledazul, el muy pillo se enciende.

He probado cambiando el pin digital7 por otro y sigue comportándose igual

Por lo que cuentas debería de funcionar bien, pero para asegurarte usa resistencias pull-downd para asegurar el estado del PIN.
Resistencias pull-up y pull-downd

¿ Hay que hacer alguna modificación en el código para indicar la existencia de una resistencia pulldown? he tratado de mirar el enlace pero no esta disponible. Según entiendo hay que colocar una resistencia a tierra desde el pin digital para asegurar un nivel bajo en dicho pin. Esto último lo he probado y continua funcionando mal. no cumple con la condicion del While. ni colocando el sketch en void setup ni en el loop ¿Puede ser algún problema de la placa?

Se me ha ocurrido usar un IF con la condición de que si la lectura en el pin 7 era high me enviara un mensaje al monitor serie y efectivamente ese pin esta recibiendo una señal HIGH sin estar alimentada :confused:

Hola,
Ya funciona el enlace que te deje.
No es necesario modificar el código.
Si tienes un nivel alto en el PIN incluso con la resistencia a masa, efectivamente tienes algún problema, revisa las conexiones, si puedes mide con un voltímetro el PIN.
Comparte el código tal cual lo tienes ahora.
Si puedes también un esquema de las conexiones.