помогите найти ошибку

zarus
Offline
Зарегистрирован: 30.09.2012

есть код, при проверке пишет : expected constructor, destructor, or type conversion before 'for'
сам код :
byte ledPin[] = {4, 5, 6, 7, 8, 9, 10,
11, 12, 13};
int ledDelay;
int direction = 1;
int currentLED = 0;
unsigned long changeTime;
int potPin = 2;
pin for the potentiometer

void setup() {

for (int x=0; x<10; x++) {
pinMode(ledPin[x], OUTPUT); }
changeTime = millis();
}

void loop() {

ledDelay = analogRead(potPin);

last change
if ((millis() - changeTime) >
ledDelay) {
changeLED();
changeTime = millis();
}
}
void changeLED() {

for (int x=0; x<10; x++) {
digitalWrite(ledPin[x], LOW);
}

digitalWrite(ledPin[currentLED],
HIGH);

currentLED += direction;

end
if (currentLED == 9) {direction =
-1;}
if (currentLED == 0) {direction = 1;}
}

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

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

byte ledPin[] = {
  4, 5, 6, 7, 8, 9, 10,11, 12, 13};
int ledDelay;
int direction = 1;
int currentLED = 0;
unsigned long changeTime;
int potPin = 2;
//pin for the potentiometer

void setup() {

  for (int x=0; x<10; x++) {
    pinMode(ledPin[x], OUTPUT); 
  }
  changeTime = millis();
}

void loop() {

  ledDelay = analogRead(potPin);

 // last change
    if ((millis() - changeTime) > ledDelay) {
    changeLED();
    changeTime = millis();
  }
}
void changeLED() {

  for (int x=0; x<10; x++) {
    digitalWrite(ledPin[x], LOW);
  }

  digitalWrite(ledPin[currentLED], HIGH);
  currentLED += direction;

  //end
    if (currentLED == 9) {
    direction = -1;
  }
  if (currentLED == 0) {
    direction = 1;
  }
}

 

AlexFisher
AlexFisher аватар
Offline
Зарегистрирован: 20.12.2011

Определяйте функции ДО их использования (или хотя бы объявляйте - почитайте про синтаксис языка с)

Иначе говоря, ставте "Setup" и "Loop" последними в тексте программы. 

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

AlexFisher пишет:

Определяйте функции ДО их использования (или хотя бы объявляйте - почитайте про синтаксис языка с)

Иначе говоря, ставте "Setup" и "Loop" последними в тексте программы. 

Это не важно, в какой последовательности объявлять функции. Это все равно, что соблюдать последовательность объявления глобальных переменных. 
Я наоборот привык, что сначала идет setup и loop (main), а уже потом все остальное.

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

maksim пишет:

AlexFisher пишет:

Определяйте функции ДО их использования (или хотя бы объявляйте - почитайте про синтаксис языка с)

Иначе говоря, ставте "Setup" и "Loop" последними в тексте программы. 

Это не важно, в какой последовательности объявлять функции. Это все равно, что соблюдать последовательность объявления глобальных переменных. 
Я наоборот привык, что сначала идет setup и loop (main), а уже потом все остальное.

Формально - вы правы. Практически - есть баг ArduinoIDE. Иногда действительно не хочет в упор видеть функцию объявленную ниже. Я лично натыкался. Когда

void ttt()(){
  ttt2(); // кричит что не знает что такое ttt2();
}

void ttt2(){
}

Причем именно вот прямо так,  для теста и писал эти функции. Что-бы уж точно убедится что "проблема в этом". Менял их местами - начинало компилится. На аглоязычных форумах видел что "известная бага".

Поэтому, кстати, когда используешь несколько .ino файлов - иногда не желает видеть функции из одного файла в другом. Смотря по тому в каком порядоке (кажись по алфавиту) оно слепило их в один скетч.

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

leshak пишет:

maksim пишет:

AlexFisher пишет:

Определяйте функции ДО их использования (или хотя бы объявляйте - почитайте про синтаксис языка с)

Иначе говоря, ставте "Setup" и "Loop" последними в тексте программы. 

Это не важно, в какой последовательности объявлять функции. Это все равно, что соблюдать последовательность объявления глобальных переменных. 
Я наоборот привык, что сначала идет setup и loop (main), а уже потом все остальное.

Формально - вы правы. Практически - есть баг ArduinoIDE. Иногда действительно не хочет в упор видеть функцию объявленную ниже. Я лично натыкался. Когда

void ttt()(){
  ttt2(); // кричит что не знает что такое ttt2();
}

void ttt2(){
}

Причем именно вот прямо так,  для теста и писал эти функции. Что-бы уж точно убедится что "проблема в этом". Менял их местами - начинало компилится. На аглоязычных форумах видел что "известная бага".

Поэтому, кстати, когда используешь несколько .ino файлов - иногда не желает видеть функции из одного файла в другом. Смотря по тому в каком порядоке (кажись по алфавиту) оно слепило их в один скетч.

У меня без проблем компилится что в ArduinoIDE 1.0, что в ArduinoIDE 0023 (если убрать лишние скобки "()" в первой строке), может в более ранних версиях это и наблюдается.

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

maksim пишет:

У меня без проблем компилится что в ArduinoIDE 1.0, что в ArduinoIDE 0023 (если убрать лишние скобки "()" в первой строке), может в более ранних версиях это и наблюдается.

У меня тоже. На пустом скетче с loop() и setup() - компилится. Но, темне-менне. На большом, с несколькими файлами - имело место быть.
На то она и бага что нужно что-бы "звезды сошлись". Выискивать сейчас скетч - я не буду. Да и влюбом случае это был "код для клиента", так что не смогу его постить.
Прийдется поверить мне на слово (если хотите). Вот в итоге была ситуация.
Имеем компилирующийся скетч.
Добавляеем в главный файл вот эти две функции и именно в таком виде. Перед setup() (больше нигде они не использовались, писались именно что-бы убедится в этом и офигеть). Не компилируются (неизвестноей имя ttt2()) . Меняем меcтами - компилируется. Имена ttt и ttt2 специально брались что-бы гарантированно нигде не конфликтануть с имеющимся скетчем.

Вообщем хотите верте, хотите нет. Моя душа тоже против этого протестует, но лично я теперь знаю, что "порядок" иногда таки играет значение.
Проблему видел и на 1.0 и на 1.0.1 (специалино ставил проверить может в ней уфиксали)

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

Кстати о багах, есть такой баг в ArduinoIDE 1.0 не работает Serial.flush() - буфер не очищается!
вот пример кода:

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

void loop() {
  if(Serial.available()){  // если в буфере что появилось, то
    delay(100); // задержка, что бы буфер успел заполнится остальными символами
    Serial.println((char)Serial.read()); // читаем и выводим один символ 
    Serial.flush(); // очищаем буфер
  }
}

если отправить более одного символа в сериал-монитор, то вернуться должен только первый символ, в 0023 так и происходит, а в 1.0 выводит все отправленные символы.