2 servi 1 potenziometro (1 servo va da 0 a 180 e l'altro da 180 a 0 gradi)

Ciao a tutti,avrei bisogno del vostro aiuto,
ho collegato 2 servi ad arduino UNO
con batterie esterrne
e un potenziometro che fa spostare i servi da 0 a 180 gradi,
l'unico intoppo che non riesco a risolvere è che vorrei che un servo vada da 0 a 180 mentre l'altro da 180 a 0 con la rotazione del potenziometro mi sapreste aiutare?
grazie!!

#include <Servo.h>
Servo myservo1;
Servo myservo2;

int potpin = 0;

int val;

void setup(){
myservo1.attach( 8 );
myservo2.attach(9);

Serial.begin(9600);
}

void loop() {
val = analogRead(potpin);

val = map(val, 0, 1023, 0, 180);
val = map(val, 1023, 0, 180, 0); (QUESTA RIGA DOVREBBE FARE ANDARE L'ALTRO SERVO AL CONTRARIO...MA OVVIAMENTE MI BLOCCA I DUE SERVI SCRITTA COSI....)

myservo1.write(val);
myservo2.write(val);

Serial.println(val);
}

grosso errore di fondo.

90 equivale al ser5vo in posizione centrale.
0 tutto a sinistra
180 tutto a destra

quindi è perfettamente inutile la seconda map

come faccio a far muovere il secondo servo al contrario sempre con lo stesso potenziometro?il mio problema è questo mi serve che uno faccia il contrario dell'altro...che comando devo scrivere?

val = map(val, 0, 1023, 0, 180);
val = map(val, 1023, 0, 180, 0)

se fai così poi il risultato della prima map viene ignorato, perchè in val troverai solo e sempre il valore della seconda map, le strade sono due:

  1. cambi il nome alla seconda variabile:
val = map(val, 0, 1023, 0, 180);
val2 = map(val, 1023, 0, 180, 0)

...

myservo1.write(val);
myservo2.write(val2);
  1. dato che il secondo servo deve fare il contrario del primo perchè non fare:
val = map(val, 0, 1023, 0, 180);
val2 = 180 - val;

...

myservo1.write(val);
myservo2.write(val2);
val = map(val, 0, 1023, 0, 180);
val2 = map(val, 1023, 0, 180, 0)

Esce il stesso numero; semmai:

val = map(val, 0, 1023, 0, 180);
val2 = map(val, 0, 1023, 180, 0)

Ciao Uwe

giusto, non mi ero accorto dei parametri d'ingresso invertiti, mi sono accorto di un'altra cosa che non va:

int rawADC = analogRead(pin);
val = map(rawADC, 0, 1023, 0, 180);
val2 = map(rawADC 0, 1023, 180, 0);

Comunque mi sembra più intelligente la seconda soluzione

Grazie ragazzi ho provato come mi avete detto voi,già oggi avevo messo il val2 con i parametri invertiti ma anche ora nulla mi da errore su val2...
uwe l'ultimo comando che hai scritto non me lo prende..
scusate ragazzi,purtroppo non sono avanzato tecnologicamente con arduino..sono alle prime armi.. :blush:

devi dichiarare anche val2, aggiungila dove ci sono le altre:

int potpin = 0;

int val, val2;

GRAZIE!!! Ora Funziona tutto!!!
rilascio il codice per chi come me ne avesse bisogno in futuro!!!
grazie federico e uwe!!!!
AUGURI!!

#include <Servo.h>
Servo myservo1;
Servo myservo2; 
int potpin = 0;
int val;int val2;
 
void setup(){
myservo1.attach(8); 
myservo2.attach(9);
Serial.begin(9600);
}
 
void loop() {
val = analogRead(potpin);
 
val = map(val, 0, 1023, 0, 180);
val2 = 180 - val;


myservo1.write(val); 
myservo2.write(val2); 

 
Serial.println(val);
}