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
//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.