Помощь с кодом

zinya_
Offline
Зарегистрирован: 23.12.2012

Здравствуйте. В этом совсем новичок. Помогите пожалуйста с кодом. Не происходит компиляция кода. Использовал пример для работы с ультразвуковым датчиком (делал парктроник).

Вот принципиальная схема 

и сам код:

/* Ping))) Sensor

       Схема:

    * +V выход датчика подсоединяется к +5V

    * GND выход датчика подсоединяется к земле

    * SIG выход датчика подсоединяется к цифровому выводу 7

 */

  

pinMode(13, OUTPUT); // синий

pinMode(12, OUTPUT); // зеленый

pinMode(11, OUTPUT); // красный

const int pingPin = 7;

  

void setup() {

  Serial.begin(9600);

}

  

void loop()

{

  long duration, cm;

  

  // The PING))) is triggered by a HIGH pulse of 2 or more microseconds.

  // Give a short LOW pulse beforehand to ensure a clean HIGH pulse:

  pinMode(pingPin, OUTPUT);

  digitalWrite(pingPin, LOW);

  delayMicroseconds(2);

  digitalWrite(pingPin, HIGH);

  delayMicroseconds(5);

  digitalWrite(pingPin, LOW);

  

  // 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(pingPin, INPUT);

  duration = pulseIn(pingPin, HIGH);

  

  // конвертируем время в расстояние

  cm = microsecondsToCentimeters(durations);

  // показ определенного цвета, в зависимости от расстояния

  if(cm > 0 && cm <= 15) {

    // горит красный цвет

    digitalWrite(13, LOW);

    digitalWrite(12, LOW);

    digitalWrite(11, HIGH);

  } else if(cm <= 60 && cm > 15) {

    // горит голубой

    digitalWrite(12, LOW);

    digitalWrite(11, LOW);

    digitalWrite(13, HIGH);

  } else {

    // горит зеленый цвет

    digitalWrite(13, LOW);

    digitalWrite(11, LOW);

    digitalWrite(12, HIGH);

  

  Serial.print(cm);

  Serial.print("cm");

  Serial.println();

  

  delay(1000);

}

long microsecondsToCentimeters(long microseconds)

{

  // Скорость звука 340 м/с или 29 мкс на сантиметр.

  // Во время измерения расстояния волна проходит туда и обратно,

  // поэтому нужно еще поделить пополам полученное значение от датчика

  return microseconds / 29 / 2;

}

 

ustas
Offline
Зарегистрирован: 12.03.2012

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

И на вскидку видно несоответствие схемы и кода. На схеме датчик подключается к ADC1 (это A1 или что?), а в скетче используется pingPin (7). 

Кстати, откуда эта схема? 

zinya_
Offline
Зарегистрирован: 23.12.2012

Микроконтроллер arduino duemilanove (atmega 168). Признаюсь честно, мне схему скинули.

ustas
Offline
Зарегистрирован: 12.03.2012

а датчик-то какой? куда он "по правде" подключен?

zinya_
Offline
Зарегистрирован: 23.12.2012

Человеку делали курсовой, после того как сбросили данные, больше не отвечают. Могу сбросить ту часть, где идет разработка. Сам я не разбираюсь. Может там что и указано.

ustas
Offline
Зарегистрирован: 12.03.2012

с такой "постановкой задачи", боюсь, помощь придет не скоро...

zinya_
Offline
Зарегистрирован: 23.12.2012

 

Вроде датчик  Ultrasonic Range Finder 

maksim
Offline
Зарегистрирован: 12.02.2012

Естественно не компилируется если вы допускаете грубейшие синтаксические ошибки:
- не верно вызываете функции pinMode(), они должны вызываться в функции setup().


pinMode(13, OUTPUT); // синий
pinMode(12, OUTPUT); // зеленый
pinMode(11, OUTPUT); // красный

void setup() {

  Serial.begin(9600);
}

- путаете название переменной duration с durations.


void loop(){
  long duration, cm;
  ...
  cm = microsecondsToCentimeters(durations);
  ...

и посмотрите как правильно вставлять код в комментарии.

zinya_
Offline
Зарегистрирован: 23.12.2012
kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Вы просите помощи, но вместо того, чтобы прочитать советы, даже ничего не пытаетесь сделать самостоятельно. Нам не важно, откуда исходники. Если нужен результат, сделайте хотя бы то, что Вам посоветовали. В противном случае - купите готовое и не майтесь

step962
Offline
Зарегистрирован: 23.05.2011

maksim пишет:

Естественно не компилируется если вы допускаете грубейшие синтаксические ошибки:
- не верно вызываете функции pinMode(), они должны вызываться в функции setup().

Вызов функции pinMode() вне функции setup() не является ошибкой. Тем более грубейшей или синтаксической.

Здесь речь может идти разве что о неоптимальном использовании ресурсов мк - выполнение операции чаще, чем это необходимо по логике задачи.

maksim
Offline
Зарегистрирован: 12.02.2012

step962 пишет:

maksim пишет:

Естественно не компилируется если вы допускаете грубейшие синтаксические ошибки:
- не верно вызываете функции pinMode(), они должны вызываться в функции setup().

Вызов функции pinMode() вне функции setup() не является ошибкой. Тем более грубейшей или синтаксической.

Здесь речь может идти разве что о неоптимальном использовании ресурсов мк - выполнение операции чаще, чем это необходимо по логике задачи.

Вы о чем? Я не писал что ошибка в том что они вызываются именно вне setup(), ошибка в том что они не верно вызываются. А в конкретном данном случае они (речь шла и идет только о 3-х раз выделенных в коде выше) должны (но не обязаны) вызываться в setup() - это уже совет по исправлению ошибки. 
Если считаете что вызывать их так не грубейшая ошибка... то какая это ошибка???


const int pingPin = 7;

pinMode(13, OUTPUT); // синий
pinMode(12, OUTPUT); // зеленый
pinMode(11, OUTPUT); // красный

void setup() {
  Serial.begin(9600);
}

void loop(){
  long duration, cm;
  ...
}

 

leshak
Offline
Зарегистрирован: 29.09.2011

Топик-стартер допускает еще такие грубые ошибки:

1.  Не читает прекрепленные ветки http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukommentarii  (я поправил, в стартовом).

2. Не информативно называет темы (желательно все-таки придумывать какое-то уникальное название темы, хоть и не всегда это просто. 99% тем требуют помощи с к кодом, так что все их так называть?)

step962
Offline
Зарегистрирован: 23.05.2011

maksim пишет:

Если считаете что вызывать их так не грубейшая ошибка... то какая это ошибка???

Это грубейшая синтаксическая ошибка "размещение исполняемых инструкций вне тела функции."

Но размещение вызова функции pinMode() вне функции setup() ошибкой не является.

Не забывайте: новички могут понять ваши слова буквально и могут вбить себе в подкорку, что pinMode внутри loop() или любой другой функции кроме setup() - это уже ошибка.

leshak
Offline
Зарегистрирован: 29.09.2011

step962 пишет:

Не забывайте: новички могут понять ваши слова буквально и могут вбить себе в подкорку, что pinMode внутри loop() или любой другой функции кроме setup() - это уже ошибка.

Не волнуйтесь. Как вобъют, так и выбъют. Максим любит в примерах pinMode вместо digitalWrite :)

maksim
Offline
Зарегистрирован: 12.02.2012

step962 пишет:
Это грубейшая синтаксическая ошибка "размещение исполняемых инструкций вне тела функции."

... а также не при объяелении переменных при условии что функция может возвращать значения.

int a = analogRead(A1);

void setup() {}
void loop() {}

 

maksim
Offline
Зарегистрирован: 12.02.2012

leshak пишет:

step962 пишет:

Не забывайте: новички могут понять ваши слова буквально и могут вбить себе в подкорку, что pinMode внутри loop() или любой другой функции кроме setup() - это уже ошибка.

Не волнуйтесь. Как вобъют, так и выбъют. Максим любит в примерах pinMode вместо digitalWrite :)

Это только с динамической индикацией при прямом подключении к МК.