Segundo o teu código, desde que o sinal ligado no pino 8 esteja no nível HIGH (5V) então o servo estará a fazer loops entre os 0 e 90º.
Acho que não é bem isso que queres!
Não tenho o hardware pelo que certamente serão necessário ajustes.
Aproveitando o teu código:
#include <Servo.h>
#define POS_MAX 90
#define POS_MIN 0
Servo myservo;
void setup()
{
pinMode(8, INPUT);
myservo.attach(9);
myservo.write(POS_MIN);
}
void loop()
{
if (digitalRead( 8 ) == HIGH)
myservo.write(POS_MAX);
else
myservo.write(POS_MIN);
delay(5);
}
Em princípio, isto será o suficiente. Em todo o caso, presumo que queiras uma abertura ainda mais lenta.
Se for o caso, então o código poderá ficar assim:
#include <Servo.h>
#define POS_MAX 90
#define POS_MIN 0
Servo myservo;
int pos;
int switch;
int old_switch;
void setup()
{
pinMode(8, INPUT);
myservo.attach(9);
myservo.write(POS_MIN);
switch=digitalRead( 8 );
old_switch=switch;
}
void loop()
{
switch = digitalRead( 8 );
if ( switch != old_switch)
{
old_switch=switch;
if(switch=HIGH)
for(pos=POS_MIN; pos<=POS_MAX; pos++)
{
myservo.write(pos);
delay(5);
}
else
for(pos=POS_MAX; pos>=POS_MIN; pos--)
{
myservo.write(pos);
delay(5);
}
}
delay(5);
}
Ambos os códigos têm um bug (que não é bug) quando desligas o carro, tens que o fazer sem a marca-a-trás ligada, caso contrário vais ficar com o sistema aberto, a menos que a mola do sistema de abertura tenha força suficiente para mover o motor para trás quando é desligada a alimentação.
O que tens a fazer é montar tudo e ajustar os valores limites de pos_max e pos_min e os delays que estão dentro dos "for" que me parecem pequeninos para fazer uma abertura suave.