Om Max Sonar EZ0 och Arduino (2 / 3 steg)
Steg 2: pulse bredd "PW" gränssnitt
Detta stift utgångar en puls bredd representation av utbud. Avståndet kan beräknas med skalfaktorn för 147uS per tum.
Så använder Pulse i att beräkna avståndet.
Jag förberedde det här biblioteket för denna metod, du kan ladda ner från attachment.
Denna kod utan bibliotek och med Median/Mode filtret:
//...........................................................
denna kod baserad på: http://playground.arduino.cc/Main/MaxSonar
int pw_pin = 7.
int arraysize = 9;
int array [] = {0, 0, 0, 0, 0, 0, 0, 0, 0};
långa tum;
int exact_cm_value;
void setup() {
sätta din installation kod här, om du vill köra en gång:
pinMode (pw_pin, ingång);
Serial.BEGIN(9600);
}
void sensorRead() {
för (int jag = 0; jag < arraysize; i ++)
{
tum = pulseIn (pw_pin, hög);
Array [i] = tum/58.
Delay(10);
}
}
void array_arrangment (int * en, int n) {
Författare: Bill Gentles, November 12, 2010)
för (int jag = 1; jag < n; ++ jag)
{
int j = en [i];
int k;
för (k = i - 1. (k > = 0) & & (j < a[k]); k--)
{
en [k + 1] = en [k];
}
en [k + 1] = j;
}
}
int filter (int * en, int n) {
int jag = 0;
int count = 0;
int maxCount = 0;
int filter = 0;
int median;
int prevCount = 0;
medan (jag <(n-1)) {
prevCount = count;
Count = 0;
While(a[i]==a[i+1]) {
greve ++;
i ++;
}
om (count > prevCount & & count > maxCount) {
filtret = en [i];
maxCount = count;
Median = 0;
}
IF(Count==0) {
i ++;
}
IF(Count==maxCount) {//If datamängden har 2 eller fler lägen.
Median = 1;
}
IF(filter==0|| Median == 1) {//Return medianen om det finns inget läge.
filter=a[(n/2)];
}
returnera filtret;
}
}
void loop() {
sätta din huvudsakliga kod här, för att köra flera gånger:
sensorRead();
array_arrangment(array,arraysize);
exact_cm_value = filter(array,arraysize);
Serial.Print ("avståndet =");
Serial.Print(exact_cm_value);
Serial.println ("cm");
Delay(100);
}
Bibliotek-kod:
//......................................................
#include "SonarEZ0pw.h"
SonarEZ0pw Sonar(7); PIN D7
flyta cm_dis = 0.00;
flyta Inch_dis = 0.00;
void setup() {
sätta din installation kod här, om du vill köra en gång:
Serial.BEGIN(9600);
}
void loop() {
sätta din huvudsakliga kod här, för att köra flera gånger:
cm_dis = Sonar.Distance(cm); Att beräkna avståndet i cm
Inch_dis=sonar.Distance(inch); / / för att beräkna avståndet i tum
Serial.println ("distans");
Serial.Print(Inch_dis);
Serial.println ("tum");
Serial.Print(cm_dis);
Serial.println ("cm");
Delay(250);
}