Go Down

Topic: Problema activando un segundo servo con un pulsador (Read 86 times) previous topic - next topic

gideon167

estoy haciendo una caja que funciona de manera que pulsas cinco veces el primer pulsador y se enciende cinco veces un LED, al encenderse cinco veces se mueve un servo, la cosa es que despues de que eso pase necesito mover el myservo2 con el pulsador conectado en el pin 4 pero no funciona, el servo no se mueve.
Code: [Select]
#include <Servo.h>

Servo myservo;  // create serv

Servo myservo2;  // create serv

int conta = 0;  //Variable para guardar el conteo de los pulsos
 
//------------------------------------
//Funcion principal
//------------------------------------
void setup() // Se ejecuta cada vez que el Arduino se inicia
{
    myservo.attach(9);
    myservo2.attach(11);// attaches the servo on pin 9 to the servo object

  Serial.begin(9600);   //Inicia comunicación serial
  pinMode(2,INPUT); 
  pinMode(4,INPUT); //Configura el pin 2 como una entrada, pulsador
  pinMode(13,OUTPUT);   //Configura el pin 13 como una salida, LED
   myservo.write(0); 
      myservo2.write(15); 

}
//------------------------------------
//Funcion ciclicla
//------------------------------------
void loop() // Esta funcion se mantiene ejecutando
{           //  cuando este energizado el Arduino
    // Si el pulsador esta oprimido

  if ( digitalRead(2) == HIGH )
  {
      // Si el pulsador no esta oprimido, flanco de bajada
      if ( digitalRead(2) == LOW )
      {
         conta++;//Incrementa el contador
           digitalWrite(13, HIGH);
           delay(200);
           digitalWrite(13, LOW);
           // turn the LED on (HIGH is the voltage level)
           

      }
     
       if ( digitalRead(4) == HIGH )
  {

              myservo2.write(80); 
         

      }// sets the servo position according to the scaled value
  }
 
   
 

  // Si el valor del contador es 5
  if (conta==5)
  {
  myservo.write(90);   
 
 
  }



  // Si el valor del contador es 8
 
 
}

ArduMyth

Primero es imposible que esto pueda ocurrir:


  if ( digitalRead(2) == HIGH )
  {
      // Si el pulsador no esta oprimido, flanco de bajada
      if ( digitalRead(2) == LOW )
      {


El if está anidado, así que es imposible que entre cuando el estado esté en false porque para llegar a esa línea el estado debe ser true.

Segundo no hay ni un solo debounce en el pulsador, y pasa cuando no se tienen que hay efecto rebote, esto se soluciona usando un timer con millis() o bien con interrupciones.

Cambia los if() y mira ejemplos con millis().

Saludos.

Go Up