Pueden detallarme las funciones d las líneas que faltan del Sketch? [SOLUCIONAD.

Quisiera aprender un poco más sobre este Sketch que me pasó gentilmente "max_saeta". Hay una línea que escribió que no entiendo muy bien de que se trata """//Decomentar si quiere que se repita la accion cada diez segundos""", igualmente el Sketch funciona perfecto. Pero quisiera que me indiquen para que sirve cada línea mediante: """// descripción""".

Si mostrases el código sería de gran ayuda.

Perdón, acá lo dejo:

unsigned long tiempo; //Variable para el control
unsigned long tiempo_max= 10000; //Variable para el control
int ledpin= 13;
int buttonPin = 11;
boolean estado= false;

void setup(){
pinMode(ledpin, OUTPUT);
pinMode(buttonPin, INPUT);
digitalWrite(buttonPin,HIGH); //Activa PullUp resistor
digitalWrite(ledpin,LOW);
}

void loop(){

while(digitalRead(buttonPin)==LOW){
if(millis()-tiempo >= tiempo_max){
ejecuta();
//tiempo= millis(); //Decomentar si quiere que se repita la accion cada diez segundos
}
}

digitalWrite(buttonPin,HIGH); //Activa PullUp resistor
digitalWrite(ledpin,LOW);
tiempo= millis();
}

void ejecuta(){
digitalWrite(ledpin,HIGH);
delay(1000);
digitalWrite(ledpin,LOW);
}

sketch_sep12a.ino (743 Bytes)

acá está todo el código comentado (un 99%):

unsigned long tiempo; //Variable para el control
unsigned long tiempo_max= 10000; //Variable para el control
int ledpin= 13; //aqui dice que para "ledpin" se utilizara el pin 13
int buttonPin = 11;  //aqui dice que para "buttonpin" se utilizara el pin 11
boolean estado= false; //variable tipo boolean


void setup(){ //en "void setup()" se establecen pines y más cosas.
  pinMode(ledpin, OUTPUT); //establece la variable "ledpin" como un pin OUTPUT (salida)
  pinMode(buttonPin, INPUT); //establece la variable "buttonpin" como un pin INPUT (salida)
  digitalWrite(buttonPin,HIGH); //Activa PullUp resistor
  digitalWrite(ledpin,LOW); //apaga el led
}

void loop(){ //todo el código dentro de "void loop()" se ejecuta como un bucle infinito

  while(digitalRead(buttonPin)==LOW){ //while repite todo lo que está en sus "corchetes" si buttonPin no está presionado.
    if(millis()-tiempo >= tiempo_max){ //si la variables millis  menos variable tiempo es igual o mayor que la variable tiempo_max se ejecutara la acción a continuación.
      ejecuta(); //lama a "ejecuta()"
      //tiempo= millis(); //Decomentar si quiere que se repita la accion cada diez segundos
    }
  }
  
  digitalWrite(buttonPin,HIGH); //Activa PullUp resistor
  digitalWrite(ledpin,LOW);  //apaga el led
  tiempo= millis(); // nose :/
}

void ejecuta(){  //aquí se define "ejecuta()"
  digitalWrite(ledpin,HIGH); //enciende el led
  delay(1000); //espera un segundo (exrpesado en milisegundos)
  digitalWrite(ledpin,LOW); //apaga el led
}

Pra dudas como estas tambíen puedes utilizar la documentación oficial de arduino.

Info extra:

millis() devuelve el numero de milisegundos desde que arduino se inició. millis() se desbordará (volvera a 0) en 50 días.

tecnocroco, gracias por tu voluntad de ayudarme, pero quisiera un poco más de info. Por ejemplo, la línea que dice: """//Decomentar si quiere que se repita la accion cada diez segundos"""" ó esta otra: """//Activa PullUp resistor""" lo que entiendo de ésta última, es que no es necesario colocar una R (PullUp) externa, como que se activaría una R interna del micro. Es lo que yo interpreto, tal vez no sea así. Vengo de "La vieja escuela" de la electrónica, pero con esto de la programación estoy como en 1º grado :frowning:

tecnocroco:
Info extra:

millis() devuelve el numero de milisegundos desde que arduino se inició. millis() se desbordará (volvera a 0) en 50 días.

tecnocroco, por lo que comentás, el Sketch tiene un error? Se puede obviar ese comando ""millis()""?

eso de "//decomentar si[blah blah blah]..." se refiere a que si quitas las dos primeras barras de la línea la acción se repetirá cada diez segundos.
y la del pull-up creo que se refiere a que el pull-up interno del ardu se activa para el correcto funcionamiento del boton.

walmar:

tecnocroco:
Info extra:

millis() devuelve el numero de milisegundos desde que arduino se inició. millis() se desbordará (volvera a 0) en 50 días.

tecnocroco, por lo que comentás, el Sketch tiene un error? Se puede obviar ese comando ""millis()""?

me temo que no (eso creo)

tecnocroco, lo que hace el Sketch es: Si mantenés presionado un pulsador (ó entrada HIGH) por 10 seg. ó más, se ejecuta una acción, en este caso, encender el led del Pin 13. Si tenés la forma de hacerlo de una manera más sencilla, y evitando lo que me comentaste <mills()>, te lo agradecería. O quién sepa y quiera ayudarme.

Saludos.
Dime que dudas tienes a ver si puedo ayudarte.

max_saeta, era para tratar de aprender sobre el código que me pasaste inicialmente, funciona OK, pero hay una parte donde me escribiste algo que no entendí: """//Decomentar si quiere que se repita la accion cada diez segundos"""" ó esta otra: """//Activa PullUp resistor""" lo que entiendo de ésta última, es que no es necesario colocar una R (PullUp) externa, como que se activaría una R interna del micro. Es lo que yo interpreto, tal vez no sea así.

También se me sumó una duda, respecto a un comentario de otro usuario que leyó tu programa, es como si funcionara por 50 días y quedaría en Standby??? Te adjunto el comentario:

tecnocroco:

walmar:

tecnocroco:
Info extra:

millis() devuelve el numero de milisegundos desde que arduino se inició. millis() se desbordará (volvera a 0) en 50 días.

tecnocroco, por lo que comentás, el Sketch tiene un error? Se puede obviar ese comando ""millis()""?

me temo que no (eso creo)

Ok. Primero. El codigo se repite una sola vez y luego espera que se libere el pulsador para volverse a ejecutar. Pero si quitas los // se repite cada diez segundos, o lo que establescas como tiempo_max aunqur no sueltes el boton.

Segundo, es cirrecto el arduino tiene resistencias pullup internas. Asi que solo debes conectar el boton al pin 11 y gnd. Aunque la resistencia externa no es necesaria. No esta de mal colocar una de 10k ohm.

Por ultimo lo que comentaron es que millis() se reinicia cada 50 dias, aunque no se que tiempo exacto, eso no afecta al programa, ya que constantemente se evalua millis() a traves de tiempo= millis(); A lo mucho cada 50 dias el sketch fallara una sola vez y para eso tendrias que estar presionando el boton justo cuando se desborda.
Se le llama desbordar cuando una variable llega a su valor maximo y retorna a cero.

max_saeta, muchísimas gracias por la ayuda y la paciencia!!! Vengo de la electrónica tradicional y esto es nuevo (y complicado) para mí. Igualmente voy a tratar de aprender. Todavía, donde vivo, no me he enterado sobre cursos de programación de Arduino. Ojalá algún día pueda entender mejor este lenguaje. Y obviamente tratar de retribuir conocimientos a este foro, que desinteresadamente los usuarios me han brindando su ayuda, principalmente vos.
Bueno... volviendo al tema: Entendí muy bien tu explicación! Y me quedo tranquilo respecto al "Desbordamiento" del µC. También voy a tener en cuenta las R adicionales externas PullUp. Y respecto a la modificación de repetición, también lo he comprendido.

Saludos cordiales.