#define PERIOD1 20000 // Период в миллисекундах (Через сколько потухнет дисплей)
#define PERIOD2 100 // Период в миллисекундах (Обновление дисплея)
#include <LiquidCrystal.h> // Библиотека управления дисплеем
#include <microDS18B20.h> // Библиотека чтения температуры
#include <iarduino_RTC.h> // Библиотека работы с модулем часов
LiquidCrystal lcd (8, 9, 4, 5, 6, 7); // Пины экрана
iarduino_RTC clock(RTC_DS1302, 2, 4, 3); // Пины подключения модуля часов (RST, Clock, Data)
MicroDS18B20 <A1> sensor; // Указание пина подключения сенсора влаги
int txt_1 = 0; // Счётчик вывода текста "-<*GREENHOUSE*>-" и времени
int txt_2 = 0; // Счётчик вывода меню или температуры и влажности
long menu_time = 0; // Счётчик удержания меню
int c_time = 3000; // Значение счётчика меню
uint32_t timer1; // Переменная таймера 1 (Яркость экрана)
uint32_t timer2; // Переменная таймера 2 (Обновление экрана)
byte menu_sel = 0; // Счётчик пунктов меню
byte wvalue; // Переменная влажности
byte gradus[8] = {B01100, B10010, B10010, B01100, // Символ градуса
B00000, B00000, B00000, B00000};
//---------------------------------------------------------------------------------------------------------------------------
void setup()
{
lcd.clear(); // Очистка экрана
analogWrite(10, 255); // Установить максимальную яркость подсветки
lcd.begin(16, 2); // Инициализируем LCD 16x2
lcd.createChar(0, gradus); // Переменная градусов
clock.begin(); // Начало работы с модулем часов
//-----------------------(Только после замены контроллера или батарейки!!!)--------------------------------------------------
delay(300); // Ожидание инициализации модуля часов
// |Сек|Мин|Час|День|Мес|Год)
// clock.settime (00, 04, 02, 12, 6, 23); // Запись первоначального значения времени
// Serial.begin(57600); // Открытие порта всязи с компьютером (для отладки) // Последовательность имеет значение!
}
//--------------------------------------ОСНОВНОЙ ЦИКЛ-------------------------------------------------------------------------------------
void loop()
{
//---------------------------ЗАГОЛОВОК (ЧАСЫ, ТЕМПЕРАТУРА и ВЛАДНОСТЬ)--------------------------------------------------------------------
clk();
scrn();
//---------------------------------УМЕНЬШЕНИЕ ПОДСВЕТКИ ЭКРАНА----------------------------------------------------------------------------
if (millis() - timer1 >= PERIOD1) // ищем разницу
{
analogWrite(10, 5); // Установить минимальную яркость подсветки
timer1 = millis(); // Сброс таймера подсветки
}
//-----------------------------------ПРОВЕРКА НАЖАТИЯ КНОПОК------------------------------------------------------------------------------
if (analogRead(A0) <= 900 && analogRead(A0) <= 1023) // Проверка нажата ли какая нибудь кнопка
{
analogWrite(10, 255); // Установить минимальную яркость подсветки
timer1 = millis(); // Сброс таймера подсветки
}
if (analogRead(A0) >= 700 && analogRead(A0) <= 800) // Проверка нажата ли кнопка SELECT
{
general_menu(); // Переход в меню настроек
}
if (millis() - timer1 >= PERIOD1) // ищем разницу
{
analogWrite(10, 255); // Установить минимальную яркость подсветки
timer1 = millis(); // Сброс таймера подсветки
}
}
//------------------------------------КОНЕЦ ОСНОВНОГО ЦИКЛА-------------------------------------------------------------------------------
//----------------------------------------------------------------------------------------------------------------------------------------
//-----------------------------------------ПОДПРОГРАММЫ-----------------------------------------------------------------------------------
//----------------------------------------------------------------------------------------------------------------------------------------
//----------------------------------------ОСНОВНОЕ МЕНЮ----------------------------------------------------------------------------------
void general_menu()
{
delay(300);
lcd.clear(); // Очистка экрана
bool flag = 0;
int menu_screen = 0;
menu_time = 0;
while (menu_time < c_time)
{
lcd.setCursor(0,0);
lcd.print (" MENU SELECT "); // Вывести текст
lcd.setCursor(0,1); // Установить курсор на вторую строку в нулевую позицию
lcd.print ("< LEFT - RIGHT >"); // Вывести текст
menu_time++;
if (analogRead(A0) >= 0 && analogRead(A0) <= 100) // Если значение кнопки меньше 100 -> "Right Button"
{
menu_list(); // Воход в меню
flag = 0;
delay(300);
}
else if (analogRead(A0) >= 700 && analogRead(A0) <= 900)
{
flag = 1;
delay(300);
}
if (flag == 1)
{
lcd.clear();
timer1 = millis();
timer2 = millis();
analogWrite(10, 255); // Установить минимальную яркость подсветки
return;
}
}
lcd.clear();
}
//---------------------------------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------------------------------
void menu_list()
{
int menu_time_2 = 0;
lcd.setCursor(0,0); // Установить курсор на вторую строку
lcd.print (" WATER ON/OFF ");
lcd.setCursor(0,1);
lcd.print (" -> OFF ");
while (menu_time_2 < 24767)
{
menu_time_2 = menu_time_2 + 1;
delay(1);
}
timer1 = millis();
timer2 = millis();
// delay(300);
return;
}
/*
LABLE_1: //------------------------------------------------------------------------------------------------------------------
if (analogRead(A0) >= 700 && analogRead(A0) <= 800) // Нажатие кнопки SELECT
{
return; // Выходим из функции
}
else
{
delay(100);
goto LABLE_1;
}
}
*/
//----------------------------------------------------------------------------------------------------------------------------------------
//---------------------------------ЧТЕНИЕ ТЕМПЕРАТУРЫ И ВЛАЖНОСТИ-------------------------------------------------------------------------
void scrn()
{
sensor.requestTemp();
lcd.setCursor(0,1); // Установить курсор на вторую строку
lcd.print ("t");
lcd.write((byte)(0));
lcd.print ("C");
lcd.print(char(126));
lcd.print (sensor.getTemp()); // Вывод температуры
lcd.setCursor(8,1);
lcd.print (" w"); lcd.print(char(126));
wvalue = map(analogRead(A2), 370, 1020, 100, 0); // Чтение влажности
if (millis() - timer2 >= PERIOD2) // Задержка обновления экрана
{
lcd.setCursor(12,1); lcd.print (wvalue); lcd.print ("% "); // Вывод влажности
timer2 = millis(); // сброс таймера
}
}
//------------------------------------------ЗАГОЛОВОК И ЧАСЫ----------------------------------------------------------------
void clk()
{
if (txt_1 <= 400)
{
lcd.setCursor(0,0);
lcd.print ("-<*GREENHOUSE*>-");
txt_1 = (txt_1 + 1);
}
else
{
lcd.setCursor(0,0); // Установить курсор (Первая строка, нулевой символ)
lcd.print ("TIME: ");
lcd.print(clock.gettime("H:i D")); // Выводятся только часы, минуты, день. Остальное не нужно.
lcd.print (" ");
txt_2 = (txt_2 + 1);
}
if (txt_2 >= 600)
{
txt_1 = 0;
txt_2 = 0;
}
}
/*---------------------------------------------------------------------------------------------------------------------------
// Serial.println(analogRead (A0));
// Serial.println(" ");
*/
Так Вас устроит? Или Вы злой воспитатель в садике?
Я задавал всего один вопрос. Почему один и тот же код в Arduino IDE записывает данные в RTC модуль, а в VS Code нет. Всё. Вопрос то простой. Вы меня начали меня морали учить и носом тыкать в то, что к теме вопроса не относится. Зачем?
Какая строка по Вашему коду в сообщении №21 это должна делать?
Это переменная датчика влажности. И датчик работает.
В первом разве не ошибка ?
Да ошибка. Это я видел. Но это к записи времени в RTC совершенно отношения не имеет!
Поэтому я изначально написал часть кода ответственного за время. Всё.
Перечитайте внимательно вопрос в сообщении №23. Вы не на тот вопрос пытаетесь отвечать.
Какая строка кода должна записывать начальные данные в RTC?
Так и только так нужно выкладывать код. В это вас будут тыкать носом на любом форуме, связанном с программированием.
Я всё прекрасно понял. Запись производится командой clock.settime. Я её просто закомментировал что бы каждый раз время не сбрасывалось.
Дело то в том, что в Arduino IDE всё записывается (если раскоментировать), а вот в VS Code нет (компиляция и запись).
В этом и был мой вопрос. С этим вопросом меня в детский сад и отправили…
Не надо врать, туда вас отправили не за это
Простите, я просто ищу помощи! Почему при компиляции и заливке через Arduino IDE всё работает, а тоже самое в VS Code нет.
Может у VS Code несварение от библиотек iarduino …
В примере к библиотеке нет паузы между begin и settime (не думаю что это критично, но вдруг …)
Нужно сравнивать листинг из VS Code и Arduino IDE …
Попробую проверить.
Существует ли альтернативная библиотека iarduino_RTC?
Сейчас использую модуль DS1302. Но есть другой. DS1307. Но я так понимаю и библиотеку нужно искать к нему. Так?
Так Вы теперь поняли, почему выложенный Вами в сообщении №21 код не производит запись в RTC, или не поняли?
Для того, чтобы хоть что-то можно было сказать, нужно выложить именно тот код, который работает в Arduino IDE и не работает в VSC.
Сказали выкладывать код, то выкладывайте. А то заставят еще выкладывать код Arduino IDE которая работает и код VSC который не работает. Здесь порядки как в игровом КАЗИНО.
@qwone1 , некро?)))
1302 воббще так себе железка