подскажите)

Николай620
Offline
Зарегистрирован: 10.12.2019

Moderator : пожалуйста, вставьте код правильно (возможно, новым сообщением в тему), 

 
Николай620
Offline
Зарегистрирован: 10.12.2019

expected unqualified-id before if   Ругается вот так

sadman41
Offline
Зарегистрирован: 19.10.2016

Николай620, вы программируете ударяя тихоокеанской сельдью о клавиатуру?

Николай620
Offline
Зарегистрирован: 10.12.2019

Уважаемый ваш юмор на высоте)

Николай620
Offline
Зарегистрирован: 10.12.2019

у нас только Омуль Байкальский)

Николай620
Offline
Зарегистрирован: 10.12.2019
int echoPin = 2;
int trigPin = 3;
int ledPin = 13;
 
void setup()
 
{ pinMode(13, OUTPUT);
  Serial.begin (9600);
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
 
}
 
void loop() {
  int duration, cm;
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);
  cm = duration / 58;
  Serial.print(cm);
  Serial.println(" cm");
  delay(100);
}
 
if ( duration / 58 < 20)
 
{
  digitalWrite(ledPin13, HIGH)
}

 

b707
Offline
Зарегистрирован: 26.05.2017

Николай, все операторы должны находится внутри процедур или функций.

У вас процедура ЛУП закончилась в строке 26, оператор IF не находится ни в одной процедуре или функции. так нельзя

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

А когда исправите то, о чём Вам уже сказали, подумайте об операциях деления в строках №№ 22 и 28. Не могу сказать, что там неправильно, т.к. Вы не написали что именно Вы хотели сделать - может Вам так и нужно. Так что смотрите и сами думайте правильно там или нет.

Николай620
Offline
Зарегистрирован: 10.12.2019
int echoPin = 2;
int trigPin = 3;
int ledPin = 13;

void setup()
{
pinMode(13, OUTPUT);
  Serial.begin (9600);
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
}
void loop() {
  int duration, cm;
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);
  cm = duration / 58;
  Serial.print(cm);
  Serial.println(" cm");
  delay(100);

if ( duration / 58 < 20)
{
 digitalWrite(13, HIGH);
}}

 

agnec2001
Offline
Зарегистрирован: 08.11.2019

Скобочку в строке 26 уберите и поставьте её в сааамый конец. Тогда логически всё будет правильно.

Но предвижу следующий вопрос: "а почему светодиод один раз загорелся и больше не гаснет ?"

Ответ - его никто не просил :)

В строке 3 Вы присваиваете переменной ledPin значение 13, а в строке 7 явно указываете на пин 13. Для чего тогда заводили переменную ?

В строке 22 вычисляете значение переменной cm = duration / 58 а в строке 28 снова вычисляете это же значение. Зачем ? Оно уже есть в переменной.

Ну и в строке 31 каша какая-то. Тут и имя переменной и её значение слились в кучу. А для компилятора это совсем другая, нигде не описанная, переменная.

---------

упс, пока писал кое что поменялось. минутку.

посмотрите на строки 20 и 25. Зачем дважды производить одно и то же вычисление ?

и ещё раз повторю

В строке 3 Вы присваиваете переменной ledPin значение 13, а в строке 7 явно указываете на пин 13. Для чего тогда заводили переменную ?

Николай620
Offline
Зарегистрирован: 10.12.2019

Спасибо, добавил скобки оператор IF теперь в процедуре компиляция прошла)буду думать дальше строкой 22 и 28 монитор показывает 0,я хотел что б светодиод загорался когда расстояние меньше 20 см

agnec2001
Offline
Зарегистрирован: 08.11.2019

а он сейчас как себя ведёт ?

просто есть условие, при котором он должен загореться, но нет - когда должен погаснуть.

или наоборот. смотря куда второй конец подключен.

Николай620
Offline
Зарегистрирован: 10.12.2019
int echoPin = 2;
int trigPin = 3;


void setup()
{
pinMode(13, OUTPUT);
  Serial.begin (9600);
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
}
void loop() {
  int duration, cm;
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);
  cm = duration / 58;
  Serial.print(cm);
  Serial.println(" cm");
  delay(100);

if ( duration < 20)
{
 digitalWrite(13, HIGH);
}}

 

Николай620
Offline
Зарегистрирован: 10.12.2019

Монитор показывает 0 всегда а резко мигает)

agnec2001
Offline
Зарегистрирован: 08.11.2019

в строке 25 вроде переменная cm раньше подразумевалась

Николай620
Offline
Зарегистрирован: 10.12.2019
int ledPin = 13;

 

Николай620
Offline
Зарегистрирован: 10.12.2019

