int trigpin = 8;
int ecopin = 9;
int agua = 13;
int tamarreglo = 9;
int rangovalor[]= {0,0,0,0,0,0,0,0,0};
unsigned long duracion;
int distancia;
int n=0;
void setup()
{
pinMode(trigpin,OUTPUT);
pinMode(ecopin,INPUT);
pinMode(agua,OUTPUT);
//Serial.begin(9600);
//delay(500);
}
void loop()
{
for(int i=0;i < tamarreglo;i++)
{
digitalWrite(trigpin,LOW);
delayMicroseconds(2);
digitalWrite(trigpin,HIGH);
delayMicroseconds(10);
digitalWrite(trigpin,LOW);
duracion = pulseIn (ecopin,HIGH,30000);
if (duracion == 0) {duracion = 30000;}
rangovalor[i] = duracion/58;
delay(10);
}
//Serial.print("Desarreglado: ");
//printArray(rangovalor,tamarreglo);
arreglar(rangovalor,tamarreglo);
//Serial.print("Arreglado: ");
//printArray(rangovalor,tamarreglo);
distancia = moda(rangovalor,tamarreglo);
if (distancia >=0 && distancia <= 400)
{
/*Serial.print("La moda es: ");
Serial.print(distancia);
Serial.println (" cm");
delay(10);*/
if (distancia >= 50) {digitalWrite(agua,HIGH);}
else if(distancia <= 10) {digitalWrite(agua,LOW);}
}
/*else
{
n++;
if (n==5)
{
Serial.println ("Error");
delay(10);
n=0;
}
}*/
}
/*void printArray(int *a, int n)
{
for (int i = 0; i < n; i++)
{
Serial.print(a[i], DEC);
Serial.print(' ');
}
Serial.println();
}*/
void arreglar(int *a, int n)
{
for (int i = 1; i < n; ++i)
{
int j = a[i];
int k;
for (k = i - 1; (k >= 0) && (j < a[k]); k--)
{
a[k + 1] = a[k];
}
a[k + 1] = j;
}
}
int moda(int *x,int n){
int i = 0;
int conteo = 0;
int maximo = 0;
int moda = 0;
int bimodal;
int anterior = 0;
while(anterior&conteo>maximo){
moda=x[i];
maximo=conteo;
bimodal=0;
}
if(conteo==0){i++;}
if(conteo==maximo){bimodal=1;}
if(moda==0||bimodal==1) {moda=x[(n/2)];}
return moda;
}