Ультразвуковой дальномер, динамическая индикация и Arduino.

В даннном примере показан как исземерять растояние и выводить значение на семисегментные индикаторы с динамической индикацией. В ультрозвуковом дальномере есть 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;
}

Комментарии  

 
#1 Бауыржан 14.03.2019 12:18
А схемы подключения на fritzing есть?
Подробного описания нет
Цитировать
 

Добавить комментарий


Защитный код
Обновить

Последние комментарии

Последнии темы форума

  • Нет сообщений для показа