Ви не увійшли.
У вас в функции void humid() используется оператор return, а функция обьявлена без возврата значения.
Функции похожи, но не совсем. На ногу 10 похоже должен был быть повешен выход датчика дождя, а на a0 какой то аналоговый датчик влажности.
void означает, что функция ничего не возвращает. Поэтому как мне кажется что функция void humid() работать как задумано не будет.
А ошибка вываливается, потому что вызов этой функции помещен в условие, соответственно ожидается логическое значение, а она описана как ничего не возвращающая.
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()? Разве эти функции не одно и то же?
На попытку сделать 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=='