Прошу совета по скетчу

Всем привет. Недавно увлекся Ардуино. Изучая скетчи на просторах собрал вот такое вот.

#include <microDS3231.h>
MicroDS3231 rtc;
int vlaga1 = 0;
int vlaga2 = 0;
int percentage1=0;
int percentage2=0;
#define pin1 2
#define pin2 3
#define pin3 4
void setup() {
pinMode(pin1,OUTPUT);
pinMode(pin2,OUTPUT);
pinMode(pin3,OUTPUT);
Serial.begin(9600);
}
void loop() {
{
Serial.print(rtc.getHours());
Serial.print(“:”);
Serial.print(rtc.getMinutes());
Serial.print(“:”);
Serial.print(rtc.getSeconds());
Serial.print(" “);
Serial.print(rtc.getDate());
Serial.print(”/“);
Serial.print(rtc.getMonth());
Serial.print(”/");
Serial.println(rtc.getYear());
delay(1000);
}
if ( rtc.getHours()==22 && 27<=rtc.getMinutes() && rtc.getMinutes()<29 ){
digitalWrite(pin1,HIGH);
int vlaga1 = analogRead(A0);
percentage1 = map(vlaga1, 490, 1023, 100, 0);
Serial.print(“датчик1=”);Serial.println(percentage1);
if(percentage1 < 10){
digitalWrite(pin2,HIGH);}
if(percentage1 >80){
digitalWrite(pin2,LOW);}
int vlaga2 = analogRead(A1);
percentage2 = map(vlaga2, 490, 1023, 100, 0);
Serial.print(“датчик2=”);Serial.println(percentage2);
if(percentage2 < 10){
digitalWrite(pin3,HIGH);}
if(percentage2 >80){
digitalWrite(pin3,LOW);}
}
else {
digitalWrite(pin1,LOW);
digitalWrite(pin2,LOW);
digitalWrite(pin3,LOW);}
}

Задумка в том что бы по часам в определенное время срабатывал опрос датчиков влажности включался полив и в определенное время выключался(засыпал на сутки). Проблема в том, что вроде и прописал датчики разные но при запуске в порте влажность обоих практически одинаковая. Где то читал что это возможно из-за того что АЦП не может быстро перестроиться. Может подскажете что не так, да и целом как вот это вот может грамотнее было бы?

Вставьте код по правилам форума

За период в две минуты этот код у вас успеет сработать 120 раз.
Оно вам надо - 120 одинаковых записей на экране?

какая?

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

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

Если верить во влияние переключения каналов АЦП, то это тот случай.
Я проверял погрешности при переключении каналов на своей китайской UNO. Опрашивал три канала поочередно 0V 3,3V 5V 3.3V 0V Сигнал 3.3 V считывал через резистор - это был измеряемый сигнал. До сопротивления 66 КОм показания были нормальные с первого измерения. При 80 КОм было небольшое влияние при переключении с 0V.

ДимаРоганов - если думаете, что есть влияние - сделайте несколько измерений одного канала подряд и выведете результат.

#include <microDS3231.h>
MicroDS3231 rtc;
int vlaga1 = 0;
int vlaga2 = 0;
int percentage1=0;
int percentage2=0;
#define pin1 2
#define pin2 3
#define pin3 4
void setup() {
pinMode(pin1,OUTPUT);
pinMode(pin2,OUTPUT);
pinMode(pin3,OUTPUT);
Serial.begin(9600);
}
void loop() {
{
Serial.print(rtc.getHours());
Serial.print(“:”);
Serial.print(rtc.getMinutes());
Serial.print(“:”);
Serial.print(rtc.getSeconds());
Serial.print(" “);
Serial.print(rtc.getDate());
Serial.print(”/“);
Serial.print(rtc.getMonth());
Serial.print(”/");
Serial.println(rtc.getYear());
delay(1000);
}
if ( rtc.getHours()==22 && 27<=rtc.getMinutes() && rtc.getMinutes()<29 ){
digitalWrite(pin1,HIGH);
int vlaga1 = analogRead(A0);
percentage1 = map(vlaga1, 490, 1023, 100, 0);
Serial.print(“датчик1=”);Serial.println(percentage1);
if(percentage1 < 10){
digitalWrite(pin2,HIGH);}
if(percentage1 >80){
digitalWrite(pin2,LOW);}
int vlaga2 = analogRead(A1);
percentage2 = map(vlaga2, 490, 1023, 100, 0);
Serial.print(“датчик2=”);Serial.println(percentage2);
if(percentage2 < 10){
digitalWrite(pin3,HIGH);}
if(percentage2 >80){
digitalWrite(pin3,LOW);}
}
else {
digitalWrite(pin1,LOW);
digitalWrite(pin2,LOW);
digitalWrite(pin3,LOW);}
}

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

функция map(…)

в процентах при достижении заданного порога времени все включается и первый датчик выдает где то в районе 10 % а второй 7%. Если увеличивать влажность то значения растут но в таких же пропорциях и с разницей ориентировочно в 3%. Ощущение что буд-то опрашивается один из датчиков хотя пины я прописал разные.

Датчики DS3231 для измерения влажности почвы. Конкретно показывают приблизительно одно и то же сопротивление хотя подключены к разным пинам и для эксперимента один всегда остается в сухом состоянии, а второй увлажняется. Работают отлично по этому же скетчу но когда он прописан не для двух датчиков а для одного. Я с этого и начал. Когда один датчик проблем нет все штатно.

Это что-то новое )
Недокументированная возможность?

image

блин…прошу прощения))) сам сейчас посмеялся ))) YL-69

тогда да, если влажность часами мерять, всякое может случицца

:grin: :grin: :grin:It’s magic

ты прочитал про map(…)?

да. но хотел спросить что именно имелось в виду? map насколько понимаю переводит значения в проценты. в моем коде два раза прописывал перевод для разных датчиков.

map(value, fromLow, fromHigh, toLow, toHigh).

toLow = 100, toHigh = 0

ничо не смущает?

для совсем тугих там же написано

  • toLow: нижняя граница нового диапазона
  • toHigh: верхняя граница нового диапазона