Відповісти

Введіть повідомлення і натисніть Надіслати
Параметри

Назад

Огляд теми (нові повідомленні вгорі)

Roman1984
2017-02-18 09:19:18

У вас в функции void humid() используется оператор return, а функция обьявлена без возврата значения.

Piglet
2017-02-13 14:35:29

Функции похожи, но не совсем. На ногу 10 похоже должен был быть повешен выход  датчика дождя, а на a0 какой то аналоговый датчик влажности.
void означает, что функция ничего не возвращает. Поэтому как мне кажется что функция void humid() работать как задумано не будет.
А ошибка вываливается, потому что вызов этой функции помещен в условие, соответственно ожидается логическое значение, а она описана как ничего не возвращающая.

freeman86
2017-01-28 12:57:51
01
#define PUMP 5
02
#define LED 13
03
#define HUMIDITY 10
04
#define WATER_SENS A0
05
 
06
#define WATERING_MILSEK 3000
07
 
08
#define STATE_STANDBY 0
09
#define STATE_WATERING 1
10
#define STATE_NOWATER 2
11
 
12
void Blink();
13
void watering();
14
void humid();
15
boolean checkWater();
16
int state = STATE_STANDBY;
17
 
18
void setup() {
19
  pinMode(PUMP, OUTPUT);
20
  pinMode(LED, OUTPUT);
21
  pinMode(HUMIDITY, INPUT);
22
  pinMode(WATER_SENS, INPUT);
23
}
24
void loop() {
25
   switch (state){
26
    case STATE_STANDBY:
27
    checkWater == true;
28
    if(humid, false)
29
    state = STATE_WATERING;
30
    if(checkWater, false)
31
    state = STATE_NOWATER;
32
    break;
33
     
34
    case STATE_WATERING:
35
    watering();
36
    state = STATE_STANDBY;
37
    break;
38
 
39
    case STATE_NOWATER:
40
    Blink();
41
    state = STATE_STANDBY;
42
    break; 
43
    }
44
}
45
 
46
 
47
   boolean checkWater(){
48
     if(analogRead(WATER_SENS) >= 30)
49
     return true;
50
     else
51
     return false;
52
   }
53
 
54
   void humid(){
55
    if(digitalRead(HUMIDITY)== LOW)
56
  return true;
57
  else
58
  return false;
59
   }
60
 
61
   void watering(){
62
  digitalWrite(PUMP, HIGH);
63
  delay(WATERING_MILSEK);
64
  digitalWrite(PUMP, LOW);
65
   }
66
 
67
   void Blink(){
68
  if(checkWater() == false){
69
    digitalWrite(LED, HIGH);
70
    delay(500);
71
    digitalWrite(LED, LOW);
72
    delay(500);
73
  }
74
  else {
75
    digitalWrite(LED, LOW);
76
  }
77
 }

Код компилируется на Arduino IDE. На железе в действии еще не пробовал.

Вопрос: почему  void humid(), но boolean checkWater()? Разве эти функции не одно и то же? hmm
На попытку сделать 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=='

Підвал форуму