Aclaración de código... controlar servo con potenciometro lineal (SOLUCIONADO)

HOLA a todos !!!

Como algunos saben ando utilizando servo para controlar el enfoque en cámaras de video etc.
Me encontre con esto esta en ingles espero no sea un problema :slight_smile:

Al parecer lo que hace, es que controla el movimiento del servo con un potenciometro lineal. básicamente lo mismo que podemos hacer con el ejemplo de servo (Knob) que esta integrado en Arduino

Mi pregunta es.... por que necesita hacerlo tan diferente ?? el resultado es el mismo o no?

De antemano gracias

El resultado es mismo; de hecho.

Según lo que entendí del código ese, las extras que tiene son para dos cosas:

Botón de "modo programar": este modo es para determinar y "memorizar" el ángulo máximo de giro (la proporción con el potenciómetro se ajusta basado en el máximo).
ADVERTENCIA: de este modo se debe salir lo más pronto posible, porque a como está el código, se escribe a la EEPROM cada 2 milisegundos aprox.; lo cual agotaría la vida útil de la dirección cero, en... 200 segundos :o (con una vida teórica de 100 mil ciclos).

Botón de "reversa": mientras se mantenga presionado, el servo girará en la posición opuesta a la indicada por el potenciómetro (eso significa que estando exactamente en el medio, no tendría ningún efecto).

Aparte de todo lo anterior, hace lo mismo que en ejemplo.

Espero haberte despejado la duda... :slight_smile:

lucario448, para que se escriba en la EEPROM, no se debe usar esta sentencia EEPROM.write, o me equivoco?

Botón de "modo programar": este modo es para determinar y "memorizar" el ángulo máximo de giro (la proporción con el potenciómetro se ajusta basado en el máximo).

:wink: aaaa!! es para eso...... ! muchas gracias ! es justo lo que necesito, pero ya no me dan ganas de usarlo :o después de lo que dices...

alguien sabe como se puede lograr determinar el ángulo máximo de giro de otra manera??

pero el codigo que usas no escribe en la eeprom, por lo que veo

Seguro?

Observa con atención:

void asetukset(){
  editTila = 1;
  digitalWrite(led, HIGH);
  delay(250);           // Delay for the button so that only one press is detected. 
  
  while (editTila == 1){ // If edit mode = 1 then stay in this loop
    
    servoHigh = ajaServoa(servoLowPreset, servoHighPreset);

    if ((digitalRead(buttonProgMode)) == HIGH){ // if button is pressed then exit the loop
    editTila = 0;
    delay(250);  // Delay for the button so that only one press is detected
  }
  }

  EEPROM.write(0, servoHigh); // Saves valoue to Eeprom memory 
  digitalWrite(led, LOW);
  
}

Lo ves?

cuchara:
pero ya no me dan ganas de usarlo :o después de lo que dices...

alguien sabe como se puede lograr determinar el ángulo máximo de giro de otra manera??

Ups... :sweat_smile: retiro lo dicho en la parte de que en la EEPROM se escribe muy rápido.

Mientras escribía el post anterior me invadía el sueño, entonces no profundicé demasiado el código.
El EEPROM.write solo ocurre cuando se acaba el while (al salir del "modo programar"). Por eso me retracto de lo que dije en esa parte... :o

me retracto, yo me referia al ejemplo de arduino, knob, si el que esta en el link tenes toda la razon usa la eeprom. Y con respecto a los 100.000 no es nada para algunas aplicaciones que se las use.

son 8.333 ciclos al mes
277 ciclos por dia
11 1/2 ciclos por hora
digamos es mas poco que mucho, viéndolo desde mi optica, pero leyento estos comentarios a una consulta que hacen parece que haciendo nivelación de desgaste dura mas. arduino - 100k EEPROM writes "per bit" or as a whole? - Electrical Engineering Stack Exchange

Oh... hubo un mal entendido entonces.
Pues sí, el ejemplo no lo usa; mientras que el código modificado sí. Eso es correcto.

Y con la última corrección que hice después de entender el código, ahora podría decir que la vida útil de la EEPROM no será un problema...

Ok, pues muchas gracias por su tiempo y la explicación...