Помощь со скетчем

AlexTS
Offline
Зарегистрирован: 02.10.2016

Всем доброго времени суток.

Прошу сразу не гнать прочь и не кидаться камнями.

Появилась острая необходимость сделать автополив для моей Черимойи.

Помогите, пожалуйста подредактировать скетч. Понимаю что примеров систем автополива в интернете масса, но прошла неделя, эмоции на пределе, микросхемы ночью снятся. Не думал что для меня это будет так сложно.

Были куплены:

1. Arduino mega 2560 (как я понимаю китайский аналог). Как я уже понял для моей задачи подошло бы что-то попроще, но устройство уже у меня.

2. PWM&Servo shield. Думал с помощью нее смогу размножить контакты с основной платы, но опять же уже в процессе понял что для меня штука бесполезная.

3. Драйвер L298N для запуска 12V насоса перистальтического.

4. Два щупа для замера влажности почвы. Тоже уже понял что они жутко быстро окисляются, пока попробовал две никелированные скрепки попробовать, но думаю и их на долго не хватит. Думаю как можно сократить количество замеров до 2-х в день.

5. Экранчик OLED

6. Трехцветный светодиод. Больше для побаловаться, но и он может пригодиться.

7. Модуль WiFi. Думал в итоге приспособить для передачи данных о влажности по WIFI, но пока смутно представляю как это реализовать.

Задача, как вы понимаете проста, при достижении нижнего порога влажности включить на время насос, при этом отображать данные на OLED экранчик.

 

Клапауций 232
Offline
Зарегистрирован: 05.04.2016

AlexTS пишет:

Помогите, пожалуйста подредактировать скетч. 

какой скетч?

AlexTS
Offline
Зарегистрирован: 02.10.2016

Вот, что у меня получилось:

 int redLed=12;
 int greenLed=13;
 int blueLed=11;
 int enA = 10;
 int in1 = 7;
 int in2 = 6;
 int sensorValue1;
 int sensorValue2;
 int waterMax=450;
 int waterMin=950;
#include <OLED_I2C.h> 
OLED  myOLED(SDA, SCL, 8); 
extern uint8_t MegaNumbers[];
extern uint8_t RusFont[];
extern uint8_t SmallFont[];

void setup() 
{
   Serial.begin(9600);
   pinMode(redLed, OUTPUT); 
   pinMode(greenLed, OUTPUT); 
   pinMode(blueLed, OUTPUT);
   pinMode(enA, OUTPUT);
   pinMode(in1, OUTPUT);
   pinMode(in2, OUTPUT);
   myOLED.begin();
  }
 
void loop() 
{
  // read the input on analog pin 0:
  sensorValue1 = analogRead(A0);
  sensorValue2 = analogRead(A1);
   myOLED.clrScr();
   myOLED.setFont(RusFont);
   myOLED.print("XTHBVJQZ", CENTER, 0 ); // Выводим надпись "ЧЕРИМОЙЯ"
   myOLED.setFont(MegaNumbers);
   myOLED.print(String(sensorValue1), CENTER, 12);
   myOLED.update(); // Обновляем информацию на дисплее
  delay(1000); // Пауза 1 секунда
   myOLED.clrScr();
   myOLED.setFont(RusFont);
   myOLED.print("GFGFQZ", CENTER, 0 ); // Выводим надпись "ПАПАЙЯ"
   myOLED.setFont(MegaNumbers);
   myOLED.print(String(sensorValue2), CENTER, 12);
   myOLED.update(); // Обновляем информацию на дисплее
  delay(1000); // Пауза 1 секунда
  Serial.println(sensorValue1);
  if (sensorValue1>waterMin) {
      digitalWrite(redLed, HIGH);
      digitalWrite(greenLed, LOW);
      digitalWrite(blueLed, LOW);
      //полив
      digitalWrite(in1, HIGH);
      digitalWrite(in2, LOW);
      delay(10*1000); //льем 10 секунд
      digitalWrite(in1, LOW);
      digitalWrite(in2, LOW);
      delay(30*1000); //ждем 10 секунд
      analogWrite(enA, 1000);
          
  } else if (sensorValue1<waterMax) {
      digitalWrite(redLed, LOW);
      digitalWrite(greenLed, HIGH);
      digitalWrite(blueLed, LOW);
      digitalWrite(in1, LOW);
      digitalWrite(in2, LOW);
  
   }
   Serial.println(sensorValue2);
  if (sensorValue2>waterMin) {
      digitalWrite(redLed, HIGH);
      digitalWrite(greenLed, LOW);
      digitalWrite(blueLed, LOW);
      //полив
      //digitalWrite(in1, HIGH);
      //digitalWrite(in2, LOW);
      //delay(10*1000); //льем 10 секунд
      //digitalWrite(in1, LOW);
      //digitalWrite(in2, LOW);
      //delay(30*1000); //ждем 10 секунд
      //analogWrite(enA, 1000);
        
  } else if (sensorValue2<waterMax) {
      digitalWrite(redLed, LOW);
      digitalWrite(greenLed, LOW);
      digitalWrite(blueLed, HIGH);
      digitalWrite(in1, LOW);
      digitalWrite(in2, LOW);
  
   }
  delay(100);
}

 

AlexTS
Offline
Зарегистрирован: 02.10.2016

Прошу прощения за медлительность, разбирался как вставить его правильно на форум.

Этот скетч как Франкенштейн - сборная солянка с кучи форумов и сайтов.

Клапауций 232
Offline
Зарегистрирован: 05.04.2016

AlexTS пишет:

Задача, как вы понимаете проста, при достижении нижнего порога влажности включить на время насос, при этом отображать данные на OLED экранчик.

ну, и в чём проблема?

if (нижний порог влажности) {if (!время работы насоса) {включить насос; печать на эеран;}}

AlexTS
Offline
Зарегистрирован: 02.10.2016

Клапауций 232 пишет:

AlexTS пишет:

Задача, как вы понимаете проста, при достижении нижнего порога влажности включить на время насос, при этом отображать данные на OLED экранчик.

ну, и в чём проблема?

if (нижний порог влажности) {if (!время работы насоса) {включить насос; печать на эеран;}}

Проблема: данные на экран выводятся только когда датчики показывают "НОРМУ". Может быть это изза Delay который насос тормозит..

ТАкже если один датчик в воде а второй на суше, с того который в воде показываются какие то усредненные данные с тем что в воде..

Клапауций 232
Offline
Зарегистрирован: 05.04.2016

а, зачем ты что-то печатаешь в лупе, а не по событиям.

нафиг, вообще, тебе делей нужен?

AlexTS
Offline
Зарегистрирован: 02.10.2016

Клапауций 232 пишет:

а, зачем ты что-то печатаешь в лупе, а не по событиям.

нафиг, вообще, тебе делей нужен?

А по событиям это как? :|

Имеете ввиду, как Вы выше написали, заменить Delay на "if (нижний порог влажности) {if (!время работы насоса) {включить насос; печать на экран;}}"? 

Клапауций 232
Offline
Зарегистрирован: 05.04.2016

AlexTS пишет:

Клапауций 232 пишет:

а, зачем ты что-то печатаешь в лупе, а не по событиям.

нафиг, вообще, тебе делей нужен?

А по событиям это как? :|

Имеете ввиду, как Вы выше написали, заменить Delay на "if (нижний порог влажности) {if (!время работы насоса) {включить насос; печать на экран;}}"? 

события у тебя

if (sensorValue*

по ним и печатай

if (sensorValue*) {myOLED.print();}

*менять делай ни на что не нужно - забудь, что он, вообще, существует.

ты же дёргаешь пинами digitalWrite(* по событиям? - там же и печатай.

AlexTS
Offline
Зарегистрирован: 02.10.2016

Клапауций 232 пишет:

AlexTS пишет:

Клапауций 232 пишет:

а, зачем ты что-то печатаешь в лупе, а не по событиям.

нафиг, вообще, тебе делей нужен?

А по событиям это как? :|

Имеете ввиду, как Вы выше написали, заменить Delay на "if (нижний порог влажности) {if (!время работы насоса) {включить насос; печать на экран;}}"? 

события у тебя

if (sensorValue*

по ним и печатай

if (sensorValue*) {myOLED.print();}

*менять делай ни на что не нужно - забудь, что он, вообще, существует.

ты же дёргаешь пинами digitalWrite(* по событиям? - там же и печатай.

Может если знать хотя бы азы программирования, это все звучит просто, а я вот 95% в этом них не понимаю. Могу только на примере чего-то разобраться.

Уважаемый, Клапауций, не сочтите за труд, хоть один блочок для примера напечатайте, а я по аналогии все и поправлю.

И я может что-то пойму и Вам плюсик в карму =)

Клапауций 232
Offline
Зарегистрирован: 05.04.2016

AlexTS пишет:

Уважаемый, Клапауций, не сочтите за труд, хоть один блочок для примера напечатайте, а я по аналогии все и поправлю.

я тебе дал пример кода if (sensorValue*) {myOLED.print();}

что здесь непонятного?

ок. словами перескажу, что в этой строчке происходит: если значение сенсора чему-то соответствует, то нужно напечатать на экране это что-то и, возможно, сделать что-то ещё.

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

AlexTS пишет:

Может если знать хотя бы азы программирования, это все звучит просто, а я вот 95% в этом них не понимаю. 

Ну так изучайте, чтобы понимать.

http://arduino.ru/Reference

http://wiki.amperka.ru/видеоуроки:джереми-блюм

https://drive.google.com/file/d/0B9r7cRXQ4DU4XzVLeUVkNHdiaVU/

http://www.programming1189.ru/files/Kern_Ritch.pdf

Клапауций 232
Offline
Зарегистрирован: 05.04.2016

Жека, а есть что-то более вменяемое?

меня выбешивает и мешает переключиться на поглощение знаний с желания надавать тупой блондинке этой книгой по голове:

1.1. Начнем, пожалуй Единственный способ выучить новый язык программирования — это писать на нем программы.

ять!

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Вот код. Но я не проверял. Я просто переработал ваш.

const int waterMin = 500;// величина по которой надо поливать
//#1
const int sensor1_pin = A0; // нога датчика 1
int sensor1_Value; // величина на датчике 1
const int pump1_pin = 7; // насос 1   вкл 1/ нет 0
const int Led1_pin = 13; // индикатор работы насоса 1   вкл 1/ нет 0
uint8_t Led1;
const int time1_1 = 10 * 1000; // время полива
const int time2_1 = 30 * 1000; // время паузы между полививом
static uint32_t past1 ;
//#2
const int sensor2_pin = A1; // нога датчика 2
int sensor2_Value; // величина на датчике 2
const int pump2_pin = 6; // насос 2   вкл 1/ нет 0
const int Led2_pin = 11;  // индикатор работы насоса 2   вкл 1/ нет 0
uint8_t Led2;
const int time1_2 = 10 * 1000; // время полива
const int time2_2 = 30 * 1000; // время паузы между полививом
static uint32_t past2 ;
//#3
#include <OLED_I2C.h>
OLED  myOLED(SDA, SCL, 8);
extern uint8_t MegaNumbers[];
extern uint8_t RusFont[];
extern uint8_t SmallFont[];

void setup()
{
  Serial.begin(9600);
  //#1
  pinMode(pump1_pin, OUTPUT);
  pinMode(Led1_pin, OUTPUT);
  digitalWrite(pump1_pin, Led1=0);
  digitalWrite(Led1_pin, Led1);
  past1 = millis();
  sensor1_Value = analogRead(sensor1_pin);
  //#2
  pinMode(pump2_pin, OUTPUT);
  pinMode(Led2_pin, OUTPUT);
  digitalWrite(pump2_pin, Led2=0);
  digitalWrite(Led2_pin, Led2);
  sensor2_Value = analogRead(sensor2_pin);
  past2 = millis();
  //#3
  myOLED.begin();
}

void loop() {
  static uint32_t MILLIS ;
  MILLIS = millis() ;
  //#1
  if (Led1 && millis() >= past1 + time1_1) {
    digitalWrite(pump1_pin, Led1 = 0);
    digitalWrite(Led1_pin, Led1);
  }
  static uint32_t future1 = 0 ;
  if (MILLIS >= future1)   {
    future1 = MILLIS + time1_1 + time2_1 ;
    sensor1_Value = analogRead(sensor1_pin);
    if (sensor1_Value < waterMin) {
      digitalWrite(pump1_pin, Led1 = 1);
      digitalWrite(Led1_pin, Led1);
      past1 = millis();
    }
    MILLIS = millis() ;
  }

  //#2
  if (Led2 && millis() >= past2 + time2_2) {
    digitalWrite(pump2_pin, Led2 = 0);
    digitalWrite(Led2_pin, Led2);
  }
  static uint32_t future2 = 0 ;
  if (MILLIS >= future2)   {
    future2 = MILLIS + time1_2 + time2_2 ;
    sensor2_Value = analogRead(sensor2_pin);
    if (sensor2_Value < waterMin) {
      digitalWrite(pump2_pin, Led2 = 1);
      digitalWrite(Led2_pin, Led2);
      past2 = millis();
    }
    MILLIS = millis() ;
  }

  //#3
  static uint8_t PC_3 = 1 ;
  static uint32_t future3 = 0 ;
  if (MILLIS >= future3)   {
    future3 = MILLIS + 1000 ;
    switch (PC3)   {
      case 1: PC_3 = 2;
        future1 = MILLIS + 1000 ;
        myOLED.clrScr();
        myOLED.setFont(RusFont);
        myOLED.print("XTHBVJQZ", CENTER, 0 ); // Выводим надпись "ЧЕРИМОЙЯ"
        myOLED.setFont(MegaNumbers);
        myOLED.print(String(sensor1_Value), CENTER, 12);
        myOLED.update(); // Обновляем информацию на дисплее
        break;
      case 2: PC_3 = 1;
        myOLED.clrScr();
        myOLED.setFont(RusFont);
        myOLED.print("GFGFQZ", CENTER, 0 ); // Выводим надпись "ПАПАЙЯ"
        myOLED.setFont(MegaNumbers);
        myOLED.print(String(sensor2_Value), CENTER, 12);
        myOLED.update(); // Обновляем информацию на дисплее
        break;
    }
    MILLIS = millis() ;
  }
}

 

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

Клапауций 232 пишет:

Жека, а есть что-то более вменяемое?

Для новичков - первые три ссылки. Потом можно и к Кернигану&Ритчи приступать. Хотя, например, ЕвгенийП советует наоборот - начинать с этой книги.

Клапауций 232
Offline
Зарегистрирован: 05.04.2016

Jeka_M пишет:

Клапауций 232 пишет:

Жека, а есть что-то более вменяемое?

Для новичков - первые три ссылки.

я не просил для новичков.

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

Эээ, ну тогда не знаю. Керниган&Ритчи  - это же библия у программистов :-) 

AlexTS
Offline
Зарегистрирован: 02.10.2016

qwone пишет:

Вот код. Но я не проверял. Я просто переработал ваш.

Спасибо Вам, попробую разобраться.

Клапауций 232
Offline
Зарегистрирован: 05.04.2016

Jeka_M пишет:

Эээ, ну тогда не знаю. Керниган&Ритчи  - это же библия у программистов :-) 

ты лично читал? - это может и библия, но для слабоумных.

или, возможно, для детей - что есть существенная разница.

AlexTS
Offline
Зарегистрирован: 02.10.2016

Уважаемый Jeka_M

На сегодняшний день я не готов настолько глубоко погружаться в изучение программирования для создания системы автополива, у меня просто нет на это времени.

Но за направление на путь истинный и рекомендации спасибо =)

 

 

 

AlexTS
Offline
Зарегистрирован: 02.10.2016

Может я слабо понимаю всю сложность данного вопроса и в данном случае проще заплатить какую-то сумму для того, чтобы мне написали рабочую программу?

Посоветуйте.

Клапауций 232
Offline
Зарегистрирован: 05.04.2016

AlexTS пишет:

Может я слабо понимаю всю сложность данного вопроса и в данном случае проще заплатить какую-то сумму для того, чтобы мне написали рабочую программу?

Посоветуйте.

процесс не прост, но вам будет мучительно больно платить за свою ленью

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

AlexTS  Даже вопрос не в лени. В любой программе есть ошибки, даже банальные описки. Но из-за них даже рабочая программы станет не рабочей. Вот по этому и учат программирование. Не для написания программ, а для выявление ошибок в них, а потом их устранения. Что и занимает большую часть рабочего времени программиста.

AlexTS
Offline
Зарегистрирован: 02.10.2016

Клапауций 232

Согласен, полностью.

Я же повторюсь, мне сложно оценить всю сложность процесса для опытного человека. 

И если это, как вы выразились не просто. Здесь уже все будет зависеть от суммы.

qwone

Все верно, чтобы найти ошибки, нужно быть программистом. А если я инженер в далекой от программирования области, и свободного времени очень не много, а девайс необходим, приходится из чего-то выбирать и рассматривать разные варианты.

Клапауций 232
Offline
Зарегистрирован: 05.04.2016

AlexTS пишет:

И если это, как вы выразились не просто. Здесь уже все будет зависеть от суммы.

дело в том, что сумма будет не адекватна сложности.

*тем более, тебе уже что-то написали бесплатно.

AlexTS
Offline
Зарегистрирован: 02.10.2016

Клапауций 232

Именно после того, что мне написал qwone, я и задумался о таком варианте =)

Там просто все по-другому!

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Рабочая программа это программа которая загружена в изделие работает. Вот только если у программиста нет этого изделия, то определить почему программа не работает сложно. А мой стиль еще и не привычен многим. Так что вылавливать в моем коде ошибки даже мне сложно. Так что скину последний вариант моего кода с комментариями, для отладки.

const int waterMin = 500;// величина по которой надо поливать
//#1
const int sensor1_pin = A0; // нога датчика 1
uint16_t sensor1_Value; // величина на датчике 1
const int pump1_pin = 7; // насос 1   вкл 1/ нет 0
const int Led1_pin = 13; // индикатор работы насоса 1   вкл 1/ нет 0
uint8_t Led1;
const int time1_1 = 10 * 1000; // время полива
const int time2_1 = 30 * 1000; // время паузы между полививом
uint32_t past1 ;// время отключения насоса 1 (past1+time1_1)
//#2
const int sensor2_pin = A1; // нога датчика 2
uint16_t sensor2_Value; // величина на датчике 2
const int pump2_pin = 6; // насос 2   вкл 1/ нет 0
const int Led2_pin = 11;  // индикатор работы насоса 2   вкл 1/ нет 0
uint8_t Led2;
const uint32_t time1_2 = 10 * 1000; // время полива
const uint32_t time2_2 = 30 * 1000; // время паузы между полививом
uint32_t past2 ;
//#3
#include <OLED_I2C.h>
OLED  myOLED(SDA, SCL, 8);
extern uint8_t MegaNumbers[];
extern uint8_t RusFont[];
extern uint8_t SmallFont[];

