funzioni min e max abbinate ad array

ciao a tutti, sto lavorando ad un progetto in fase di sviluppo e devo in sostanza controllare la marcia di due motori che devono proseguire normalmente, in base alla distanza che rilevo con il sensore ad ultrasuoni. il mio problema era che alcune misure del sensore venivano sballate e la lettura di ogni singolo dato era rischiosa per il feedback alla marcia dei motori (es. 120 cm, 120 cm, 0 cm, 121 cm). per risolvere il problema ho deciso di far fare una media di 5 valori escludendo le variabili lette minime e massime ad ogni gruppo di letture essendo sicuro di eliminare sia "0 cm" che "fuori scala". adesso gli errori di arduino però mi danno questi messaggi:

[
sketch_mar18a.ino:57:59: error: macro "min" passed 5 arguments, but takes just 2

sketch_mar18a.ino:58:59: error: macro "max" passed 5 arguments, but takes just 2

sketch_mar18a.ino: In function 'void loop()':

sketch_mar18a.ino:57:12: error: 'min' was not declared in this scope

sketch_mar18a.ino:58:12: error: 'max' was not declared in this scope

Errore durante la compilazione
]
quindi da quello che ho capito su i 5 argomenti del mio array ne ha presi solo 2? perchè 2 e non nessuno?
e l'errore dopo non lo capisco proprio: non va dichiarata la funzione min né quella max!!!
come faccio a far analizzare tutte le variabili?
Il codice è quello allegato sotto. è anche presente la libreria per la shield dei motori quindi se non avete installata quella vi verranno fuori degli errori per forza sulla parte dei motori

#include <NewPing.h>
#define trigger 2 // Arduino pin tied to trigger pin on the ultrasonic sensor.
#define echo 3 // Arduino pin tied to echo pin on the ultrasonic sensor.
#define max_distance 400 // Maximum distance we want to ping for (in centimeters). Maximum sensor distance is rated at 400-500cm.

#include <Wire.h>
#include <Adafruit_MotorShield.h>
#include "utility/Adafruit_MS_PWMServoDriver.h"

int dist[5];
int mini;
int maxi;
int distanza;

// Create the motor shield object with the default I2C address
Adafruit_MotorShield AFMS = Adafruit_MotorShield(); 
// Or, create it with a different I2C address (say for stacking)
// Adafruit_MotorShield AFMS = Adafruit_MotorShield(0x61); 

// Select which 'port' M1, M2, M3 or M4. In this case, M1
Adafruit_DCMotor *M1= AFMS.getMotor(3);
// You can also make another motor on port M2
Adafruit_DCMotor *M2 = AFMS.getMotor(4);

NewPing sonar(trigger, echo, max_distance);
 
int SetDistance = 0;
int ValueDist = 0;


void setup() {
  Serial.begin(9600);           // set up Serial library at 9600 bps
  Serial.println("Adafruit Motorshield v2 - DC Motor test!");

  AFMS.begin();  // create with the default frequency 1.6KHz
  //AFMS.begin(1000);  // OR with a different frequency, say 1KHz
Serial.print( "Sensore Ultrasuoni: ");
}

void loop() { 
 for(int i=0;i<5;i++){
    delay(50);
    unsigned int uS = sonar.ping(); // Send ping, get ping time in microseconds (uS).
    ValueDist = uS / US_ROUNDTRIP_CM;
    dist[i] = ValueDist;
    }
     mini= min(dist[0], dist[1], dist[2], dist[3], dist[4]);
     maxi= max(dist[0], dist[1], dist[2], dist[3], dist[4]);
     distanza =((dist[0]+ dist[1]+ dist[2] +dist[3]+ dist[4] - mini - maxi)/3); 
    if(distanza <= 100){
    M1->run(FORWARD);
    M2->run(FORWARD);
    M1->setSpeed(255);
    M2->setSpeed(255);}
    else{
    M1->setSpeed(0);
    M2->setSpeed(0);}    
    delay(100);
}

grazie a tutti

ciao

mattiadema97:
da quello che ho capito su i 5 argomenti del mio array ne ha presi solo 2? perchè 2 e non nessuno?

Perché la funzione Max e la funzione Min sono fatte così.

Per trovare il valore massimo in un array memorizzi in una variabile il primo valore:

maxi  = dist[0];

poi lo confronti con il secondo valore e se è minore allora assegni a maxi il valore del secondo valore

if (maxi < dist[1]) {
maxi = dist[1]
}

e così per tutti gli altri valori nell'array.
Alla fine maxi avrà il valore più alto.

Stessa cosa (al contrario) per il valore minimo.

ciao
pippo72

P.S. consigliato l'uso di un ciclo for.
P.P.S. probabilmente ci saranno metodi migliori.

grazie mille davvero utilissimo

Ciao e benvenuto sul forum

Non essendoti ancora presentato Ti invitiamo cortesemente a presentarti QUI (dicci quali conoscenze hai di elettronica e di programmazione) e a leggere attentamente il regolamento QUI se non lo hai già fatto.

Attilio