Страница 1 из 1

Ардуино и датчики УЗ.

Добавлено: Вс авг 12, 2012 12:14:07
afagorn
Здравствуйте, товарищи коты. Значится, есть два датчика УЗ. Они должны детектить препятствия, при чем одновременно. Привожу кусок кода который отвечает за один датчик. Нужно что бы два датчика одновременно выполняли одну и тоже работу. Только что бы увидев препятствие один датчик, сообщал эту инфу одной переменной, а другой датчик увидев препятствие сообщал другой переменной.

Код: Выделить всё

distance = getDistance();//тут берется расстояние
ledLevel = (int) (distance*10)<=255?255-distance*10:0;//тут вычисляется уровень который нужно подать на моторчик.
}

long getEchoTiming() {
digitalWrite(trigPin, LOW);//тут высталяем на вход тригер логический нуль
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);//ставим единицу
delayMicroseconds(10);//ждем пока сигнал отразится
digitalWrite(trigPin, LOW);//ставим нуль
long duration = pulseIn(echoPin,HIGH);//слушаем эфир (она вычитает сколько микросекунд прошло)
return duration;//возвращяем значение
}


long getDistance() //эта функция возвращает расстояние в сантиметрах до объекта перед сенсором
{
long distacne_cm = getEchoTiming()/29/2;
return distacne_cm;
}

Re: Ардуино и датчики УЗ.

Добавлено: Вс авг 12, 2012 17:02:07
Аlex
И в чём проблема ?

Re: Ардуино и датчики УЗ.

Добавлено: Вс авг 12, 2012 17:17:49
afagorn
Этот кусок отвечает за детектирование одного датчика. А мне нужно что бы работали два сразу дачтика. 2 раза одну и туже функцию объявить нельзя. Или можно?

Re: Ардуино и датчики УЗ.

Добавлено: Вс авг 12, 2012 18:18:25
Ser60
Нельзя. Но в функцию можно передать параметр с каким датчиком работать.

Re: Ардуино и датчики УЗ.

Добавлено: Вс авг 12, 2012 18:31:16
afagorn
Нельзя. Но в функцию можно передать параметр с каким датчиком работать.
Расскажите как это сделать. Приведет пример если не трудно. Буду очень благодарен.

Re: Ардуино и датчики УЗ.

Добавлено: Вс авг 12, 2012 18:40:00
Ser60
Почитайте любой учебник по С, раздел функции. Не вижу смысла переписывать текст оттуда сюда. Вот, например, первая попавшаяся ссылка:
http://informatics.mccme.ru/moodle/mod/ ... pterid=304

Re: Ардуино и датчики УЗ.

Добавлено: Вт авг 14, 2012 21:45:01
afagorn
Товарищ, помогите. Прочитал Я про функции. Но как передать параметр понять Я не смог. Если бы был там пример похожий на мою проблему. Буду благодарен.

Re: Ардуино и датчики УЗ.

Добавлено: Вт авг 14, 2012 22:42:36
Ser60
Ну например так. Я об'единил функции getDistance() getEchoTiming() в одну getDistance(). Ей основная программа передает 2 параметра: пин передатчика (trig) и пин приемника (echo).

Код: Выделить всё

long distance1 = getDistance(trigPin1, echoPin1);//тут берется расстояние от первой пары датчиков
long distance2 = getDistance(trigPin2, echoPin2); // тут от второй

long getDistance(uint8_7 trig, uint8_t echo) //эта функция возвращает расстояние в сантиметрах до объекта перед сенсором
{
  digitalWrite(trig, LOW);//тут высталяем на вход тригер логический нуль
  delayMicroseconds(2);
  digitalWrite(trig, HIGH);//ставим единицу
  delayMicroseconds(10);//ждем пока сигнал отразится
  digitalWrite(trig, LOW);//ставим нуль
  long duration = pulseIn(echo,HIGH);//слушаем эфир (она вычитает сколько микросекунд прошло)
  long distacne_cm = getEchoTiming()/29/2;
  return distacne_cm;
}

Re: Ардуино и датчики УЗ.

Добавлено: Вт авг 14, 2012 22:51:37
zero648
echoPin, trigPin - что это за переменные и как они объявлены?
Моторчика видать тоже два?
Где весь текст проги?
Всё это дело надо както покучнее собрать, а то переменные передавать из одной функции в другую, голову свернешь.

