Непонятная ошибка компиляции

SERgunCHIK
Offline
Зарегистрирован: 11.02.2015

Всем доброго времени суток.

Пишу скетч автоматического долива, подмены воды в аквариуме.

Выходит корявенько, но не в этом суть.

Компилятор выдал ошибку  "function-definition is not allowed here before"

Не могу понять, что его не устраивает.

Arduino: 1.6.5 (Windows 7), Плата"Arduino/Genuino Micro"
 
Изменена опция сборки, пересобираем все
 
ultrasonic_bez_library.ino: In function 'void setup()':
ultrasonic_bez_library:46: error: a function-definition is not allowed here before '{' token
ultrasonic_bez_library:81: error: expected '}' at end of input
a function-definition is not allowed here before '{' token
 
#define EchoIn 4
#define TrigIn 5                       // Датчик уровня воды в 1 отсеке САМПа
#define EchoOut 6
#define TrigOut 7                      // Датчик уровня воды в 3 отсеке САМПа  
#define WATER_COUNTER 2                // счетчик доливаемой воды
#define WATER_VALWE 16                 // Клапан долива воды
#define WATER_PUMP 10                  // Помпа водооборота
#define IN_SAMP 9                      // Индикатор входного фильтра САМПа
#define Tank_Min A0                    // Минимальный уровень воды в аквариуме
#define Tank_Max A1                    // Максимальный уровень воды в аквариуме
#define PRESSURE 3                     // Датчик давления воды
int WaterTankMin = 0;                  // Переменная "мало воды в аквариуме"
int WaterTankMax = 0;                  // Переменная "много воды в аквариуме"
byte Press = LOW;                      // Переменная давления
int WaterIn = 0;                       // Переменная датчика уровня на входе САМП
int WaterOut = 0;                      // Переменная датчика уровня на выходе САМП
int Litres = 0;                        // Переменная воды
unsigned long currentTime;
unsigned long loopTime;
unsigned char WaterCounter;
unsigned char LastWaterCounter = 0;    // Переменная счетчика воды
// volatile int waterCountState = 0;
// byte lastWaterCountState = 0;

void setup() {
  Serial.begin(9600);
  pinMode(EchoIn, INPUT);
  pinMode(TrigIn, OUTPUT);
  pinMode(EchoOut, INPUT);
  pinMode(TrigOut, OUTPUT);
  pinMode(WATER_COUNTER, INPUT_PULLUP);
  pinMode(WATER_VALWE, OUTPUT);
  pinMode(WATER_PUMP, OUTPUT);
  pinMode(PRESSURE, INPUT_PULLUP);
  pinMode(IN_SAMP, OUTPUT);
  pinMode(Tank_Min, INPUT_PULLUP);
  pinMode(Tank_Max, INPUT_PULLUP);
  currentTime = millis();
  loopTime = currentTime;
  //  attachInterrupt(INT0, waterCount, RISING);
  // }
  //  void waterCount(){
  //     waterCountState = !waterCountState;
  //   }
  void loop()
  {
    digitalWrite(TrigIn, LOW);
    delayMicroseconds(2);
    digitalWrite(TrigIn, HIGH);
    delayMicroseconds(10);
    digitalWrite(TrigIn, LOW);
    WaterIn = pulseIn(EchoIn, HIGH);       // проверяем уровень воды на входе в САМП
    digitalWrite(TrigOut, LOW);
    delayMicroseconds(2);
    digitalWrite(TrigOut, HIGH);
    delayMicroseconds(10);
    digitalWrite(TrigOut, LOW);
    WaterOut = pulseIn(EchoOut, HIGH);     // проверяем уровень воды на выходе из САМПа
    WaterIn = WaterIn / 58;                // переводим в сантиметры
    WaterOut = WaterOut / 58;              // переводим в сантиметры
    currentTime = millis();
    if (currentTime >= (loopTime + 5))
      WaterCounter = digitalRead(WATER_COUNTER);
    if ((!WaterCounter) && (LastWaterCounter))
      Litres = Litres + 1;
    LastWaterCounter = WaterSounter
                       if (WaterOut >= 40)                    // 41 критически низкий уровень воды
    { digitalWrite(WATER_PUMP, LOW);        // выключить помпу
      digitalWrite(IN_SAMP, LOW);
    }
    else if (WaterOut <= 28)               // 26 нормальный уровень воды
    { digitalWrite(WATER_PUMP, HIGH);      // включить помпу
      digitalWrite(IN_SAMP, HIGH);
    }
    WaterTankMin = analogRead(Tank_Min);
    WaterTankMax = analogRead(Tank_Max);
    Press = digitalRead(PRESSURE);
    if (WaterIn > 18 && WaterOut > 38 && WaterTankMax > 150 && WaterTankMin  > 150 && Press != HIGH)
      digitalWrite(WATER_VALWE, HIGH);
    else if (WaterIn < 18 || WaterOut < 25 || WaterTankMax > 150 || Press != HIGH)
      digitalWrite(WATER_VALWE, LOW);
  }

 

 
 
dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

SERgunCHIK, не закрыт сетап фигурной скобкой

SERgunCHIK
Offline
Зарегистрирован: 11.02.2015

Спасибо, нашел, исправил.

Ну почему он ругался на нехватку "{" в "LOOP"?

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

SERgunCHIK пишет:

Ну почему он ругался на нехватку "{" в "LOOP"?

Это ты сам придумал или неправильно перевел. Компилятор ругался "определение функции здесь не допускается перед  знаком {". Потому что не была закрыта фигурной скобкой предыдущая функция.