Здравствуйте, товарищи коты. Значится, есть два датчика УЗ. Они должны детектить препятствия, при чем одновременно. Привожу кусок кода который отвечает за один датчик. Нужно что бы два датчика одновременно выполняли одну и тоже работу. Только что бы увидев препятствие один датчик, сообщал эту инфу одной переменной, а другой датчик увидев препятствие сообщал другой переменной.
Код:
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; }
Этот кусок отвечает за детектирование одного датчика. А мне нужно что бы работали два сразу дачтика. 2 раза одну и туже функцию объявить нельзя. Или можно?
Ну например так. Я об'единил функции 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; }
echoPin, trigPin - что это за переменные и как они объявлены? Моторчика видать тоже два? Где весь текст проги? Всё это дело надо както покучнее собрать, а то переменные передавать из одной функции в другую, голову свернешь.
Ардуино ругается. 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
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;
//все что написано внизу Я взял с этого сайта. Там все подробно описанно. 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; }*/
Вместо uint8_7 надо, конечно, писать uint8_t (моя опечатка). Я не знал, что Вы пишите для Адруино. Тогда переменные для функции digitalWrite должны быть типа int. Поэтому об'явите функцию getDistance так: long getDistance(int trig, int echo) Перед этой функцией перенесите закрывающую скобку метода loop().
В начале кода переименуйте trigPin в trigPin2 и echoPin в echoPin2 (в 2-х местах).
Да, я гляжу Вы с С не дружите. Почитайте книги по основам языка, раз микроконтроллерами занимаетесь. Иначе так и будете каждую простую ошибку спрашивать.
Оевидно, надо вместо строчки в функции getDistance() long distacne_cm = getEchoTiming()/29/2; написать long distacne_cm = duration/29/2;
Я книгу по С++ уже скачал. Мне нужно как можно скорее сделать этот проект. Это робот будет. Если Я пройду, то Я зачислен в Бауманский университет. МК Я начал недавно увлекаться.
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения