В даннном примере показан как исземерять растояние и выводить значение на семисегментные индикаторы с динамической индикацией. В ультрозвуковом дальномере есть 4 вывода, 2 из них это питания. Один вывод TRIG и ECHO. На вывод TRIG необходимо подавать импульсы с определенной длиной. После подачи импульса на вывод TRIG на выводе ECHO появляется импульс ширина которого пропорциональна расстоянию.
long count=0;
int razryad1=50;
int razryad2=51;
int razryad3=52;
int r1=0;
int r2=0;
int r3=0;
int digitpin[]={22,23,24,25,26,27,28};
int seg0[]={0,0,0,1,0,0,0};
int seg1[]={1,1,1,1,1,0,0};
int seg2[]={0,0,1,0,0,1,0};
int seg3[]={0,1,1,0,0,0,0};
int seg4[]={1,1,0,0,1,0,0};
int seg5[]={0,1,0,0,0,0,1};
int seg6[]={0,0,0,0,0,0,1};
int seg7[]={1,1,1,1,0,0,0};
int seg8[]={0,0,0,0,0,0,0};
int seg9[]={0,1,0,0,0,0,0};
const int pingPin = 7;
const int get=6;
void setup()
{
Serial.begin(9600);
for (int i=0;i<7;i++)
{
pinMode(digitpin[i],OUTPUT);
digitalWrite(digitpin[i],HIGH);
}
pinMode(razryad1,OUTPUT);
pinMode(razryad2,OUTPUT);
pinMode(razryad3,OUTPUT);
}
void loop()
{
pinMode(pingPin, OUTPUT);
digitalWrite(pingPin, LOW);
delayMicroseconds(2);
digitalWrite(pingPin, HIGH);
delayMicroseconds(5);
digitalWrite(pingPin, LOW);
long duration, inches, cm;
// The same pin is used to read the signal from the PING))): a HIGH
// pulse whose duration is the time (in microseconds) from the sending
// of the ping to the reception of its echo off of an object.
pinMode(get, INPUT);
duration = pulseIn(get, HIGH);
cm = microsecondsToCentimeters(duration);
count=cm;
while(count>100)
{
r3++;
count=count-100;
}
while(count>10)
{
r2++;
count=count-10;
}
while(count>0)
{
r1++;
count=count-1;
}
SetDigit(r3,52);
delay(3);
digitalWrite(52,LOW);
delay(3);
SetDigit(r2,51);
delay(3);
digitalWrite(51,LOW);
delay(3);
SetDigit(r1,50);
delay(3);
digitalWrite(50,LOW);
delay(3);
r1=0;r2=0;r3=0;
}
void setRazryad(int count)
{
}
void SetDigit(int count,int raz)
{
switch(count)
{
case 0: setDigit(seg0);break;
case 1: setDigit(seg1);break;
case 2: setDigit(seg2);break;
case 3: setDigit(seg3);break;
case 4: setDigit(seg4);break;
case 5: setDigit(seg5);break;
case 6: setDigit(seg6);break;
case 7: setDigit(seg7);break;
case 8: setDigit(seg8);break;
case 9: setDigit(seg9);break;
}
digitalWrite(raz,HIGH);
}
void setDigit(int s[])
{
for (int i=0;i<7;i++)
{
digitalWrite(digitpin[i],s[i]);
}
}
long microsecondsToCentimeters(long microseconds)
{
// The speed of sound is 340 m/s or 29 microseconds per centimeter.
// The ping travels out and back, so to find the distance of the
// object we take half of the distance travelled.
return microseconds / 29 / 2;
}
Комментарии
Подробного описания нет