оставить в самом начале как было?

Николай620
Offline
Зарегистрирован: 10.12.2019
int echoPin = 2;
int trigPin = 3;
int ledPin = 13;


void setup()
{
  pinMode(13, OUTPUT);
  Serial.begin (9600);
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
}
void loop() {
  int duration, cm;
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);
  cm = duration / 58;
  Serial.print(cm);
  Serial.println(" cm");
  delay(100);

  if ( duration < 20"cm")
  {
    digitalWrite(13, HIGH);
  }
}

 

Николай620
Offline
Зарегистрирован: 10.12.2019

ругаться стал на 26 строку со скобкой

5N62V
Offline
Зарегистрирован: 25.02.2016

Николай620 пишет:

ругаться стал на 26 строку со скобкой

ну так "cm" надо бы убрать от-туда.

delayMicroseconds(2);

 

Если ардуина на 328м проце, то микросекондс должно быть кратно 4м.

Николай620
Offline
Зарегистрирован: 10.12.2019
int echoPin = 2;
int trigPin = 3;
int ledPin = 13;


void setup()
{
  pinMode(13, OUTPUT);
  Serial.begin (9600);
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
}
void loop() {
  int duration, cm;
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);
  cm = duration / 58;
  Serial.print(cm);
  Serial.println(" cm");
  delay(100);

  if ( duration < 20)
  {
    digitalWrite(13, HIGH);
  }}

 

Николай620
Offline
Зарегистрирован: 10.12.2019

показывает в мониторе 

0

0

0

0

0

 

Николай620
Offline
Зарегистрирован: 10.12.2019

ооооо так это ж датчик света почти как в подЬездах получается через реле SRD ))))

купил всяких штучек для изучения ардуинки..

5N62V
Offline
Зарегистрирован: 25.02.2016

так гляньте что Вам возвращает пулсеИн:

вместо 

Serial.print(cm);

напишите

Serial.print(duration);

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Николай620 пишет:

показывает в мониторе 

0

Я же Вам писал: "обратите внимание на операции деления". Вы читаете, что Вам пишут?

Так откройте наконец описание операции деления и почитайте. Если сразу не дойдёт, читайте ещё раз и внимательно смотрите на свой код. И так пока не дойдёт!

Николай620
Offline
Зарегистрирован: 10.12.2019

int echoPin = 2;
int trigPin = 3;
int ledPin = 13;


void setup()
{
  pinMode(13, OUTPUT);
  Serial.begin (9600);
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
}
void loop() {
  int duration, cm;
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);
  cm = duration / 58;
 Serial.print(duration);
  Serial.println(" cm");
  delay(100);

  if ( duration < 20)
  {
    digitalWrite(13, HIGH);
  }}

так же 0

0

0

0

0

Николай620
Offline
Зарегистрирован: 10.12.2019

хорошо!

b707
Offline
Зарегистрирован: 26.05.2017

Николай620 пишет:


int echoPin = 2;
int trigPin = 3;
int ledPin = 13;


void setup()
{
  pinMode(13, OUTPUT);
  Serial.begin (9600);
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
}
void loop() {
  int duration, cm;
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);
  cm = duration / 58;
 Serial.print(duration);
  Serial.println(" cm");
  delay(100);

  if ( duration < 20)
  {
    digitalWrite(13, HIGH);
  }}

так же 0

0

0

0

0

похоже что вы запускаете какой-то другой код. не тот что выкладываете в форум

Николай620
Offline
Зарегистрирован: 10.12.2019
int echoPin = 2;
int trigPin = 3;
int ledPin = 13;
void setup()
{
pinMode(13, OUTPUT);
Serial.begin (9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);

}

void loop() {
  int duration, cm;
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);
  cm = duration / 58;
 Serial.print(duration);
  Serial.println(" cm");
  delay(100);
  if ( duration < 20)
  {
   digitalWrite(13, HIGH);
  }}

вот этот

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

Николай620 пишет:

хорошо!

Вот здесь подробнее про деление. Обязательно разберись сам, не жди подсказок.

b707
Offline
Зарегистрирован: 26.05.2017

Николай620 пишет:

int echoPin = 2;
int trigPin = 3;
int ledPin = 13;
void setup()
{
pinMode(13, OUTPUT);
Serial.begin (9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);

}

void loop() {
  int duration, cm;
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);
  cm = duration / 58;
 Serial.print(duration);
  Serial.println(" cm");
  delay(100);
  if ( duration < 20)
  {
   digitalWrite(13, HIGH);
  }}

вот этот

неправда. Этот код должен печатать не просто 0, а "0cm" - не вижу этого в вашем выводе. Значит запускаете код не тот, что обсуждаете.

