Hola, este es mi primer post
Estoy realizando un proyecto, en el que mediante un pote de una vuelta y sin tope, estoy obteniendo el ángulo de rotación (360°), obviamente conectado al pin del ADC de un Arduino UNO. Ahora, al oprimir un botón, debo hacer que el valor leído se vaya a cero (0°), sin importar la posición del pote, a manera de que a partir de este nuevo origen pueda comenzar una rotación de nuevo...
Espero se entienda lo que trato de realizar, cualquier sugerencia es de mucha ayuda ya que llevo semanas tratando de encontrar alguna solución.
Bien!!
Y entonces que has hecho?
Lee el valor del pote que sabrás ira de 0 a 1023, asi que por mas que no tenga freno los valores no cambiarán, lo que plantea un problema que ya veremos como se resuelve.
El boton deberá tomar un valor intermedio y a partir de ese valor iniciará la medición angular.
Comienza leyendo el potenciometro y luego veremos como convertimos todo en una lectura de 0-360°
Lee las normas por favor, mira como se postean los códigos.
Veamos si es esto lo que quieres:
int potenciomentro = A0; // Pin de lectura Potenciometro
int boton = 2;// Pin boton
int marca;
void setup() {
Serial.begin(9600);
pinMode (boton, INPUT_PULLUP);
}
void loop() {
if (digitalRead (boton) == LOW) {
marca = analogRead (potenciomentro);
}
Serial.println (grados());
// ó
int giro = grados();
}
int grados () {
int valor = analogRead (potenciomentro);
if (valor > marca) {
valor = valor - marca;
}
else {
valor = 1023 - marca + valor;
}
valor = map (valor, 0, 1023, 0, 360);
return valor ;
}
Saludos.
¿El potenciómetro se va a girar siempre en el mismo sentido?
Sino no hay forma de saber en que sentido se giró, entonces para un valor leído de, por ejemplo, 90° no sabemos si se giró 90° hacia la derecha (en sentido de las agujas del reloj) o 270° hacia la izquierda.
Teniendo ese detalle en mente, a primera vista, creo que el código del amigo @gonpezzi es la solución que buscas.
Asi es @anon90500195, no siempre se gira en el mismo sentido, pero basta con que se indique 90º (si se giró en sentido horario) o 270º (si se giró en sentido antihorario) voy a revisar el código que propone @gonpezzi
Agradezco tus observaciones
Saludos
Hola @gonpezzi al parecer tu código resuelve el problema al girar el pote, cuando se presiona el botón, pero ahora si no lo presiono no me marca el valor del giro del pote (queda fijo en 360º) lo que hice fue modificar tu código, para tener el valor sin presionar el botón.
Me gustaría saber si lo que hice es correcto o existe otra forma...
Saludos
int potenciomentro = A0; // Pin de lectura Potenciometro
int boton = 2;// Pin boton
int marca;
int x;
void setup() {
Serial.begin(9600);
pinMode (boton, INPUT_PULLUP);
digitalWrite(boton, LOW);
}
void loop() {
if (digitalRead (boton) == LOW) {
marca = analogRead (potenciomentro);
x = map (marca, 0, 1023, 0, 360);
Serial.println(x);
}
else if (digitalRead (boton) == HIGH) {
Serial.println (grados());
// ó
int giro = grados();
}
}
int grados () {
int valor = analogRead (potenciomentro);
if (valor > marca) {
valor = valor - marca;
}
else {
valor = 1023 - marca + valor;
}
valor = map (valor, 0, 1023, 0, 360);
return valor ;
}
Si, es correcto y existen otras formas. Lo que tienes que entender es que se ha creado una nueva función llamada " grados () ", que sustituye al antiguo "analogRead (potenciometro)", que calcula el valor a partir de una posición obtenida cuando pulsas el botón o no, memorizando esta posición hasta una nueva pulsación o apagado.
Como la uses dependerá de tu código, yo te puse 2 ejemplos o directamente para verlo:
Serial.println (grados());
O asignándoselo a una variable para un posterior calculo:
int giro = grados();
Todo dependerá de tu código o de lo que quieras hacer, súbelo o se un poco más extenso en la explicación del problema.
Saludos.
This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.