Programar servo con pulsador

Hola! estamos haciendo un trabajo de recerca y necesitamos que al apretar un pulsador, el servo se mueva 90 grados y se mantenga unos 10 segundos y luego baje por su cuenta.
Hemos conseguido que haga el movimiento al pulsarlo pero automaticamente al dejar de pulsar retorna a la posici贸n inicial.
Si alguien nos pudiera ayudar, os estar铆amos muy agradecidas! :wink: :grinning:

Este es el programa que hemos usado:

#include <Servo.h>

Servo myservo;

const int buttonPin = 2;
int val;
int buttonState = 0;

void setup()
{
myservo.attach(9);
pinMode(buttonPin, INPUT);
}

void loop()
{
buttonState = digitalRead(buttonPin);
if (buttonState == HIGH) {
val = 90;
}
else {
val = 0;
}
myservo.write(val);
delay(15);
}

LaiaIrene: Hola! estamos haciendo un trabajo de recerca y necesitamos que al apretar un pulsador, el servo se mueva 90 grados y se mantenga unos 10 segundos y luego baje por su cuenta. Hemos conseguido que haga el movimiento al pulsarlo pero automaticamente al dejar de pulsar retorna a la posici贸n inicial. Si alguien nos pudiera ayudar, os estar铆amos muy agradecidas! ;) :grinning:

si no poneis el codigo que estais usando y un esquema o explicacion de como esta conectado va a ser dificil saber que esta fallando,aunque si comentas que el servo funciona,seguramente sera del codigo.si no sabeis como postar el codigo ,echarle un ojo a las normas del foro,solo os llevara un par de minutos.

Hay que leer un poco los tutoriales antes de preguntar cada cosa que no sale a la primera.

Debes usar una variable que cambie de estado cuando presiones el pulsador y que conserve ese estado por el tiempo que tu quieres o sea 10 seg.

#include <Servo.h> 

Servo myservo;

const byte buttonPin 	= 2;
int val 		= 0;
byte buttonState 	= 0;
byte buttonStateLast = 0;
bool Estado 		= false;

unsigned long start;

void setup() 
{ 
聽 myservo.attach(9);
聽 pinMode(buttonPin, INPUT);聽 聽 聽  
} 

void loop() 
{ 
聽 buttonState = digitalRead(buttonPin);

聽 if (buttonState == HIGH && buttonStateLast == LOW) {聽 聽  
聽 聽 聽 Estado = true;
聽 聽 聽 start = millis();			// inicializo contador milisegundos
聽 聽 聽 val = 90;				// Solo al presionar inicializo val = 90;
聽 }

聽 if (Estado) {	聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 // Si se presion贸 entonces inicia cuenta de 10 seg
聽 	 if (millis() - start > 10000UL) {聽 聽 聽 // millis() - start dar谩 un valor menor a 10.000 mseg hasta que lo supere
聽 	 	 Estado = false;聽 					// pasaron 10 segundos interrumpo
聽 	 	 val = 0;
聽 	 }
聽 } 

聽 buttonStateLast = buttonState;
聽 
聽 myservo.write(val);
聽 delay(15);
}