void setup()
{
  Serial.begin(9600);
  //#1
  pinMode(pump1_pin, OUTPUT);
  pinMode(Led1_pin, OUTPUT);
  digitalWrite(pump1_pin, Led1=0);
  digitalWrite(Led1_pin, Led1);
  past1 = millis();
  sensor1_Value = analogRead(sensor1_pin);
  //#2
  pinMode(pump2_pin, OUTPUT);
  pinMode(Led2_pin, OUTPUT);
  digitalWrite(pump2_pin, Led2=0);
  digitalWrite(Led2_pin, Led2);
  sensor2_Value = analogRead(sensor2_pin);
  past2 = millis();
  //#3
  myOLED.begin();
}

void loop() {
  static uint32_t MILLIS ;
  MILLIS = millis() ;
  //#1     опрос и отработка 1 датчика
  if (Led1 && millis() >= past1 + time1_1) { // когда наступит время 
    digitalWrite(pump1_pin, Led1 = 0); // отключить насос 1 и погасить светодиод
    digitalWrite(Led1_pin, Led1);
  }
  static uint32_t future1 = 0 ;
  if (MILLIS >= future1)   {
    future1 = MILLIS + time1_1 + time2_1 ;
    sensor1_Value = analogRead(sensor1_pin);
    Serial.print("sensor1:");
    Serial.println(sensor1_Value);
    if (sensor1_Value < waterMin) {  // если земля сухая
      digitalWrite(pump1_pin, Led1 = 1);  // включить насос 1 и зажечь светодиод
      digitalWrite(Led1_pin, Led1);
      past1 = millis();   // и выставить время отключения насоса 1 (past1 + time1_1)
    }
    MILLIS = millis() ;
  }

  //#2      опрос и отработка 2 датчика
  if (Led2 && millis() >= past2 + time2_2) {
    digitalWrite(pump2_pin, Led2 = 0);
    digitalWrite(Led2_pin, Led2);
  }
  static uint32_t future2 = 0 ;
  if (MILLIS >= future2)   {
    future2 = MILLIS + time1_2 + time2_2 ;
    sensor2_Value = analogRead(sensor2_pin);
    Serial.print("sensor2:");
    Serial.println(sensor2_Value);
    if (sensor2_Value < waterMin) {
      digitalWrite(pump2_pin, Led2 = 1);
      digitalWrite(Led2_pin, Led2);
      past2 = millis();
    }
    MILLIS = millis() ;
  }

  //#3 вывод показаний на экран
  static uint8_t PC_3 = 1 ;
  static uint32_t future3 = 0 ;
  if (MILLIS >= future3)   { 
    future3 = MILLIS + 1000 ; // обновления идут раз в секунду
    switch (PC_3)   {
      case 1: PC_3 = 2;   // этот раз идет "ЧЕРИМОЙЯ"
        future1 = MILLIS + 1000 ;
        myOLED.clrScr();
        myOLED.setFont(RusFont);
        myOLED.print("XTHBVJQZ", CENTER, 0 ); // Выводим надпись "ЧЕРИМОЙЯ"
        myOLED.setFont(MegaNumbers);
        myOLED.print(String(sensor1_Value), CENTER, 12);
        myOLED.update(); // Обновляем информацию на дисплее
        break;
      case 2: PC_3 = 1;  // а в этот раз идет "ПАПАЙЯ"
        myOLED.clrScr();
        myOLED.setFont(RusFont);
        myOLED.print("GFGFQZ", CENTER, 0 ); // Выводим надпись "ПАПАЙЯ"
        myOLED.setFont(MegaNumbers);
        myOLED.print(String(sensor2_Value), CENTER, 12);
        myOLED.update(); // Обновляем информацию на дисплее
        break;
    }
  }
}

ПС: Извините, если кому-то помешал заработать.

AlexTS
Offline
Зарегистрирован: 02.10.2016

qwone
Огромное спасибо!
буду разбираться.

AlexTS
Offline
Зарегистрирован: 02.10.2016

Всем добрый вечер.

Еще раз спасибо qwone. Хоть для меня ничего и не понятно в Вашем коде, но я умудрился найти пару неточностей, из-за которых не хотело ничего запускаться.

Теперь вопрос: Из-за чего могут усредняться значения при разных показаниях на датчиках? ТОесть изначально два датчика показывают допустим, 1020. Опускаю один в воду и он начинает показывать допустим 300, а второй при этом сухой и показывает 600. Как думаете, в чем проблема?

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

скорее всего проблема в самом датчике. Попробуйте заменить его двумя грифилями от простых карандашей. Или графитовым стержнем от пальчиковой батарейки.

http://www.youtube.com/watch?v=eKz8a6yCfaU

AlexTS
Offline
Зарегистрирован: 02.10.2016

qwone пишет:

скорее всего проблема в самом датчике. Попробуйте заменить его двумя грифилями от простых карандашей. Или графитовым стержнем от пальчиковой батарейки.

http://www.youtube.com/watch?v=eKz8a6yCfaU

Любопытный вариант, благодарю!  нужно попробовать.

Но я все-таки не думаю что проблема с датчиками, потому что по одиночке они прекрасно работают..

Еще небольшой вопрос, возможно ли програмно реализовать подачу питания на датчик 2 раза в день, или нужно реле?

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Можно. Но программа немного усложнится.

AlexTS
Offline
Зарегистрирован: 02.10.2016

Хочу максимально уйти от электролиза датчиков, хотя если применить графитовые стержни из приведенного Вами видео, этой проблемы быть не должно, но и энергопотребление должно снизиться, да и нет надобности снимать показания раз в секунду.
Просто питание датчик берет с Пинов платы, а оно, как я понимаю, на этих пинах постоянное, поэтому програмно можно задать именно высвечивание данных, а ток через щуп будет в любом случае идти постоянно.
Или я ошибаюсь?

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

ну да. Включить датчик через пин, пауза, замер,полив если надо ,выключить датчик и пауза на пол дня. Датчики можно включать в разное время. 

пс:http://masterkit.ru/shop/smarthome/sensors/1333987

http://gruntoff.ru/publ/kontrol/7-1-0-104

http://meandr.org/archives/25973

Despot
Offline
Зарегистрирован: 04.10.2016

Добрый день. Есть три геркона и необходимо только при замыкании всех 3х подать сигнал на светодиод. Помогите со скетчем. Весь можно не писать. Я так понимаю там всего пару строк в loop нужно добавить о которых я не вкурсе.

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Despot , так?

