desktop

Cerrar ciclo de "void loop" Arduino

Hola, saludos. Necesito ayuda respecto mi primera práctica, ya que soy nuevo en esto de la programación de Arduino.
E
l programa consiste en "un control de motor por PWM" en el cual estoy utilizando un potenciómetro y un motor DC.
L
o que quiero saber es qué funciones debo de utilizar para poder cerrar el ciclo dentro del "void loop" y que se vuela ha activar cuando yo mueva la manija del potenciómetro.
I
nvestigué por la red pero no encuentro nada conciso.
E
n caso fuera rechazado este tema, muchas gracias por el tiempo.

PD: Soy nuevo en el campo de la programación en Arduino.

Dejo la programación aquí.
C:
int pin_motor = 10;
long valor;
float motor;

void setup(){
  Serial.begin(9600);
}

void loop(){
  motor = analogRead(A0)/4;
  analogWrite(pin_motor,motor);
  Serial.print("valor del motor: ");
  Serial.println(motor);
  delay(500);

  // leemos del pin A0 valor
  valor = analogRead(A0);

  //Imprimimos por el monitor serie
  Serial.print("El valor general es = ");
  Serial.println(valor);
  delay(500);

   motor = ((motor*100)/255);
   Serial.print("el porcentaje es: ");
     Serial.print("%");
  Serial.println(motor);
  delay(500);
}
 
Última edición por un moderador:
El bucle loop está cerrado, todo que va entre las llaves {} es el bucle loop
Tu lo tienes cerrado.
 
Antes que nada aclaro que nunca programé Arduino.

Si no entiendo mal la consulta, necesitas que se vuelva a ejecutar todo lo que está dentro de "viod loop" cuando se mueva el cursor del potenciómetro.

Si es así, al finalizar "viod loop" necesitas comparar el estado anterior del potenciómetro con el actual, y cuando sean diferentes, volver a ejecutar todo lo que está dentro de "viod loop".

Hace AÑOS que no programo en C, pero si no me acuerdo mal lo podrías hacer con un while(), o creo que con un goto().
 
En c hay que hacer un bucle, el void main(){} solo se ejecuta una vez y dentro hay que poner un while(true){} si quieres que se repita para siempre.

En Arduino void loop(){} se repite siempre por si mismo.

En el ejemplo que pone el preguntante el bucle está cerrado y se repite siempre*


* Claro, con el sembrador de delays se repite cuando pase por el quilo y medio de delays que hay ahí, pero repetirse se repite, lo que pasa es que no se repite hoy, se repite maññññññññiania. En ese caso se repite cada dos o cuatro segundos , no me he parado a contar delays, cuando los veo me sale un sarpullido...
 
El truco de la programación en Arduino es hacer que void setup() inicialize todo mientras void loop() corre una y otra vez el código a ejecutar. Al principio metes delays a diestra y siniestra hasta que descubris que cada vez que entras a un delay todo se paraliza. La clave es evitar los delays haciendo que el código haga una cosa u otra usando flags o variables de condición (ojo donde y como las definis). La forma de programar es diferente a la clásica del C# aunque la sintaxis y semántica del código es la misma. En Arduino el buen codigo esta corriendo siempre llevado de las orejas por void loop(). Cambia sus acciones guiado por las banderas o las variables de condición. Cuando lo logras vas a notar que el código es muy rapido y al no haber delays la reacción a un cambio es muy veloz. 😉
 
Más o menos sería así en c

Void main(){
Aquí la inicialización de parámetros, puertos...

While(true){

Aquí el bucle de control
} // Cierra el while
}// Cierra el main

En Wiring es así

Void setup(){
Aquí la inicialización
}
Void loop(){
Aquí el bucle de control
}
 
Atrás
Arriba