Controllo di 2 coppie di servomotori con 4 pulsanti

Buonasera a tutti. Riscontro delle anomalie da parte dei servomotori 3 e 4 collocati rispettivamente sui pin 10 e 11. Quest'ultimi, una volta data energia all'intero sistema, a differenza dei servomotori 1 e 2 iniziano a muoversi senza alcun rigore logico, in particolar modo iniziano a tremare e a non rispondere all'effettivo comando.

Lo sketch ha la funzione di muovere i servomotori 1 e 2 in modo speculare con i pulsanti 1 che li muove di 150° in verso opposto e pulsante 2 che li fa tornare a 0°.
Analogamente dovrebbe avvenire con i servomotori 3 e 4 con i pulsanti 3 e 4
Lascio lo Sketch

#include <Servo.h>
int button1 = 4; //button pin, connect to ground to move servo
int press1 = 0;
int button2 = 5; //button pin, connect to ground to move servo
int press2 = 0;
int button3 = 6; //button pin, connect to ground to move servo
int press3 = 0;
int button4 = 7; //button pin, connect to ground to move servo
int press4 = 0;


Servo servo1;
Servo servo2;
Servo servo3;
Servo servo4;
int pos = 0;

void setup()
{
  pinMode(button1, INPUT);
  pinMode(button2, INPUT);
  servo1.attach(8);
  servo2.attach(9);
  servo3.attach(10);
  servo4.attach(11);
  digitalWrite(4, HIGH); //enable pullups to make pin high
  digitalWrite(5, HIGH); //enable pullups to make pin high

  servo1.write(0);
  servo2.write(150);
  servo3.write(0);
  servo4.write(180);
  
}

void loop()
{
  press1 = digitalRead(button1);
  if (press1 == LOW)
  {
    servo1.write(150);
    servo2.write(0);

    
  }    
  
  press2 = digitalRead(button2);
  if (press2 == LOW)
  {
    servo1.write(0);
    servo2.write(150);

    
  }

  press3 = digitalRead(button3);
  if (press3 == LOW)
  {
    servo3.write(180);
    servo4.write(0);

    
  }
  press4 = digitalRead(button3);
  if (press4 == LOW)
  {
    servo3.write(0);
    servo4.write(180);
  

  
}
}

La funzione pinMode() permette di abilitare la resistenza di pull-up. Se i pulsanti chiudono verso GND quando premuto allora deve essere una pull-up.

 pinMode(button1, INPUT_PULLUP);
 pinMode(button2, INPUT_PULLUP);
// ecc

Ovviamente rimuovi:

digitalWrite(4, HIGH); //enable pullups to make pin high
digitalWrite(5, HIGH); //enable pullups to make pin high

Queste:

int button4 = 7; //button pin, connect to ground to move servo

sarebbe meglio così:

const byte button4 = 7;

Risparmi 1 byte per pin e poi const sta per costante.

Ciao.

Buongiorno. Funziona tutto perfettamente. I problemi che avevo ieri sera sono stati risolti.
La ringrazio vivamente

Davide

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.