/*
геркон 1 -> pin 2 (gerc1_pin)
      gnd-> gnd
геркон 2b-> pin 3 (gerc2_pin)
      gnd-> gnd
геркон 3 -> pin 4 (gerc3_pin)
      gnd-> gnd
светодиод  -> pin 5 (led_pin) 1 горит / 0 нет
      gnd-> gnd
*/
//#1
  const int gerc1_pin= 2;
  const int gerc2_pin= 3;
  const int gerc3_pin= 4;
  uint8_t a;// состояние герконов
  const int led_pin= 5;
void setup() {
//#1
  pinMode(gerc1_pin, INPUT_PULLUP);
  pinMode(gerc2_pin, INPUT_PULLUP);
  pinMode(gerc3_pin, INPUT_PULLUP);
  pinMode(led_pin, OUTPUT);
  digitalWrite(led_pin, 0);
}

void loop() {
//#1
a= digitalRead(gerc1_pin)||digitalRead(gerc2_pin)||digitalRead(gerc3_pin);
digitalWrite(led_pin, !a); 
}

 

Despot
Offline
Зарегистрирован: 04.10.2016

Спасибо большое.

AlexTS
Offline
Зарегистрирован: 02.10.2016

Добрый вечер всем.

Уважаемый qwone, можно ли получить ваш e-mail? хотел быть задать частный вопрос.

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

---

AlexTS
Offline
Зарегистрирован: 02.10.2016

Всем доброго вечера!

на сегодняшний день собрал всю схему, почти все работает. Чтобы уйти от окисления электродов, Анод (оооочень быстро окислялся, буквально на глазах) решено было сделать из двух сединенных между собой графитовых стержней из пальчиковых батареек, катод решено оставить просто из выпрямленной толстой скрепки.

Чтобы уменьшить токопотребление, хочу попробовать питание подавать с цифрового пина Ардуины с определлной задержкой.

Прошу помощи в добавлении нужной строчки в код, а то я чего-то совсем запутался:

const int waterMin = 950;// величина по которой надо поливать
//#1
const int sensor1_pin = A0; // нога датчика 1
uint16_t sensor1_Value; // величина на датчике 1
const int pump1_pin = 7; // насос 1   вкл 1/ нет 0
const int Led1_pin = 13; // индикатор работы насоса 1   вкл 1/ нет 0
uint8_t Led1;
const int time1_1 = 10 * 1000; // время полива
const int time2_1 = 30 * 1000; // время паузы между полививом
uint32_t past1 ;// время отключения насоса 1 (past1+time1_1)
//#2
const int sensor2_pin = A1; // нога датчика 2
uint16_t sensor2_Value; // величина на датчике 2
const int pump2_pin = 4; // насос 2   вкл 1/ нет 0
const int Led2_pin = 11;  // индикатор работы насоса 2   вкл 1/ нет 0
uint8_t Led2;
const uint32_t time1_2 = 10 * 1000; // время полива
const uint32_t time2_2 = 30 * 1000; // время паузы между полививом
uint32_t past2 ;
//#3
#include <OLED_I2C.h>
OLED  myOLED(SDA, SCL, 8);
extern uint8_t MegaNumbers[];
extern uint8_t RusFont[];
extern uint8_t SmallFont[];
//#4
//const int time3_1 = 30 * 1000; // время паузы между измерениями
//const int Sensor11_pin = 4; // индикатор работы сенсора 1   вкл 1/ нет 0
//uint32_t past3 ;// время отключения сенсора 1 (past3+time3_1)

void setup()
{
  Serial.begin(9600);
  //#1
  pinMode(pump1_pin, OUTPUT);
  pinMode(Led1_pin, OUTPUT);
  digitalWrite(pump1_pin, Led1=0);
  digitalWrite(Led1_pin, Led1);
  past1 = millis();
  sensor1_Value = analogRead(sensor1_pin);
  //#2
  pinMode(pump2_pin, OUTPUT);
  pinMode(Led2_pin, OUTPUT);
  digitalWrite(pump2_pin, Led2=0);
  digitalWrite(Led2_pin, Led2);
  past2 = millis();
  sensor2_Value = analogRead(sensor2_pin);
  //#3
  //pinMode(Sensor11_pin, OUTPUT);
  //digitalWrite(Sensor11_pin=0);
  //#4
  myOLED.begin();
}

void loop() {
  static uint32_t MILLIS ;
  MILLIS = millis() ;
  //#1     опрос и отработка 1 датчика
  if (Led1 && millis() >= past1 + time1_1) { // когда наступит время 
    digitalWrite(pump1_pin, Led1 = 0); // отключить насос 1 и погасить светодиод
    digitalWrite(Led1_pin, Led1);
  }
  static uint32_t future1 = 0 ;
  if (MILLIS >= future1)   {
    future1 = MILLIS + time1_1 + time2_1 ;
    sensor1_Value = analogRead(sensor1_pin);
    Serial.print("sensor1:");
    Serial.println(sensor1_Value);
    if (sensor1_Value > waterMin) {  // если земля сухая
      digitalWrite(pump1_pin, Led1 = 1);  // включить насос 1 и зажечь светодиод
      digitalWrite(Led1_pin, Led1);
      past1 = millis();   // и выставить время отключения насоса 1 (past1 + time1_1)
    }
    MILLIS = millis() ;
  }

  //#2      опрос и отработка 2 датчика
  if (Led2 && millis() >= past2 + time2_2) {
    digitalWrite(pump2_pin, Led2 = 0);
    digitalWrite(Led2_pin, Led2);
  }
  static uint32_t future2 = 0 ;
  if (MILLIS >= future2)   {
    future2 = MILLIS + time1_2 + time2_2 ;
    sensor2_Value = analogRead(sensor2_pin);
    Serial.print("sensor2:");
    Serial.println(sensor2_Value);
    if (sensor2_Value > waterMin) {
      digitalWrite(pump2_pin, Led2 = 1);
      digitalWrite(Led2_pin, Led2);
      past2 = millis();
    }
    MILLIS = millis() ;
  }
  //#3
  //if (millis() >= past3 + time3_1) { // когда наступит время 
   // digitalWrite(Sensor11_pin = 0); // отключить датчик 1
   // }
  //static uint32_t future4 = 0 ;
  //if (MILLIS >= future4)   {
  //  future4 = MILLIS + time3_1;
  //  digitalWrite(Sensor11_pin = 1);  // включить сенсор 1
  //  past3 = millis();   // и выставить время отключения сенсора 1 (past3 + time3_1)
 //   }
  //  MILLIS = millis() ;
  }
  //#4 вывод показаний на экран
  static uint8_t PC_3 = 1 ;
  static uint32_t future3 = 0 ;
  if (MILLIS >= future3)   { 
    future3 = MILLIS + 1000 ; // обновления идут раз в секунду
    switch (PC_3)   {
      case 1: PC_3 = 2;   // этот раз идет "ЧЕРИМОЙЯ"
        future1 = MILLIS + 1000 ;
        myOLED.clrScr();
        myOLED.setFont(RusFont);
        myOLED.print("XTHBVJQZ", CENTER, 0 ); // Выводим надпись "ЧЕРИМОЙЯ"
        myOLED.setFont(MegaNumbers);
        myOLED.print(String(sensor1_Value), CENTER, 12);
        myOLED.update(); // Обновляем информацию на дисплее
        break;
      case 2: PC_3 = 1;  // а в этот раз идет "ПАПАЙЯ"
        future2 = MILLIS + 1000 ;
        myOLED.clrScr();
        myOLED.setFont(RusFont);
        myOLED.print("GFGFQZ", CENTER, 0 ); // Выводим надпись "ПАПАЙЯ"
        myOLED.setFont(MegaNumbers);
        myOLED.print(String(sensor2_Value), CENTER, 12);
        myOLED.update(); // Обновляем информацию на дисплее
        break;
    
    }
  }
  //#4 
 }

