Stap 2: puls breedte "PW" interface
Deze pin uitgangen een puls breedte vertegenwoordiging van bereik. De afstand kan worden berekend aan de hand van de schaalfactor van 147uS per inch.
Dus met behulp van Pulse in om de afstand te berekenen.
Ik bereid deze bibliotheek voor deze methode, kunt u downloaden van de bijlage.
Deze code zonder bibliotheek en met filter Mediaan/modus:
//...........................................................
Deze code op basis van: http://playground.arduino.cc/Main/MaxSonar
int pw_pin = 7;
int arraysize = 9;
int array [] = {0, 0, 0, 0, 0, 0, 0, 0, 0};
lange inch;
int exact_cm_value;
VOID Setup {}
Zet uw setup-code hier, om het eenmalig uit te voeren:
pinMode (pw_pin, INPUT);
Serial.begin(9600);
}
ongeldig sensorRead() {}
for (int i = 0; ik < arraysize; i ++)
{
duim = pulseIn (pw_pin, hoge);
matrix [i] = inch/58;
delay(10);
}
}
VOID array_arrangment (int * een, int n) {}
Auteur: Bill Gentles, 12 november 2010)
for (int i = 1; ik < n; ++ ik)
{
int j = een [i];
int k;
voor (k = ik - 1; (k > = 0) & & (j < a[k]); k--)
{
een [k + 1] = een [k];
}
een [k + 1] = j;
}
}
filter van int (int * een, int n) {}
int i = 0;
int count = 0;
int maxCount = 0;
int filter = 0;
int de mediaan;
int prevCount = 0;
terwijl (i <(n-1)) {}
prevCount = aantal;
Graaf = 0;
while(a[i]==a[i+1]) {}
Graaf ++;
i ++;
}
Als (graaf > prevCount & & telling > maxCount) {}
filter = een [i];
maxCount = aantal;
mediaan = 0;
}
if(Count==0) {}
i ++;
}
if(Count==maxCount) {//If dataset heeft 2 of meer modi.
mediaan = 1;
}
if(filter==0|| mediaan == 1) {//Return de mediaan als er geen modus.
filter=a[(n/2)];
}
retourneren filter;
}
}
void loop {}
Zet uw belangrijkste code hier, om het herhaaldelijk uitvoeren:
sensorRead();
array_arrangment(array,arraysize);
exact_cm_value = filter(array,arraysize);
Serial.Print ("de afstand =");
Serial.Print(exact_cm_value);
Serial.println ("cm");
delay(100);
}
De code van de bibliotheek:
//......................................................
#include "SonarEZ0pw.h"
SonarEZ0pw Sonar(7); PIN D7
zweven cm_dis = 0,00;
zweven Inch_dis = 0,00;
VOID Setup {}
Zet uw setup-code hier, om het eenmalig uit te voeren:
Serial.begin(9600);
}
void loop {}
Zet uw belangrijkste code hier, om het herhaaldelijk uitvoeren:
cm_dis = Sonar.Distance(cm); Voor het berekenen van de afstand in cm
Inch_dis=sonar.distance(inch); / / voor het berekenen van de afstand in Inch
Serial.println ("afstand");
Serial.Print(Inch_dis);
Serial.println ("duim");
Serial.Print(cm_dis);
Serial.println ("cm");
delay(250);
}