проверяйте. может вы обновленный код забыли в плату загрузить?

5N62V
Offline
Зарегистрирован: 25.02.2016

Николай620 пишет:

так же 0

0

0

0

0

Вывод: Ваша функция измерения длительности ничего не меряет. А чего уж она , по Вашей задумке , должна мерять, и как Вы это реализовали - история умалчивает.

Николай620
Offline
Зарегистрирован: 10.12.2019

 извиняюсь 0 cm выдает,ну по задумке если до объекта меньше 20 см то светодиод должен загореться

 

5N62V
Offline
Зарегистрирован: 25.02.2016

Николай620 пишет:

 извиняюсь 0 cm выдает,ну по задумке если до объекта меньше 20 см то светодиод должен загореться

Задумка понятна. Но не меряет. Возможные причины:

1) измерительные цепи не подключены или подключены неверно

2) цепи генерации зондирующего импульса не подключены или подключены неверно

3) нет генерации зондирующего импульса

4) генерация есть, но уровень импульсов мал

5) уровень принимаемых импульсов мал и не воспринимается микропроцессором

6) длительность принимаемого импульса мала, и не может быть обработана примененным способом

Вывод: Вам нужен осциллограф, чтобы найти причину.

Николай620
Offline
Зарегистрирован: 10.12.2019

спасибо большое ,причина была как я думаю в контактах отходят папа мама ((светодиод очень быстро замигал так как операции эти проходят очень быстро да?надо задать ему что б включался и выключался я думаю))и показывает расстояние в мониторе 5400

Николай620
Offline
Зарегистрирован: 10.12.2019
int echoPin = 2;
int trigPin = 3;
int ledPin = 13;
void setup()
{
pinMode(13, OUTPUT);
Serial.begin (9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);

}

void loop() {
  int duration, cm;
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);
  cm = duration / 58;
 Serial.print(duration);
  Serial.println(" cm");
  delay(100);
   if ( duration < 5000)
  {
    digitalWrite(13, HIGH);
     
  }
  else
{
  digitalWrite(13, LOW);
   
}

}

 

Николай620
Offline
Зарегистрирован: 10.12.2019

получилось,спасибо обрадовало ппц))еще не на тот светодид смотрел)

почему показывает не как раньше в см а походу в мм?

b707
Offline
Зарегистрирован: 26.05.2017

Николай620 пишет:

почему показывает не как раньше в см а походу в мм?

Потому что вы не переменную cm  выводите, а "сырое" значение с датчика

Николай. ну надо хоть чуть-чуть стараться самому думать, а не сразу вопрос задавать

agnec2001
Offline
Зарегистрирован: 08.11.2019

можно и сразу вопрос, но тогда вопросов будет много, а толку от ответов мало :(

Николай620
Offline
Зарегистрирован: 10.12.2019

Последний вопрос на эту тему когда загружал скетч без диода он всё же выдовал мне 43 cm а не 4300 как сей час...

Николай620
Offline
Зарегистрирован: 10.12.2019

Не время полета ли звука он мне выводит?

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Господа, это клиника. 

astwo
Offline
Зарегистрирован: 10.07.2019

Николай620 пишет:
Не время полета ли звука он мне выводит?

Нет среднюю температуру по Гринвичу

b707
Offline
Зарегистрирован: 26.05.2017

Николай620 пишет:
Последний вопрос на эту тему когда загружал скетч без диода он всё же выдовал мне 43 cm а не 4300 как сей час...

Николай, у вас в каждом коде, который вы тут показываете - как минимум по десятку ошибок. Так что сказать. почему у вас раньше было 43, а сейчас 4300 - и какое из двух этих значений верное - абсолютно нереально.

Прежде чем начинать работать с датчиками и диодами - изучите любой учебник по языку программирования хотя бы до половины.

Николай620
Offline
Зарегистрирован: 10.12.2019

Раньше 22 строка была другая

b707
Offline
Зарегистрирован: 26.05.2017

Николай620 пишет:
Раньше 22 строка была другая

Николай... щли бы вы... учебник читать

Николай620
Offline
Зарегистрирован: 10.12.2019

Serial.print(cm)

Николай620
Offline
Зарегистрирован: 10.12.2019

Я про монитор

Николай620
Offline
Зарегистрирован: 10.12.2019

Не паникуйте ребята так рано у нас впереди робот балансир )))))

b707
Offline
Зарегистрирован: 26.05.2017

Николай620 пишет:
Не паникуйте ребята так рано у нас впереди робот балансир )))))

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

Николай620 пишет:
Не паникуйте ребята так рано у нас впереди робот балансир )))))
Это у кого как. У нас впереди пятница!