Ошибка в программировании Arduino - PullRequest
2 голосов
/ 31 января 2012

Я получаю следующую ошибку:

ошибка: ожидаемый конструктор, деструктор или преобразование типов перед символом ‘(’

Вот исходный код, который я написал:

   void setup() {
     pinMode(1,OUTPUT);
   [...]
     pinMode(13,INPUT);
   }
   int i = 1;
   bool pushed = digitalRead(13);
   bool val = 0;
   randomSeed(analogRead(0));
   void loop() {
     if (pushed == 1) {
       for (i = 1; i < 9; i++) {
         val = random(2);
         digitalWrite(i,val);
       }
     }
   }

Переменные и настройки в порядке; ошибка находится в строке for. Может кто-нибудь сказать мне, как это исправить?

(правка: добавлено начало скрипта, извините за презентацию (первый вопрос здесь)

(правка: похоже, что ошибка не в определении «i». Я использую Arduino UNO SMD Edition, если это поможет (и версию Arduino alpha 0022 для Linux в среде IDE)) РЕДАКТИРОВАТЬ: хорошо, ребята, решено сейчас. Похоже, что моя версия Arduino IDE была загружена не полностью, и я поставил randomSeed в неправильном месте (он должен быть в функции setup.) (Когда я вставил его в функцию setup до того, как Обновление показало сообщение об ошибке, в котором говорится, что /opt/arduino/lib/math.h что-то упустил (или что-то в этом роде, у меня нет полного сообщения)). Спасибо за вашу помощь, и я надеюсь, что скоро смогу помочь вам в Arduino!

Ответы [ 4 ]

2 голосов
/ 01 февраля 2012

Вы, кажется, имеете оператор randomSeed(analogRead(0));, плавающий между вашими определениями функций setup() и loop().

Переместите его и любые другие операции ввода-вывода в конец функции setup(), чтобы вы прочитали после , установив направления выводов:

   int i = 1;
   bool pushed; 
   bool val = 0;

   void setup() {
     pinMode(1,OUTPUT);
   [...]
     pinMode(13,INPUT);

     pushed = digitalRead(13);
     randomSeed(analogRead(0));
   }

   void loop() {
     if (pushed == 1) {
       for (i = 1; i < 9; i++) {
         val = random(2);
         digitalWrite(i,val);
       }
     }
   }

Это будет считывать значение контакта 13 в нажатой только один раз (например, вы держите кнопку при включении питания); в зависимости от того, что вы хотите сделать, вы можете переместить чтение на начало loop(), поэтому при нажатии кнопки записывает случайные значения.

2 голосов
/ 31 января 2012
for (int i = 1; i < 9; i++)

действует в C99 / C11, но не действует в C89.

Если вы используете компилятор C89, вы должны определить i вне предложений цикла for:

int i;
for (i = 1; i < 9; i++)

Также в C89 все объявления должны следовать за левой скобкой блока, вы не можете свободно смешивать объявления и операторы.

1 голос
/ 01 февраля 2012
#define pinMode1 1
#define pinMode2 13

bool pushed;
bool val = 0;

void setup() {
  // Declare OUTPUT pin.
  pinMode(pinMode1, OUTPUT);

  // Declare INPUT pin.
  pinMode(pinMode2, INPUT);

  // Set digitalRead().
  pushed = digitalRead(pinMode2);

  // Initializes the pseudo-random number generator.
  randomSeed(analogRead(0));
}

void loop() {
  if (pushed == 1) {
    for (int i = 1; i < 9; i++) {
      val = random(2);
      // Set i to HIGH or LOW.
      digitalWrite(i, val);
    }
  }
}
1 голос
/ 31 января 2012

В C (до C99) нельзя определять новую переменную в первом выражении цикла for. Попробуйте вместо этого объявить переменную i в верхней части функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...