Также никак не могу найти причину отображения усредненных значений двух датчиков..если у кого-то появится предположение, прошу откликнуться!

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Переработал код 

/*
#1 датчик вход -> A0 (sensor1_pin) 0..1023
          вкл  -> 2   (sensor1_on_pin) 1 вкл/ 0 откл
 насос полива  -> 7   (pump1_pin)   вкл 1/ нет 0
          GND  -> GND
 светодиод     ->  13 (Led1_pin)    вкл 1/ нет 0
          GND  -> GND
#2
#1 датчик вход -> A1 (sensor2_pin) 0..1023
          вкл  -> 3  (sensor2_on_pin) 1 вкл/ 0 откл
 насос полива  -> 4   (pump2_pin)   вкл 1/ нет 0
          GND  -> GND
 светодиод     ->  11 (Led2_pin)    вкл 1/ нет 0
          GND  -> GND
#3 индикатор OLED GND -> GND
                  +5V -> +5V
                   SDA -> A4(SDA)
                   SCL -> A5(SCL)
*/

const int waterMin = 950;// величина по которой надо поливать
//#1
const int sensor1_pin = A0; // нога датчика 1
uint16_t sensor1_Value; // величина на датчике 1
const int sensor1_on_pin = 2; // нога вкл датчика 1
uint8_t sensor1_on;
const int pump1_pin = 7; // насос 1   вкл 1/ нет 0
const int Led1_pin = 13; // индикатор работы насоса 1   вкл 1/ нет 0
uint8_t Led1;
const uint32_t time0_1 = 10 * 1000; // время смещения вкл датчика от подачи питания 10 сек
const uint32_t time1_1 = 10 * 1000; // время полива 10 сек
const uint32_t time2_1 = 60 * 60 * 1000; // время паузы между полививом 1час=60 минут=60*60 сек
const uint32_t time3_1 = 1 * 1000; // время между вкл датчика и измерением 1 сек
uint32_t past1 ;// время отключения насоса 1 (past1+time1_1)
//#2
const int sensor2_pin = A1; // нога датчика 2
uint16_t sensor2_Value; // величина на датчике 2
const int sensor2_on_pin = 3; // нога вкл датчика 1
uint8_t sensor2_on;
const int pump2_pin = 4; // насос 2   вкл 1/ нет 0
const int Led2_pin = 11;  // индикатор работы насоса 2   вкл 1/ нет 0
uint8_t Led2;
const uint32_t time0_2 = 120 * 1000; // время смещения вкл датчика от подачи питания 120 сек
const uint32_t time1_2 = 10 * 1000; // время полива 10 сек
const uint32_t time2_2 = 60 * 60 * 1000; // время паузы между полививом 1час=60 минут=60*60 сек
const uint32_t time3_2 = 1 * 1000; // время между вкл датчика и измерением 1 сек
uint32_t past2 ;// время отключения насоса 2
//#3
#include <OLED_I2C.h>
OLED  myOLED(SDA, SCL, 8);
extern uint8_t MegaNumbers[];
extern uint8_t RusFont[];
extern uint8_t SmallFont[];

void setup()
{
  //#1
  pinMode(sensor1_on_pin, OUTPUT);  // инициализировать датчик
  digitalWrite(sensor1_on_pin, sensor1_on = 0); // отключить питание датчика
  pinMode(pump1_pin, OUTPUT);
  pinMode(Led1_pin, OUTPUT);
  digitalWrite(pump1_pin, Led1 = 0);
  digitalWrite(Led1_pin, Led1);
  past1 = millis();
  sensor1_Value = 0;
  //#2
  pinMode(sensor2_on_pin, OUTPUT);  // инициализировать датчик
  digitalWrite(sensor2_on_pin, sensor2_on = 0); // отключить питание датчика
  pinMode(pump2_pin, OUTPUT);
  pinMode(Led2_pin, OUTPUT);
  digitalWrite(pump2_pin, Led2 = 0);
  digitalWrite(Led2_pin, Led2);
  past2 = millis();
  sensor2_Value = 0;
  //#3
  myOLED.begin();
}