P.S. пока расписывал опоздал :(

Re: Ардуино и датчики УЗ.

Добавлено: Вт авг 14, 2012 23:25:53
afagorn
Ардуино ругается.
Error compiling.
4:18: error: 'uint8_7' was not declared in this scope 4:40: error: expected primary-expression before 'echo'
4:44: error: initializer expression list treated as compound expression
194:1: error: 'distancel' does not name a type
195:1: error: 'ledLevell' does not name a type
198:1: error: 'distance2' does not name a type
199:1: error: 'ledLevel' does not name a type
202:18: error: redefinition of 'long int getDistance'
4:18: error: 'long int getDistance' previously defined here 202:18: error: 'uint8_7' was not declared in this scope 202:40: error: expected primary-expression before 'echo'
207

Re: Ардуино и датчики УЗ.

Добавлено: Вт авг 14, 2012 23:27:59
afagorn
Вот исходники.

Код: Выделить всё

int trigPin = 4;
int echoPin = 7;
int trigPin1 = 13;
int echoPin1 = 12;
int in4 = 11;
int in3 = 10;
int in2 = 2;
int in1 = 8;
int state = 0;//Переменная которая хранит 1 или 0 нужна она для того что бы определить в какую сторону поворачивать. 

int duration1;
int duration;
long distance2;
int ledLevel;
long distance1;
int ledLevel1;

void setup() {
 
  
Serial.begin(9600);
pinMode(trigPin,OUTPUT);
pinMode(echoPin,INPUT);
pinMode(trigPin1,OUTPUT);
pinMode(echoPin1,INPUT);

pinMode(in4,OUTPUT);
pinMode(in3,OUTPUT);
pinMode(in2,OUTPUT);
pinMode(in1,OUTPUT);
}

void loop() {

}

//все что написано внизу Я взял с этого сайта. Там все подробно описанно. http://research.andbas.com/2011/12/hc-sr04.html
//distance1 = getDistance();//тут берется расстояние
distance1 = getDistance(trigPin1, echoPin1);//тут берется расстояние от первой пары датчиков
ledLevel1 = (int) (distance1*10)<=255?255-distance1*10:0;//тут вычисляется уровень который нужно подать на моторчик

//distance = getDistance();//тут берется расстояние
distance2 = getDistance(trigPin2, echoPin2); // тут от второй
ledLevel = (int) (distance2*10)<=255?255-distance2*10:0;//тут вычисляется уровень который нужно подать на моторчик


long getDistance(uint8_7 trig, uint8_t echo) //эта функция возвращает расстояние в сантиметрах до объекта перед сенсором
{
  digitalWrite(trig, LOW);//тут высталяем на вход тригер логический нуль
  delayMicroseconds(2);
  digitalWrite(trig, HIGH);//ставим единицу
  delayMicroseconds(10);//ждем пока сигнал отразится
  digitalWrite(trig, LOW);//ставим нуль
  long duration = pulseIn(echo,HIGH);//слушаем эфир (она вычитает сколько микросекунд прошло)
  long distacne_cm = getEchoTiming()/29/2;
  return distacne_cm;
}


/*
//)))))))))))))))))))))))))))
long getEchoTiming() {
digitalWrite(trigPin1, LOW);//тут высталяем на вход тригер логический нуль
delayMicroseconds(2);
digitalWrite(trigPin1, HIGH);//ставим единицу
delayMicroseconds(10);//ждем пока сигнал отразится
digitalWrite(trigPin1, LOW);//ставим нуль
long duration1 = pulseIn(echoPin1,HIGH);//слушаем эфир (она вычитает сколько микросекунд прошло)
return duration1;
}
//))))))))))))))))))))))))))))

long getDistance() //эта функция возвращает расстояние в сантиметрах до объекта перед сенсором
{
long distacne_cm1 = getEchoTiming()/29/2;
return distacne_cm1;

long distacne_cm = getEchoTiming()/29/2;
return distacne_cm;
}*/

Re: Ардуино и датчики УЗ.

Добавлено: Ср авг 15, 2012 05:38:54
Ser60
Вместо uint8_7 надо, конечно, писать uint8_t (моя опечатка). Я не знал, что Вы пишите для Адруино. Тогда переменные для функции digitalWrite должны быть типа int. Поэтому об'явите функцию getDistance так:
long getDistance(int trig, int echo)
Перед этой функцией перенесите закрывающую скобку метода loop().

В начале кода переименуйте trigPin в trigPin2 и echoPin в echoPin2 (в 2-х местах).

Re: Ардуино и датчики УЗ.

Добавлено: Ср авг 15, 2012 09:49:53
afagorn
Она опять ругается. Я их не смог исправить.

Re: Ардуино и датчики УЗ.

Добавлено: Ср авг 15, 2012 17:42:51
Ser60
Да, я гляжу Вы с С не дружите. Почитайте книги по основам языка, раз микроконтроллерами занимаетесь. Иначе так и будете каждую простую ошибку спрашивать.

Оевидно, надо вместо строчки в функции getDistance()
long distacne_cm = getEchoTiming()/29/2;
написать
long distacne_cm = duration/29/2;

Re: Ардуино и датчики УЗ.

Добавлено: Ср авг 15, 2012 18:11:39
afagorn
Я книгу по С++ уже скачал. Мне нужно как можно скорее сделать этот проект. Это робот будет. Если Я пройду, то Я зачислен в Бауманский университет. МК Я начал недавно увлекаться.

Re: Ардуино и датчики УЗ.

Добавлено: Ср авг 15, 2012 18:15:58
Ser60
Ну тогда удачи во всем!