Автоматический полив комнатных цветов

freeman86
Offline
Зарегистрирован: 07.09.2016

Делаю полив на четыре цвета. 

Пока пишу скетч на один, поскольку совсем новичок и даже с учетом того, что пишу по образу и подобию других, есть ошибки. 

[code]
 
#define PUMP 5 // насос
#define LED 13 // индикатор
#define HUMIDITY 10 // датчик влажности цифровой 
#define WATER_SENS A0 // датчик воды аналоговой
 
#define WATERING_MILSEK 3000  // время работы насоса
 
#define STATE_STANDBY 0
#define STATE_WATERING 1
#define STATE_NOWATER 2
 
int Blink();
int watering();
int state = STATE_STANDBY;
boolean Humid;
boolean checkWater();
 
 
void setup() {
 
   pinMode(PUMP, OUTPUT);
  pinMode(LED, OUTPUT);
  pinMode(HUMIDITY, INPUT);
  pinMode(WATER_SENS, INPUT);
}
 
void loop() {
  
 switch (state){
    case STATE_STANDBY:
    checkWater();
    if(Humid == 0)
    state = STATE_WATERING;
    if(Humid == 1)
    state = STATE_NOWATER;
    break;
 
    case STATE_WATERING:
    watering();
    state = STATE_STANDBY;
    break;
 
    case STATE_NOWATER:
    Blink();
    if(checkWater())
    state = STATE_STANDBY;
    break;
  }
}
 
void checkWater(){
 
 if(analogRead(WATER_SENS >= 30 )
 return true;
 else
 return false;
}
void watering(){
  
  digitalWrite(PUMP, HIGH);
  delay(WATERING_MILSEK);
  digitalWrite(PUMP, LOW);
}
boolean Humid(){
 
 if(digitalRead(HUMIDITY)
 Humid = false;
 else
 Humid = true;
}
 void Blink(){
 
  
 }
 
 
[/code]
 
а ошибку выдает такую: 
 
Arduino: 1.6.13 (Windows 10), Плата:"Arduino/Genuino Uno"
 
C:\Users\Администратор\Documents\Arduino\pump0\pump0.ino: In function 'void checkWater()':
 
pump0:52: error: ambiguating new declaration of 'void checkWater()'
 
C:\Users\Администратор\Documents\Arduino\pump0\pump0.ino:17:9: note: old declaration 'boolean checkWater()'
 
pump0:55: error: expected ')' before 'return'
 
C:\Users\Администратор\Documents\Arduino\pump0\pump0.ino: In function 'void watering()':
 
pump0:59: error: ambiguating new declaration of 'void watering()'
 
C:\Users\Администратор\Documents\Arduino\pump0\pump0.ino:14:5: note: old declaration 'int watering()'
 
C:\Users\Администратор\Documents\Arduino\pump0\pump0.ino: In function 'boolean Humid()':
 
pump0:65: error: 'boolean Humid()' redeclared as different kind of symbol
 
C:\Users\Администратор\Documents\Arduino\pump0\pump0.ino:16:9: note: previous declaration 'boolean Humid'
 
pump0:68: error: expected ')' before 'Humid'
 
C:\Users\Администратор\Documents\Arduino\pump0\pump0.ino: In function 'void Blink()':
 
pump0:72: error: ambiguating new declaration of 'void Blink()'
 
C:\Users\Администратор\Documents\Arduino\pump0\pump0.ino:13:5: note: old declaration 'int Blink()'
 
exit status 1
ambiguating new declaration of 'void checkWater()'
 
 
 
Что не так с void checkWater()? 

 

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

либо объявляйте и пишите фукции одинаково

а то объявляете boolean checkWater(), а сама фукция void checkWater()

либо все функции, выше места обращения к ним и можно не объявлять.

freeman86
Offline
Зарегистрирован: 07.09.2016

Спасибо! Т.е. можно просто поменять Void на Boolean?

Я просто по смыслу само слово Void(пустота) не понимаю. Функция Boolean понятно, а функция "пустота" уже не очень )

не понял последнюю строчку )  

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

про последнюю строчку, пока,забудте.

просто так менять на обум ничего нельзя, надо понимать что ты делаешь !

void "по смыслу", в данном случае - ничего не возращающая функция.

у вас в скече полно ошибок, оформите как положено код (вижу пытались), назову номера строк, дальше если сами думать будете, помогут.

 

freeman86
Offline
Зарегистрирован: 07.09.2016
#define PUMP 5
#define LED 13
#define HUMIDITY 10
#define WATER_SENS A0

#define WATERING_MILSEK 3000

#define STATE_STANDBY 0
#define STATE_WATERING 1
#define STATE_NOWATER 2

void Blink();
void watering();
void humid();
boolean checkWater();
int state = STATE_STANDBY;

void setup() {
  pinMode(PUMP, OUTPUT);
  pinMode(LED, OUTPUT);
  pinMode(HUMIDITY, INPUT);
  pinMode(WATER_SENS, INPUT); 
}
void loop() {
   switch (state){
    case STATE_STANDBY:
    checkWater == true;
    if(humid, false)
    state = STATE_WATERING;
    if(checkWater, false)
    state = STATE_NOWATER;
    break;
    
    case STATE_WATERING:
    watering();
    state = STATE_STANDBY;
    break;

    case STATE_NOWATER:
    Blink();
    state = STATE_STANDBY;
    break;  
    }
}


   boolean checkWater(){
     if(analogRead(WATER_SENS) >= 30)
     return true;
     else
     return false;
   }

   void humid(){
    if(digitalRead(HUMIDITY)== LOW)
  return true;
  else 
  return false;
   }

   void watering(){
  digitalWrite(PUMP, HIGH);
  delay(WATERING_MILSEK);
  digitalWrite(PUMP, LOW);
   }

   void Blink(){
  if(checkWater() == false){
    digitalWrite(LED, HIGH);
    delay(500);
    digitalWrite(LED, LOW);
    delay(500);
  }
  else { 
    digitalWrite(LED, LOW);
  }
 }

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

Но вот вопрос: почему  void humid(), но boolean checkWater()? Разве эти функции не одно и то же? 
На попытку сделать void checkWater() (в глобальной переменной тоже меняю), выводится следующая ошибка: 
 
 
In file included from C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Arduino.h:24:0,
 
                 from sketch\pump1_1.ino.cpp:1:
 
C:\Users\Администратор\Documents\Arduino\pump\pump1_1\pump1_1.ino: In function 'void Blink()':
 
pump1_1:68: error: invalid operands of types 'void' and 'bool' to binary 'operator=='
 
exit status 1
invalid operands of types 'void' and 'bool' to binary 'operator=='