void loop() {
  static uint32_t MILLIS ;
  MILLIS = millis() ;
  //#1     опрос и отработка 1 датчика
  if (Led1 && MILLIS >= past1 + time1_1) { // когда наступит время
    digitalWrite(pump1_pin, Led1 = 0); // отключить насос 1 и погасить светодиод
    digitalWrite(Led1_pin, Led1);
  }
  if (sensor1_on && MILLIS >= past1 + time3_1) { // когда наступит время
    sensor1_Value = analogRead(sensor1_pin); // произвести измерение
    digitalWrite(sensor1_on_pin, sensor1_on = 0); // отключить питание датчика
    if (sensor1_Value > waterMin) {  // если земля сухая
      digitalWrite(pump1_pin, Led1 = 1);  // включить насос 1 и зажечь светодиод
      digitalWrite(Led1_pin, Led1);
      past1 = MILLIS;   // и выставить время отключения насоса 1 (past1 + time1_1)
    }
    static uint32_t future1 = time0_1 ;
    if (MILLIS >= future1)   {
      future1 = MILLIS + time1_1 + time2_1 + time3_1 ;
      digitalWrite(sensor1_on_pin, sensor1_on = 1); // включить питание датчика
      past1 = MILLIS;   // и выставить время замера на датчике
    }
    MILLIS = millis() ;
  }

  //#2      опрос и отработка 2 датчика
  if (Led2 && MILLIS >= past2 + time1_2) {
    digitalWrite(pump2_pin, Led2 = 0);
    digitalWrite(Led2_pin, Led2);
  }
  if (sensor2_on && MILLIS >= past2 + time3_2) { // когда наступит время
    sensor2_Value = analogRead(sensor2_pin); // произвести измерение
    digitalWrite(sensor2_on_pin, sensor2_on = 0); // отключить питание датчика
    if (sensor2_Value > waterMin) {  // если земля сухая
      digitalWrite(pump2_pin, Led2 = 1);  // включить насос 2 и зажечь светодиод
      digitalWrite(Led2_pin, Led2);
      past2 = MILLIS;   // и выставить время отключения насоса 2 (past2 + time1_2)
    }
    static uint32_t future2 = time0_2 ;
    if (MILLIS >= future2)   {
      future2 = MILLIS + time1_2 + time2_2 + time3_2 ;
      digitalWrite(sensor2_on_pin, sensor2_on = 1); // включить питание датчика
      past2 = MILLIS;   // и выставить время замера на датчике
    }
    MILLIS = millis() ;
  }
  //#3 вывод показаний на экран
  static uint8_t PC_3 = 1 ;
  static uint32_t future3 = 0 ;
  if (MILLIS >= future3)   {
    future3 = MILLIS + 1000 ; // обновления идут раз в секунду
    switch (PC_3)   {
      case 1: PC_3 = 2;   // этот раз идет "ЧЕРИМОЙЯ"
        myOLED.clrScr();
        myOLED.setFont(RusFont);
        myOLED.print("XTHBVJQZ", CENTER, 0 ); // Выводим надпись "ЧЕРИМОЙЯ"
        myOLED.setFont(MegaNumbers);
        myOLED.print(String(sensor1_Value), CENTER, 12);
        myOLED.update(); // Обновляем информацию на дисплее
        break;
      case 2: PC_3 = 1;  // а в этот раз идет "ПАПАЙЯ"
        myOLED.clrScr();
        myOLED.setFont(RusFont);
        myOLED.print("GFGFQZ", CENTER, 0 ); // Выводим надпись "ПАПАЙЯ"
        myOLED.setFont(MegaNumbers);
        myOLED.print(String(sensor2_Value), CENTER, 12);
        myOLED.update(); // Обновляем информацию на дисплее
        break;
    }
  }
}

ПС: Я совместил измерение почвы и полив. Хотя лучше их разнести в разные потоки.

AlexTS
Offline
Зарегистрирован: 02.10.2016

qwone пишет:

Переработал код 

ПС: Я совместил измерение почвы и полив. Хотя лучше их разнести в разные потоки.

Огромное спасибо, за помощь и отзывчивость! буду тестить =)

AlexTS
Offline
Зарегистрирован: 02.10.2016

Уважаемый, qwone.

Подскажите, пожалуйста, что такое  "время смещения вкл датчика от подачи питания" ?

Что это за смещение? не могу понять...

А также, правильно ли я понимаю, что для того, чтобы изменять время проведения измерений, я должен трогать вот эту строчку: "const uint32_t time2_2 = 60 * 60 * 1000; // время паузы между полививом ?

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Вот последний код

/*
#1 датчик вход -> A0 (sensor1_pin) 0..1023
          вкл  -> 2   (sensor1_on_pin) 1 вкл/ 0 откл

#2 насос полива  -> 7   (pump1_pin)   вкл 1/ нет 0
          GND  -> GND
 светодиод     ->  13 (Led1_pin)    вкл 1/ нет 0
          GND  -> GND

#3 датчик вход -> A1 (sensor2_pin) 0..1023
          вкл  -> 3  (sensor2_on_pin) 1 вкл/ 0 откл

#4 насос полива  -> 4   (pump2_pin)   вкл 1/ нет 0
          GND  -> GND
 светодиод     ->  11 (Led2_pin)    вкл 1/ нет 0
          GND  -> GND
#5 индикатор OLED GND -> GND
                  +5V -> +5V
                   SDA -> A4(SDA)
                   SCL -> A5(SCL)
*/
const int waterMin = 950;// величина по которой надо поливать

//#1 датчик 1 замер раз в 1 час
const int sensor1_pin = A0; // нога датчика 1
uint16_t sensor1_Value = 0; // величина на датчике 1
const int sensor1_on_pin = 2; // нога вкл датчика 1
uint8_t sensor1_on;
const uint32_t time1_1 = 60 * 60 * 1000; // время между двумя замерами 1 час=60мин=60*60сек
const uint32_t time2_1 = 1 * 1000; // время между вкл датчика и измерением 1 сек

//#2 мотор 1 полив 2 раза в сутки
const int pump1_pin = 7; // насос 1   вкл 1/ нет 0
const int Led1_pin = 13; // индикатор работы насоса 1   вкл 1/ нет 0
uint8_t Led1;
const uint32_t time0_2 = 10 * 1000; // время смещения вкл полива  от подачи питания 10 сек
const uint32_t time1_2 = 60 * 60 * 1000; // время паузы между полививом 1час=60 минут=60*60 сек
const uint32_t time2_2 = 10 * 1000; // время полива 10 сек

//#3 датчик 2 замер раз в 1 час
const int sensor2_pin = A1; // нога датчика 2
uint16_t sensor2_Value = 0; // величина на датчике 2
const int sensor2_on_pin = 3; // нога вкл датчика 1
uint8_t sensor2_on;
const uint32_t time1_3 = 60 * 60 * 1000; // время между двумя замерами 1 час=60мин=60*60сек
const uint32_t time2_3 = 1 * 1000; // время между вкл датчика и измерением 1 сек

//#4 мотор 2 полив 2 раза в сутки
const int pump2_pin = 4; // насос 2   вкл 1/ нет 0
const int Led2_pin = 11;  // индикатор работы насоса 2   вкл 1/ нет 0
uint8_t Led2;
const uint32_t time0_4 = 120 * 1000; // время смещения вкл полива  от подачи питания 120 сек
const uint32_t time1_4 = 60 * 60 * 1000; // время паузы между полививом 1час=60 минут=60*60 сек
const uint32_t time2_4 = 10 * 1000; // время полива 10 сек

