Problema sketch per comandare 2 servo [risolto]

Partendo da questo sketch qui sotto, con il quale sono riuscito a far muovere i miei due servo contemporaneamente da 0 a 100° a premere di un pulsante, volevo sapere se qualcuno riuscisse a modificarlo per far si che i servo si muovano al contrario sempre contemporaneamente..cioè al premere del pulsante un servo fa da 0 a 100° e l'altro fa da 100 a 0°...
Spero che qualcuno riesca a darmi una mano xkè sono proprio bloccato!! =( =( :slight_smile: :slight_smile:

#include<Servo.h>
#define Led 13
#define Occhi 2// Il Pin del Led
#define Bottone 7
#define DTesta 9
#define STesta 10

int Valore = 0; // Valore servirà per conservare lo stato del Pin di Input
int Vecchio_Valore = 0; // Questa variabile conserva il valore precedente di "Valore"
int Stato = 0; // 0 = Led spento e 1 = Led acceso
int statoPrecedente=0;
int vel=1;
int angleUP=100;
int angleDOWN=0;

Servo servoA;
Servo servoB;

void fadeup();
void fadedown();
void openElmo ();;
void closeElmo ();

void setup()
{
pinMode(Occhi, OUTPUT);
pinMode(Led, OUTPUT); // Indica ad Arduino che Led è un Output
pinMode(Bottone, INPUT);
pinMode(DTesta, OUTPUT); // e che Pulsante è un Input
pinMode(STesta, OUTPUT); // e che Pulsante è un Input


servoA.attach(DTesta);
servoB.attach(STesta);
}

void loop()
{
Valore = digitalRead(Bottone); // Legge il valore dell'Input e lo conserva
delay(20);
if ((Valore == HIGH) && (Vecchio_Valore == LOW))  {Stato = 1 - Stato;}
Vecchio_Valore = Valore;

if (Stato == 1 && statoPrecedente!=1) {openElmo();
fadedown();}

if (Stato == 0 && statoPrecedente!=0) {closeElmo();
fadeup();}

}

void fadeup(){
int brightness=0;
int fadeamount=3;
for(brightness=0;brightness<255;brightness=brightness+fadeamount){
analogWrite(Occhi, brightness);
delay(vel);
}
if(brightness!=0){statoPrecedente=0;}
}

void fadedown(){
int brightness=255;
int fadeamount=5;
for(brightness=255;brightness>=0;brightness=brightness-fadeamount){
analogWrite(Occhi, brightness);
delay(vel);
}
if(brightness!=255){statoPrecedente=1;}
}

void openElmo(){
int i=0;
for(i=angleDOWN;i<angleUP;i+=1){
digitalWrite(Led, HIGH);
servoA.write(i);
servoB.write(i);
delay(vel);
}
if(i==angleUP){statoPrecedente=1;}
}

void closeElmo(){
int i=0;
for(i=angleUP;i>angleDOWN;i-=1){
digitalWrite(Led, LOW);
servoA.write(i);
servoB.write(i);
delay(vel);
}
if(i==angleDOWN){statoPrecedente=0;}
}

se qualcuno riuscisse a modificarlo

sì, te :slight_smile:

perchè non ci racconti cosa fanno le varie funzioni, in particolare openElmo() e closeElmo()??

for(i=angleUP;i>angleDOWN;i--)
{ digitalWrite(Led, LOW);
  servoA.write(i);               // i => up to down  con i che diminuisce
  servoB.write(angleUP-i);   // UP-i    con i che aumenta, siccome lo sottraggo
  delay(vel);
}

nid, se gli dai il codice già pronto...

proprio perchè è una cosa così semplice che dovresti fare in modo che lo capisca da solo

lesto:
nid, se gli dai il codice già pronto...

proprio perchè è una cosa così semplice che dovresti fare in modo che lo capisca da solo

L'ho fatto più che altro per fargli togliere dal ciclo for quell'orribile i-=1 :grin:

??
perchè orribile? non ti piacciono i for al contrario?

Effettivamente era una vera cavolata....mi ero impuntato su una cavolata....
Comunque adesso sorge un problema che spero sia risolvibile...ogni volta che attacco la corrente uno dei due servo va già all'altra posizione...cioè si trovano scoordinati fino a che non premo il pulsante per la prima volta...è un problema risolvibile?? da quello che vedo mi sembra come se invece che stare uno a 100 e l'altro a 0, appena si attacca la corrente vadano tutti e due a 0...
Consigli su cosa cambiare??

emanuele2891:
Effettivamente era una vera cavolata....mi ero impuntato su una cavolata....
Comunque adesso sorge un problema che spero sia risolvibile...ogni volta che attacco la corrente uno dei due servo va già all'altra posizione...cioè si trovano scoordinati fino a che non premo il pulsante per la prima volta...è un problema risolvibile?? da quello che vedo mi sembra come se invece che stare uno a 100 e l'altro a 0, appena si attacca la corrente vadano tutti e due a 0...
Consigli su cosa cambiare??

setup() :wink:

Giustissimo!!
risolto tutto e tutto funzionate!! :slight_smile: :slight_smile: :slight_smile:

è che essendo all'inizio con arduino non ci penso anche se le cose sono facilissime....

Grazie a tutti!!

Sarebbe utile modificassi il titolo nel primo post, aggiungendo [Risolto]. :smiley: