Paso 2: interfaz de "PW" de anchura de pulso
Este perno salidas de una representación de anchura de pulso del rango. La distancia puede calcularse usando el factor de escala de 147uS por pulgada.
Así que usando pulso en para calcular la distancia.
Preparé esta biblioteca para este método, se puede descargar del accesorio.
Este código sin biblioteca y con filtro de mediana/modo:
//...........................................................
Partiendo de este código: http://playground.arduino.cc/Main/MaxSonar
int pw_pin = 7;
arraysize int = 9;
int arreglo [] = {0, 0, 0, 0, 0, 0, 0, 0, 0};
pulgadas largo;
int exact_cm_value;
void setup() {}
Pon tu código de instalación, para ejecutar una vez:
pinMode (pw_pin, entrada);
Serial.Begin(9600);
}
void sensorRead() {}
para (int i = 0; i < arraysize; i ++)
{
pulgadas = pulseIn (pw_pin, HIGH);
matriz [i] = pulgadas/58;
Delay(10);
}
}
void array_arrangment (int * a, int n) {}
Autor: Bill Gentles, 12 de noviembre de 2010)
para (int i = 1; i < n; ++ i)
{
int j = [i;]
int k;
para (k = i - 1; (k > = 0) & & (j < a[k]); k--)
{
una [k + 1] = [k];
}
una [k + 1] = j;
}
}
filtro int (int * a, int n) {}
int i = 0;
int cuenta = 0;
maxCount int = 0;
filtro int = 0;
int promedio;
int prevCount = 0;
mientras (i <(n-1)) {}
prevCount = cuenta;
cuenta = 0;
{while(a[i]==a[i+1])}
cuenta ++;
i ++;
}
Si (cuenta > prevCount & & count > maxCount) {}
filtro = [i;]
maxCount = cuenta;
mediana = 0;
}
{if(Count==0)}
i ++;
}
if(Count==maxCount) {//If el conjunto de datos tiene 2 o más modos.
mediana = 1;
}
if(Filter==0|| mediana == 1) {//Return la mediana si hay no hay modo.
Filter=a[(n/2)];
}
retorno filtro;
}
}
void loop() {}
Pon tu código principal, para ejecutar varias veces:
sensorRead();
array_arrangment(array,arraysize);
exact_cm_value = filter(array,arraysize);
Serial.Print ("la distancia =");
Serial.Print(exact_cm_value);
Serial.println ("cm");
Delay(100);
}
Código de biblioteca:
//......................................................
#include "SonarEZ0pw.h"
Sonar(7) de SonarEZ0pw; PIN D7
Float cm_dis = 0.00;
Float Inch_dis = 0.00;
void setup() {}
Pon tu código de instalación, para ejecutar una vez:
Serial.Begin(9600);
}
void loop() {}
Pon tu código principal, para ejecutar varias veces:
cm_dis = Sonar.Distance(cm); Para calcular la distancia en cm
Inch_dis=sonar.Distance(inch); / / para calcular la distancia en pulgadas
Serial.println ("distancia");
Serial.Print(Inch_dis);
Serial.println ("pulgadas");
Serial.Print(cm_dis);
Serial.println ("cm");
Delay(250);
}