Go Down

Topic: servomotor con tres posiciones segun boton pulsado (Read 652 times) previous topic - next topic

flash_arduino

Jul 14, 2020, 08:29 pm Last Edit: Jul 14, 2020, 08:31 pm by flash_arduino
Buenas, estoy intentando poner en marcha un servomotor con tres posiciones de funcionamiento según el pulsador que este "on". Con dos no tengo problema porque lo muevo a donde yo quiero, pero el tercer pulsador no ejecuta la orden correcta.

Digamos:
Pulsador 1. actúa y servomotor a posición 180.
Pulsador 2. actúa y servomotor a posición 0.
Pulsador 3. actúa y servomotor a posición 90.

En ningún caso estarán los tres pulsados al mismo tiempo.

Pulsadores en pull down.
Utilizo un arduino nano.

Adjunto código

Code: [Select]


//Mi configuración de los botones es de tipo "Pull Down", si pulso el botón, pongo 0V en la entrada.


#include  <Servo.h>   //Incluyo la librería "Servo.h"

//__________________________________________________________________________________________

Servo servomotor;  //Creo un objeto llamado servo y los objetos botón 1, botón 2 y botón 3
int boton1 = 2; 
int boton2 = 3;
int boton3 = 4;
int angulo = 0;   //Variable para el ángulo, inicia en 0

//___________________________________________________________________________________________
//Secuencia de inicial

void setup() {

  Serial.begin (9600); //Inicio el monitor serial para ver la posición en pantalla
  servomotor.attach(7);  //Conecto el servomotor al Pin digital PWM 7 del Arduino.
  pinMode(boton1, INPUT);
  pinMode(boton2, INPUT);
  pinMode(boton3, INPUT);
 
 
  servomotor.write(angulo = 90);//Lleva el servo a la posición 90º. Puedo elegir el angulo que quiera.
}
//____________________________________________________________________________________________

void loop() {

  if (digitalRead(boton1) == LOW) //condición "if" Si la entrada boton1 es 0V haz lo siguiente:
  {
    angulo++; //Incrementa el valor del angulo.
    if (angulo >= 179)    //condición "if" Si el angulo es menor o igual a 180 haz lo siguiente:
       {angulo = 180;}   //Estable el angulo en 180º
  }
  if (digitalRead(boton2) == LOW) //condición "if" Si la entrada boton2 es 0V haz lo siguiente:
  {
    angulo--;  //Disminuye el valor del angulo.
    if (angulo <= 2)     //condición "if" Si el angulo es mayor o igual a 0 haz lo siguiente:
       {angulo = 1;}          //El angulo no disminuye mas aya de 0 grados
  }
 if (digitalRead(boton3) == LOW) //condición "if" Si la entrada boton3 es 0V has lo siguiente:
 {
    angulo = 90;   
 }
 
  servomotor.write(angulo);  //Envía las ordenes al servo para que escriba el angulo.
  Serial.println (angulo);   //Imprime en la pantalla monitor serial el angulo.
  delay(10);  // Establece un tiempo de espera en 10 milisegundos.
}



Después de leer varias paginas opte por un código y lo modifique. El que he puesto aqui es una de las pruebas pero he intentado poner diferentes opciones para la tercera condición. Realmente el pulsador 3 lo puedo suprimir ya que lo que quiero que si el botón 1 u 2 no están pulsados el servomotor debe estar en la posición 90.

He probado y no consigo, alguna idea. Parto de una base pobre pero puedo entenderme con electrónica y programación. 

Gracias de antemano. 

urada

Yo esta librería todavía no la he tocado, pero se me ocurre una pregunta:

¿has probado con otras cifras?

Por ejemplo  pulsador1  30º
                 
                 pulsador2  60º

                 pulsador3  45º

¿te sucede lo mismo?

Un saludo

flash_arduino

de momento si, da igual la configuración. He cambiado hasta las resistencias y los pulsadores. Y como no me fiaba lo he implementado en una placa soldando componentes por si daba problemas la protoboard.

surbyte

Estas suponiendo que el botón 3 funciona, que tal si no lo hace?

Agrega a tu if () correspondiente al botón 3 esto

Code: [Select]
Serial.println("Activo boton 3");

y verifica que cuando lo presiones leas Activo Boton 3.

Go Up