Датчик влажности почвы, как внедрить в скетч
- Войдите на сайт для отправки комментариев
Пнд, 24/02/2020 - 21:38
Ребят всем привет, несколько дней изучаю ардуино , с трудом понял как написать по простому меню многоуровнее, а вот как код внедрить в скетч голову сломал =) чувствую себя салагой в этом деле , если кому не сложно подскажите плиз
#include <LiquidCrystal_1602_RUS.h> LiquidCrystal_1602_RUS lcd (2,3,4,5,6,7); int MainMenu = 0; // переменная для экранов меню int Set_1 = 0; // переменная для примера 1 int Set_2 = 0; // переменная для примера 2 #define Next 11 // кнопка вперед #define Prev 10 // кнопка назад #define Down 12 // кнопка вниз (-) #define Up 13 // кнопка вверх (+) #define moisture_sensor A0 // аналоговый контакт датчика влажности почвы #define moisture_sensor_power 8 // сигнальный контакт датчика влажности почвы boolean buttonnextWasUp = true; boolean buttonprevWasUp = true; boolean buttonupWasUp = true; boolean buttondownWasUp = true; long previousMillis = 0; //счетчик прошедшего времени для AutoMainScreen long interval = 10000; //задержка автовозврата к MainScreen 10сек void setup() { pinMode (Next,INPUT); pinMode(Prev,INPUT); pinMode(Down,INPUT); pinMode(Up,INPUT); lcd.begin(16,2); lcd.setCursor(4, 0); lcd.print("Hello"); lcd.setCursor(6, 1); lcd.print("MrGro"); delay(5000); } void loop() { unsigned long currentMillis = millis(); boolean buttonnextIsUp = digitalRead(Next); boolean buttonprevIsUp = digitalRead(Prev); boolean buttonupIsUp = digitalRead(Up); boolean buttondownIsUp = digitalRead(Down); //Обработка нажатия кнопки вперед if (buttonnextWasUp && !buttonnextIsUp) { delay(10); buttonnextIsUp = digitalRead(Next); if (!buttonnextIsUp) { MainMenu++; previousMillis = currentMillis; if (MainMenu>2) { MainMenu=0; } delay(100); lcd.clear(); } } //Обработка нажатия кнопки назад if (buttonprevWasUp && !buttonprevIsUp) { delay(10); buttonprevIsUp = digitalRead(Prev); if (!buttonprevIsUp) { MainMenu--; previousMillis = currentMillis; if (MainMenu<0) { MainMenu=2; } delay(100); lcd.clear(); } } // экран настроек для 1 + if (buttonupWasUp && buttonupIsUp) { delay(10); buttonupIsUp = digitalRead(Up); if (buttonupIsUp && MainMenu==1) { Set_1=Set_1+5; previousMillis = currentMillis; if (Set_1>95) { Set_1=0; } delay (100); lcd.setCursor(2, 1); lcd.print(" "); } } // экран настроек для 1 - if (buttondownWasUp && buttondownIsUp) { delay(10); buttondownIsUp = digitalRead(Down); if (buttondownIsUp && MainMenu==1) { Set_1=Set_1-5; previousMillis = currentMillis; if (Set_1<0) { Set_1=95; } delay (100); lcd.setCursor(2, 1); lcd.print(" "); } } // экран настроек для 2 + if (buttonupWasUp && buttonupIsUp) { delay(10); buttonupIsUp = digitalRead(Up); if (buttonupIsUp && MainMenu==2) { Set_2=Set_2+5; previousMillis = currentMillis; if (Set_2>995) { Set_2=0; } delay (100); lcd.setCursor(2, 1); lcd.print(" "); } } // экран настроек для 2 - if (buttondownWasUp && buttondownIsUp) { delay(10); buttondownIsUp = digitalRead(Down); if (buttondownIsUp && MainMenu==2) { Set_2=Set_2-5; previousMillis = currentMillis; if (Set_2<0) { Set_2=995; } delay (100); lcd.setCursor(2, 1); lcd.print(" "); } } if (MainMenu==0) { lcd.setCursor(0, 0); lcd.print("Bлaж.пoчвы"); lcd.setCursor(11, 0); lcd.print("..."); lcd.setCursor(15, 0); lcd.print("%"); lcd.setCursor(0, 1); lcd.print("BП < "); lcd.setCursor(5, 1); lcd.print(Set_1); lcd.setCursor(7, 1); lcd.print("% РП "); lcd.setCursor(12, 1); lcd.print(Set_2); lcd.setCursor(15, 1); lcd.print("c"); } else if (MainMenu==1) { lcd.setCursor(0, 0); lcd.print(" Пopoг ypoвня BП"); lcd.setCursor(2, 1); lcd.print(Set_1); lcd.setCursor(4, 1); lcd.print("%"); } else if (MainMenu==2) { lcd.setCursor(0, 0); lcd.print(" Рaбoтa пoмпы"); lcd.setCursor(2, 1); lcd.print(Set_2); lcd.setCursor(6, 1); lcd.print("cek"); } buttonupWasUp = buttonupIsUp; buttondownWasUp = buttondownIsUp; buttonnextWasUp = buttonnextIsUp; buttonprevWasUp = buttonprevIsUp; //Проверка автовозврата if(currentMillis - previousMillis > interval) //Если счетчик { previousMillis = currentMillis; //достиг интервала MainMenu=0; //то отобразить главный экран } }
вот отдельный скетч рабочий на датчик влажности почвы , как же их объединить !)
#include <LiquidCrystal_1602_RUS.h> LiquidCrystal_1602_RUS lcd (2,3,4,5,6,7); #define moisture_sensor A0 #define moisture_sensor_power 8 const int LED = 9; int very_moist_value = 200; void setup() { pinMode (moisture_sensor_power, OUTPUT); pinMode (LED, OUTPUT); Serial.begin (9600); lcd.begin (16,2); lcd.print("Bлaж почвы .. %"); } void loop() { digitalWrite (moisture_sensor_power, HIGH); delay (10); int moisture_value = analogRead (moisture_sensor); digitalWrite (moisture_sensor_power, LOW); int moisture_value_percent = map (moisture_value, 200, 1023, 100, 0); lcd.setCursor(12,0); lcd.print(moisture_value_percent); Serial.print (String(moisture_value) + " = "); Serial.println (String(moisture_value_percent) + "%"); delay (10000); }
за ранее респектую друзья гении !
А сами то пробовали?
Спрашивать всегда нужно сначала у автора кода
3 дня пытался разобраться как это сделать ... куда бы мысль меня не приводила оказывался в тупике ...
показания с датчика нужно брать 1 раз в 4 часа , без delay не получается внедрить , а если использовать delay то меню виснит ... скачивал разные скетчи пытался разбирать их применять частично в этом коде но безуспешно ... методом прощупывания пока все делаю , логика во многих процессах не ясна ...
много примеров в интернете но вот пояснений детальных нет и у всех разное видение и решение...
пару книг прочитал для начинающих , в общем продолжу учиться и буду признателен за подсказки
3 дня пытался разобраться как это сделать ...
Вопрос был не сколько дней Вы пытались, а пробовали или нет. Если пробовали, выкладывайте код и задавайте по нему вопросы. Если не пробовали, так и ответьте.
Берете из второго кода (кстати код ужасно читается, сделайте куски кода функциями чтобы было проще читать):
А вообще не рассматривали на есп8266 автополив с контролем на телефоне? Еще не закончил.Я например контролирую и влажность почвы и количество воды в емкости.
благодарю Вас ! сейчас буду разбираться с кодом ...
Jeka очень интересно про упрощение кода а так же и Ваш проект на есп8266 автополив с контролем ! ... я так понимаю вы уже на уровне ! Могу я к Вам периодически за помощью обращаться ? на постоянной основе (несколько раз в месяц) за какое то вознаграждение, чтобы здесь лишний раз людей не беспокоить , что скажите ? интересно или вы очень занятой человек ?
благодарю Вас ! сейчас буду разбираться с кодом ...
Jeka очень интересно про упрощение кода а так же и Ваш проект на есп8266 автополив с контролем ! ... я так понимаю вы уже на уровне ! Могу я к Вам периодически за помощью обращаться ? на постоянной основе (несколько раз в месяц) за какое то вознаграждение, чтобы здесь лишний раз людей не беспокоить , что скажите ? интересно или вы очень занятой человек ?
Пишите, но обещать не буду. Будет время помогу. Насчет уровня вы ошибаетесь, здесь много людей которые намного выше меня. jeka_set@mail.ru
Вернулся... вроде код дописать с Вашей помощью удалось, но вот столкнулся с одной проблемой ...
при срабатывании помпы все ок , как только помпа поработает заданное время и сразу при выключении - на дисплее разброс символов происходит ...
помогите решить задачу , думаю в цепочке компонентов что то дополнить нужно
просто с диодом все хорошо работает, сегодня добрался до помпы ... запитал через реле по простому принципу +/- и напрямую цифровой выход на плату ардуино ... чего то явно не хватает) энергия гуляет , надо слегка чем то ее перехватить чтобы на дисплее не было хаоса) помогите пожалуйста
Проблема в монтаже кашей.
Проблема в монтаже кашей.
Благодарю ! Переподключил аккуратно в линию , теперь нет этих сбоев ! Класс ! Огромное Вам спасибо !