Problema codice servo

Salve,
sto cercando di creare un codice che dovrebbe far posizionare un servo a 90 gradi alla pressione di un bottone il codice che ho abbozzato è questo:

#include <Servo.h>



Servo myServo;

int val = analogRead(A0);
int posizione;

void setup (){

  myServo.attach(9);
  pinMode(A0, INPUT);

}


void loop (){

 
  posizione = map(val, 0, 1023, 0, 90);
  myServo.write(posizione);
  delay(15);

  
}

purtroppo il codice non funziona, qualcuno saprebbe dirmi in cosa sbagli?

grazie

L'analogread deve stare dentro la loop altrimenti non leggi nulla e val è sempre 0.

Grazie, ho risolto, ho chiarito alcuni concetti riguardo il comportamento e l'utilizzo delle porte analogiche e digitali.

Anche se lo schema é abbastanza molto bozza mi permetto di dire che Ti serve un a resistenza pulldown sul pulsante oppure devi collegarlo a massa e attivare il pullup interno o mettere un pullup esterno.
Ciao Uwe

ho un’altra domanda da fare:

#include <Servo.h>


int pulsante = 4;
int led = 13;
Servo servo1;




void setup()
{
 
  pinMode(led, OUTPUT);
  pinMode(pulsante, INPUT);
  servo1.attach(7);
  
}

void loop()
{
   
 

if (digitalRead(pulsante) == HIGH)

{
 digitalWrite(led, HIGH);  
  servo1.write(90);
  servo1.write(0);
  digitalWrite(led, LOW);
  delay(10000);
}
else

{ 
  digitalWrite(led, HIGH);  
  servo1.write(90);
  delay(1000);
  servo1.write(0);
  digitalWrite(led, LOW);
  delay(10000);  

}

}

questo codice muove il servo in 2 posizioni, con la funzione delay, ho temporizzato l’azione, ovvero ogni 10 secondi ripete il loop.

però vorrei attivare il loop premendo un pulsante, ovvero il pulsante dovrebbe attivare il loop in qualsiasi momento.

quindi nel codice ho scritto:

if (digitalRead(pulsante) == HIGH)

{
 digitalWrite(led, HIGH);  
  servo1.write(90);
  servo1.write(0);
  digitalWrite(led, LOW);
  delay(10000);

che dovrebbe attivare il loop quando il pulsante e premuto e l’else, gli dovrebbe dire di effettuare il loop rispettando il delay.

la parte temporizzata funziona, il comando con il pulsante non va…

forse dovrei impostare due diversi void loop, se fosse possibile?

confido in voi…