Непонятная ошибка компиляции
- Войдите на сайт для отправки комментариев
Сб, 07/11/2015 - 17:29
Всем доброго времени суток.
Пишу скетч автоматического долива, подмены воды в аквариуме.
Выходит корявенько, но не в этом суть.
Компилятор выдал ошибку "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);
}
SERgunCHIK, не закрыт сетап фигурной скобкой
Спасибо, нашел, исправил.
Ну почему он ругался на нехватку "{" в "LOOP"?
Ну почему он ругался на нехватку "{" в "LOOP"?
Это ты сам придумал или неправильно перевел. Компилятор ругался "определение функции здесь не допускается перед знаком {". Потому что не была закрыта фигурной скобкой предыдущая функция.