azeka
13.Март.2023 15:14:02
1
#include <Wire.h> // библиотека для протокола I2C
#include <LiquidCrystal_I2C.h> // подключаем библиотеку для LCD 1602
#include <DHT.h> // подключаем библиотеку для датчика
LiquidCrystal_I2C LCD(0x3F,16,2); // присваиваем имя LCD для дисплея
DHT dht(2, DHT11);
byte simvol[8] = {
0b11100,
0b10100,
0b11100,
0b00000,
0b00000,
0b00000,
0b00000,
0b00000,
}; // сообщаем на каком порту будет датчик
int lowerThreshold = 420;
int upperThreshold = 520;
// Выводы, подключенные к датчику
#define sensorPower 9
#define sensorPin A0
// Переменная для хранения значения уровня воды
int val = 0;
// Объявляем выводы, к которым подключены светодиоды
int redLED = 13;
int yellowLED = 12;
int greenLED = 11;
void setup()
{
LCD.init(); // инициализация LCD дисплея
LCD.backlight(); // включение подсветки дисплея
dht.begin(); // запускаем датчик DHT11
Serial.begin(9600);
pinMode(sensorPower, OUTPUT);
digitalWrite(sensorPower, LOW);
// Настроить выводы светодиодов на выход
pinMode(redLED, OUTPUT);
pinMode(yellowLED, OUTPUT);
pinMode(greenLED, OUTPUT);
// Изначально выключить все светодиоды
digitalWrite(redLED, LOW);
digitalWrite(yellowLED, LOW);
digitalWrite(greenLED, LOW);
}
void loop()
{
// считываем температуру (t) и влажность (h)
float h = dht.readHumidity();
float t = dht.readTemperature();
// выводим температуру (t) и влажность (h) на жк дисплей
LCD.setCursor(0,0);
LCD.print("Hum:");
LCD.print(h );
LCD.setCursor(10,0);
LCD.print("%");
LCD.createChar(1, simvol);
LCD.setCursor(10,1); // ставим курсор на 1 символ первой строки
LCD.print(char(1)); // печатаем символ на первой строке
LCD.setCursor(0,1);
LCD.print("Temp:");
LCD.print(t);
delay(100);
}
int readSensor(){
if (level == 0)
{
Serial.println("Water Level: Empty");
digitalWrite(redLED, LOW);
digitalWrite(yellowLED, LOW);
digitalWrite(greenLED, LOW);
}
else if (level > 0 && level <= lowerThreshold)
{
Serial.println("Water Level: Low");
digitalWrite(redLED, HIGH);
digitalWrite(yellowLED, LOW);
digitalWrite(greenLED, LOW);
}
else if (level > lowerThreshold && level <= upperThreshold)
{
Serial.println("Water Level: Medium");
digitalWrite(redLED, LOW);
digitalWrite(yellowLED, HIGH);
digitalWrite(greenLED, LOW);
}
else if (level > upperThreshold)
{
Serial.println("Water Level: High");
digitalWrite(redLED, LOW);
digitalWrite(yellowLED, LOW);
digitalWrite(greenLED, HIGH);
}
// Данная функция используется для получения показаний
digitalWrite(sensorPower, HIGH);
delay(10);
val = analogRead(sensorPin);
digitalWrite(sensorPower, LOW);
return val;
}
помогите в чем здесь ошибка и как её исправить
b707
13.Март.2023 15:27:29
2
Поясните, что за ошибка?
Если компиляции - приведите сообщение компилятора полностью.
Если дело в том, что код работает не так, как вы ожидали - будет полезно пояснить, что этот код делает, как он должен работать по задумке и как на самом деле - и чем одно отличается от другого.
А где вызывается функция
readSensor()
?
azeka
13.Март.2023 15:52:01
4
b707:
Поясните, что за ошибка?
Если компиляции - приведите сообщение компилятора полностью.
Если дело в том, что код работает не так, как вы ожидали - будет полезно пояснить, что этот код делает, как он должен работать по задумке и как на самом деле - и чем одно отличается от другого.
просто я решил объединить два кода в один но почему-то выдает ошибку либо в строках с if либо строку с loop
b707
13.Март.2023 15:58:44
7
Так почему вы не покажете эти сообщения об ошибках?
azeka
13.Март.2023 16:00:00
9
Compilation error: ‘level’ was not declared in this scope
Вы бы лучше первоначальные скетчи показали !
b707
13.Март.2023 16:01:35
11
английским владеете? Написано - переменная level не определена в коде. И она таки не определена. Значит надо найти в исходном коде, где и как она была описана и сделать в новом коде так же.
И так по всем не описанным переменным, если будут
azeka
13.Март.2023 16:01:36
12
в основном ошибка компиляции выходит просто в разных местах
b707
13.Март.2023 16:03:18
13
не бывает просто “ошибки компиляции”. Каждая ошибка разаная и для каждой компилятор пишет, что именно не так - вот как выше с переменной.
Все эти ошибки нужно исправить.
Писать что у вас “ошибка компиляции” - бессмысленно и просто глупо.
azeka
13.Март.2023 16:06:15
14
int lowerThreshold = 420;
int upperThreshold = 520;
// Выводы, подключенные к датчику
#define sensorPower 9
#define sensorPin A0
// Переменная для хранения значения уровня воды
int val = 0;
// Объявляем выводы, к которым подключены светодиоды
int redLED = 12;
int yellowLED = 13;
int greenLED = 11;
void setup()
{
Serial.begin(9600);
pinMode(sensorPower, OUTPUT);
digitalWrite(sensorPower, LOW);
// Настроить выводы светодиодов на выход
pinMode(redLED, OUTPUT);
pinMode(yellowLED, OUTPUT);
pinMode(greenLED, OUTPUT);
// Изначально выключить все светодиоды
digitalWrite(redLED, LOW);
digitalWrite(yellowLED, LOW);
digitalWrite(greenLED, LOW);
}
void loop()
{
int level = readSensor();
if (level == 0)
{
Serial.println("Water Level: Empty");
digitalWrite(redLED, LOW);
digitalWrite(yellowLED, LOW);
digitalWrite(greenLED, LOW);
}
else if (level > 0 && level <= lowerThreshold)
{
Serial.println("Water Level: Low");
digitalWrite(redLED, HIGH);
digitalWrite(yellowLED, LOW);
digitalWrite(greenLED, LOW);
}
else if (level > lowerThreshold && level <= upperThreshold)
{
Serial.println("Water Level: Medium");
digitalWrite(redLED, LOW);
digitalWrite(yellowLED, HIGH);
digitalWrite(greenLED, LOW);
}
else if (level > upperThreshold)
{
Serial.println("Water Level: High");
digitalWrite(redLED, LOW);
digitalWrite(yellowLED, LOW);
digitalWrite(greenLED, HIGH);
}
delay(1000);
}
// Данная функция используется для получения показаний
int readSensor()
{
digitalWrite(sensorPower, HIGH);
delay(10);
val = analogRead(sensorPin);
digitalWrite(sensorPower, LOW);
return val;
}
код уровня воды
azeka
13.Март.2023 16:07:11
15
#include <Wire.h> // библиотека для протокола I2C
#include <LiquidCrystal_I2C.h> // подключаем библиотеку для LCD 1602
#include <DHT.h> // подключаем библиотеку для датчика
LiquidCrystal_I2C LCD(0x3F,16,2); // присваиваем имя LCD для дисплея
DHT dht(2, DHT11); // сообщаем на каком порту будет датчик
byte simvol[8] = {
0b11100,
0b10100,
0b11100,
0b00000,
0b00000,
0b00000,
0b00000,
0b00000,
};
void setup() {
LCD.init(); // инициализация LCD дисплея
LCD.backlight(); // включение подсветки дисплея
dht.begin(); // запускаем датчик DHT11
}
void loop() {
// считываем температуру (t) и влажность (h)
float h = dht.readHumidity();
float t = dht.readTemperature();
// выводим температуру (t) и влажность (h) на жк дисплей
LCD.setCursor(0,0);
LCD.print("Hum:");
LCD.print(h);
LCD.setCursor(10,0);
LCD.print("%");
LCD.createChar(1, simvol);
LCD.setCursor(10,1); // ставим курсор на 1 символ первой строки
LCD.print(char(1)); // печатаем символ на первой строке
LCD.setCursor(0,1);
LCD.print("Temp:");
LCD.print(t);
delay(100);
}
код датчика температуры и влажности
azeka
13.Март.2023 16:07:47
16
их надо объединить в один
b707
13.Март.2023 16:10:08
17
В вашем случае все просто - соединяете вместе функции setup() обоих кодов, потом так же loop(). Ничего не забываете.
Функцию ReadSensor() просто копируете.
Пробуете, показываете в форум.
azeka
13.Март.2023 16:17:38
18
спасибо всем
код сработал
иду тестировать
b707
13.Март.2023 16:18:26
19
azeka:
код сработал
может “скомпилировался”? Учитесь выражаться правильно, а то вас никто не поймет
Хоть и понедельник, но 13-ое.
3 лайка