[SOLUCIONADO] Proyecto de estación meteorolócia acoplada a un drone

Buenos días,
A través del mando que controla al drone se envíe una señal(la señal la transformo en un valor medio que va directamente a un pin analógico del arduino,PinModoVuelo), y el drone entra en un modo de vuelo que lo que hace es dar una vuelta sobre si mismo y mide la velocidad del viento a través de un tubo de pitot(señal analógica,PinPitot) y deberia de devolverme el valor máximo medido por el pitot asi como la direccion en la que se midió. Para la dirección del viento uso un acelerómetro.

Mi problema es que no consigo que me devuelva el valor maximo sino que me imprime el valor de velocidad siempre que este sea mayor. ¿Existe alguna manera de almacenar las lecturas de velocidad en un array y que devuelva el valor maximo?
Gracias.

void loop() {
ModoVuelo=analogRead(PinModoVuelo)*0.0048828125;
 while(ModoVuelo>3){ 
   ModoVuelo=analogRead(PinModoVuelo)*0.0048828125;
   velocidad=analogRead(PinPitot) 
   if(velocidad>velocidadMax){
     MagnetometerRaw raw = compass.ReadRawAxis();
     muestra = atan2(raw.YAxis, raw.XAxis);
 
     if(muestra < 0)
       muestra += 2*M_PI;
     muestraGrados = muestra * 180/M_PI;
     velocidadMax=velocidad;
   }
  myFile.print(velocidadMax);
  myFile.println(muestraGrados);
  myFile.flush();
 
 }

Otro que cumple con el axioma :
**Nuevo en el foro, **
**no lee las normas del foro, **
no usa tags para insertar códigos.
Y usa la palabra Ayuda en el título.

Mira todos los puntos que tienes para corregir.

Antes de nada pedir disculpas por no haberme leído las instrucciones de uso del foro. No era mi intención y agrdezco tu aportación.

Que tal asi.

void loop() {
	ModoVuelo = analogRead(PinModoVuelo)*0.0048828125;
	 
	while(ModoVuelo>3) { 
	    ModoVuelo = analogRead(PinModoVuelo)*0.0048828125;
	    velocidad = analogRead(PinPitot) 
	    if (velocidad > velocidadMax) {
		    MagnetometerRaw raw = compass.ReadRawAxis();
		    muestra = atan2(raw.YAxis, raw.XAxis);
		 
		    if (muestra < 0)
		        muestra += 2*M_PI;
	    	muestraGrados = muestra * 180/M_PI;
	    	velocidadMax=velocidad;
		}
	}
	myFile.print(velocidadMax);
	myFile.println(muestraGrados);
	myFile.flush();

O sea fuera del while porque entras al while porque ModoVuelo > 3 y supongo que al salir de Modovuelo es que quieres que quede registrado.. si lo tienes dentro verías la evolución del valor máximo.

Si, asi me funcionó mejor pero seguía imprimiendo en cada loop el valor de velocidad max pero lo solucioné de esta manera

void loop(){

  ModoVuelo=analogRead(PinModoVuelo)*0.0048828125;
  float velocidadMax=0;

  while(ModoVuelo>3){ 
    ModoVuelo=analogRead(PinModoVuelo)*0.0048828125;
    velocidad=analogRead(PinPitot)*0.0048828125;
    if(velocidad>velocidadMax){
      MagnetometerRaw raw = compass.ReadRawAxis();
      muestra = atan2(raw.YAxis, raw.XAxis);
  
      if(muestra < 0)
        muestra += 2*M_PI;
      muestraGrados = muestra * 180/M_PI;
      velocidadMax=velocidad;
      delay(200);
    }
  }
   if(velocidadMax!=0){
   myFile.print(velocidadMax);
   myFile.println(muestraGrados);
   myFile.flush();
   }

Cuando sale del while la variable de velocidadMax toma un valor distinto de 0. Y al volver por el loop se pone a 0 y ya no me lo imprime. Gracias por tu ayuda surbyte.

Me alegro. Agrega SOLUCIONADO al título