//#5 дисплей
#include <OLED_I2C.h>
OLED  myOLED(SDA, SCL, 8);
extern uint8_t MegaNumbers[];
extern uint8_t RusFont[];
extern uint8_t SmallFont[];

void setup()
{
  //#1 датчик 1 замер раз в 1 час
  pinMode(sensor1_on_pin, OUTPUT);  // инициализировать датчик
  digitalWrite(sensor1_on_pin, sensor1_on = 0); // отключить питание датчика

  //#2 мотор 1 полив 2 раза в сутки
  pinMode(pump1_pin, OUTPUT);
  pinMode(Led1_pin, OUTPUT);
  digitalWrite(pump1_pin, Led1 = 0);
  digitalWrite(Led1_pin, Led1);

  //#3 датчик 2 замер раз в 1 час
  pinMode(sensor2_on_pin, OUTPUT);  // инициализировать датчик
  digitalWrite(sensor2_on_pin, sensor2_on = 0); // отключить питание датчика

  //#4 мотор 2 полив 2 раза в сутки
  pinMode(pump2_pin, OUTPUT);
  pinMode(Led2_pin, OUTPUT);
  digitalWrite(pump2_pin, Led2 = 0);
  digitalWrite(Led2_pin, Led2);

  //#5
  myOLED.begin();
}

void loop() {
  static uint32_t MILLIS ;
  MILLIS = millis() ;

  //#1     датчик 1 замер раз в 1 час
  static uint32_t fut1 = 0 ;
  if (sensor1_on && MILLIS >= fut1) { // когда наступит время
    sensor1_Value = analogRead(sensor1_pin); // произвести измерение
    digitalWrite(sensor1_on_pin, sensor1_on = 0); // отключить питание датчика
  }
  static uint32_t future1 = 0 ;
  if (MILLIS >= future1)   {
    future1 = MILLIS + time1_1 ;
    digitalWrite(sensor1_on_pin, sensor1_on = 1); // включить питание датчика
    fut1 = MILLIS + time2_1; // и выставить время замера на датчике
    MILLIS = millis() ;
  }
  //#2 мотор 1 полив 2 раза в сутки
  static uint32_t fut2 = 0 ;
  if (Led1 && MILLIS >= fut2) { // когда наступит время
    digitalWrite(pump1_pin, Led1 = 0); // отключить насос 1 и погасить светодиод
    digitalWrite(Led1_pin, Led1);
  }
  static uint32_t future2 = time0_2 ;
  if (MILLIS >= future2)   {
    future2 = MILLIS + time1_2 ;
    if (sensor1_Value > waterMin) {  // если земля сухая
      digitalWrite(pump1_pin, Led1 = 1);  // включить насос 1 и зажечь светодиод
      digitalWrite(Led1_pin, Led1);
      fut2 = MILLIS + time2_2; // и выставить время отключения насоса 1
    }
    MILLIS = millis() ;
  }

  //#3     датчик 2 замер раз в 1 час
  static uint32_t fut3 = 0 ;
  if (sensor2_on && MILLIS >= fut3) { // когда наступит время
    sensor2_Value = analogRead(sensor2_pin); // произвести измерение
    digitalWrite(sensor2_on_pin, sensor2_on = 0); // отключить питание датчика
  }
  static uint32_t future3 = 0 ;
  if (MILLIS >= future3)   {
    future3 = MILLIS + time1_3 ;
    digitalWrite(sensor2_on_pin, sensor2_on = 1); // включить питание датчика
    fut1 = MILLIS + time2_3; // и выставить время замера на датчике
    MILLIS = millis() ;
  }
  //#4 мотор 1 полив 2 раза в сутки
  static uint32_t fut4 = 0 ;
  if (Led2 && MILLIS >= fut4) { // когда наступит время
    digitalWrite(pump2_pin, Led2 = 0); // отключить насос 2 и погасить светодиод
    digitalWrite(Led2_pin, Led2);
  }
  static uint32_t future4 = time0_4 ;
  if (MILLIS >= future4)   {
    future4 = MILLIS + time1_4 ;
    if (sensor2_Value > waterMin) {  // если земля сухая
      digitalWrite(pump2_pin, Led2 = 1);  // включить насос 1 и зажечь светодиод
      digitalWrite(Led2_pin, Led2);
      fut2 = MILLIS + time2_4; // и выставить время отключения насоса 1
    }
    MILLIS = millis() ;
  }

  //#5 вывод показаний на экран
  static uint8_t PC_5 = 1 ;
  static uint32_t future5 = 0 ;
  if (MILLIS >= future5)   {
    future5 = MILLIS + 1000 ; // обновления идут раз в секунду
    switch (PC_5)   {
      case 1: PC_5 = 2;   // этот раз идет "ЧЕРИМОЙЯ"
        myOLED.clrScr();
        myOLED.setFont(RusFont);
        myOLED.print("XTHBVJQZ", CENTER, 0 ); // Выводим надпись "ЧЕРИМОЙЯ"
        myOLED.setFont(MegaNumbers);
        myOLED.print(String(sensor1_Value), CENTER, 12);
        myOLED.update(); // Обновляем информацию на дисплее
        break;
      case 2: PC_5 = 1;  // а в этот раз идет "ПАПАЙЯ"
        myOLED.clrScr();
        myOLED.setFont(RusFont);
        myOLED.print("GFGFQZ", CENTER, 0 ); // Выводим надпись "ПАПАЙЯ"
        myOLED.setFont(MegaNumbers);
        myOLED.print(String(sensor2_Value), CENTER, 12);
        myOLED.update(); // Обновляем информацию на дисплее
        break;
    }
  }
}
qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

// время смещения вкл датчика от подачи питания 120 сек  

У вас 2 датчика причем совмещены с насосом. Вот я смещаю их работу, что бы они не работали синхронно. То есть один начинает работать с 10 секунд от подачи питания а другой от 120. А так как у них паузы одинаковые, то и дальше они работают не одновременно.

AlexTS
Offline
Зарегистрирован: 02.10.2016

qwone, добрый вечер!

Я Вам очень благодарен, тестирую Ваш новый код)

 

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016
AlexTS
Offline
Зарегистрирован: 02.10.2016

Да, конечно. Именно его.