altitude hold con sonar e arduino

Salve a tutti, avrei bisogno di un piccolo aiuto: da un MaxSonar-EZx leggo leggo una distanza tramite analogRead, fin qui nessun problema; tramite un pulsante ho bisogno di mantenere l'ultima lettura quindi:

definisco variabile di lettura, leggo valore dal sensore, SE A2 = 1023 (quindi se premo il pulsante).... la variabile dovrebbe smettere di variare...

in poche parole sto cercando di fare un altitude hold per il mio elicottero

allego il mio misero tentativo..

void setup() {
  Serial.begin(9600);
}

void loop() {
  int val = analogRead(A0);
  int pulsante = analogRead(A1);
  val = map(val, 0, 1023, 0, 600);
  {
  if (pulsante == 1023)
  Serial.println(val);
  }
 //Serial.println(filo);
}

help pleaseeeeee :roll_eyes: Grazie...

dato che nel loop val la continui a cambiare, quando premi il pulsante salva val in un'altra variabile che poi userai per l'altitude hold. Sinceramente prima di creare un codice così complesso, ti consiglio di imparare a programmare, stai facendo un passo più lungo della gamba.

stai facendo un passo più lungo della gamba.

Effettivamente lo credo anche io...ma non mi arrendo; Quindi dici che dovrei mettere la lettura di val dentro l'IF??

sì, è un'altra soluzione valida :)

non sembra funzionare, cioè: legge perfettamente, quando premo val diventa 0... uffa... :drooling_face:

come fa a leggere perfettamente se val è dentro l’if? in teoria val deve essere letta SOLO quando premi il pulsante, altrimenti hai sbagliato qualcosa… posta il codice

Usa per il pulsante un entrata digitale oppure metti il livello di HIGH piú basso ( non 1023 ma 800) Cioa Uwe

ANDATA!!! la prima parte... dopo cena si ragiona meglio 8)

metti il livello di HIGH piú basso ( non 1023 ma 800)

ti do retta, ho messo che se superiore a 800.. goto

ho risolto facendo iniziare il loop una riga più un basso...sicuramente è poco ortodosso, ma al momento funziona

void setup() {
  Serial.begin(9600);
}

void loop()
{
inizio:
  int valstop = 0;
  int val = analogRead(A0);
  salta:
  int pulsante = analogRead(A1);


    delay(50);
  
    Serial.print("lettura ");
    Serial.print(val);
    Serial.println();

 if (pulsante > 800)
{ 
 Serial.print("HOLD ");
goto salta;
}
  else
{
goto inizio;
}
}

si accettano comunque consigli :P

il prossimo passo che farò sarà quello di sostituire il pulsante con il ricevitore del mio radiocomando; ho provato ad usare pulsein, ma mi sembra che questa funzione rallenti troppo, forse arduino "aspetta" di contare i PPM del canale. non esiste un metodo più valido per leggere i PPM?

a già, credo che dovrò cambiare il nome del 3d da ultima lettura a "altitude hold"...