Reading at night

Hello to all,
I have a problem with the operation of 2 soil moisture probe.
I would like to instruct the arduino to perform humidity readings only when the value of the photoresistor is greater than 700.
Also I would like to check the soil moisture every 60 minutes
I bring you part of the code

// IRRIGAZIONE AUTOMATICA PIANTE 1.0

// definizione valori sensori A / B
int SensA = A2;
int SensB = A1;
int SensValoreA = 0;
int SensValoreB = 0;
int percentuale;
int map_basso = 800;
int map_alto = 350;

// impostazione colori led
#define ledRossoA = 5;
#define ledVerdeA = 6;
#define ledBluA = 7;
#define ledRossoB = 8;
#define ledVerdeB = 9;
#define ledBluB = 10;

// impostazione tono buzzer
int buzzer = 2;
#define NOTE_C6  1047
#define NOTE_G3  196
#define NOTE_C3  131

// attivazione relè
const int pompaA = 3;
const int pompaB = 4;

// definizione fotoresistore
int foto = A3;
int ValoreFoto = 0;
int fotoresistenza;

void setup() {
  Serial.begin(115200);
  pinMode(SensA, INPUT);
  pinMode(SensB, INPUT);

  pinMode(pompaA, OUTPUT);
  pinMode(pompaB, OUTPUT);

  pinMode(foto, INPUT);

  digitalWrite(5, HIGH);
  digitalWrite(8, HIGH);
  digitalWrite(6, HIGH);
  digitalWrite(9, HIGH);
  digitalWrite(7, HIGH);
  digitalWrite(10, HIGH);
  delay(1000);

  digitalWrite(5, LOW);
  digitalWrite(8, LOW);
  digitalWrite(6, LOW);
  digitalWrite(9, LOW);
  digitalWrite(7, LOW);
  digitalWrite(10, LOW);
  delay(1000);

  tone(buzzer, NOTE_C6, 200);// beep di fine chek up
  delay(1000);
  noTone(buzzer);
}

void loop() {

  Serial.print(" Valore Fotoresistenza: ");
  Serial.println(fotoresistenza);
  fotoresistenza = (ValoreFoto);
  ValoreFoto = analogRead(foto);

  SensValoreA = analogRead(SensA);
  SensValoreB = analogRead(SensB);
  percentuale = map(SensValoreA, 0, 1023, 100, 0);
  delay(1000);

  if (ValoreFoto > 700) {
    Serial.print(" Sensore A: ");
    Serial.print(percentuale);
    Serial.println(" % ");
    percentuale = map(SensValoreA, 0, 1023, 100, 0);
    Serial.print(" Sensore B: ");
    Serial.print(percentuale);
    Serial.println(" % ");
    percentuale = map(SensValoreB, 0, 1023, 100, 0);
  }

  if (( ValoreFoto > 700) && ( SensValoreA > 700)) { // se  il sensore A siperiore  700 accende led blu e pompa

    digitalWrite(7, HIGH);// accende led blu
    digitalWrite(3, HIGH);// accende relè per comando pompa

  }
  else {
    digitalWrite(7, LOW);
    digitalWrite(3, LOW);

  }
  if (( ValoreFoto > 700) && ( SensValoreB > 700)) {  // se  il sensore B siperiore  700 accende led blu e pompa
    digitalWrite(10, HIGH);// accende led blu
    digitalWrite(4, HIGH);// accende relè per comando pompa

  }
  else {
    digitalWrite(10, LOW);
    digitalWrite(4, LOW);

  }
  if (( ValoreFoto > 700) && ( SensValoreA < 700 )) {  // terreno bagnato
    digitalWrite(5, HIGH); // accende led rosso A
  }
  else {
    digitalWrite(5, LOW);
  }
  if (( ValoreFoto > 700) && ( SensValoreB < 700 )) {  // terreno bagnato
    digitalWrite(8, HIGH); // accende led rosso B
  }
  else {
    digitalWrite(8, LOW);
  }



}

Thanks in advance

If you only want to read the sensors when the photoresistor is greater than 700, you need to move those reading inside the if statement block:

  if (ValoreFoto > 700) {
    SensValoreA = analogRead(SensA);
    percentuale = map(SensValoreA, 0, 1023, 100, 0);
    Serial.print(" Sensore A: ");
    Serial.print(percentuale);
    Serial.println(" % ");

    SensValoreB = analogRead(SensB);
    percentuale = map(SensValoreB, 0, 1023, 100, 0);
    Serial.print(" Sensore B: ");
    Serial.print(percentuale);
    Serial.println(" % ");
    delay(1000);
  }

I don't see the code that checks the time so the samples are limited to every 60 minutes.

thanks for the reply but I did not understand what you want to insert in the "if"

I did not understand what you want to insert in the “if”

For the answer, carefully study the code posted in reply #1 and compare that to your code.

OK perfect
thanks for this solution
Now I just have to take readings every 60 minutes
tips??

but this solution does not write the value on serial port or does not read the sensor?
What I would like to get and to take readings only when the photoresistor reads values above 700 (only at night)
I sincerely thought to intervene on "analogWrite (pinMode, HIGH or LOW);" but I do not know if you can use HIGH or LOW on analog pins

Study the blink without delay example for timing events.

perfect if I have problems help me, right? :frowning:

Now I just have to take readings every 60 minutes
tips??

Using millis() for timing. A beginners guide

I tried the BlikWithoutDelay code and I noticed that in "const long interval = 1000;" the flash goes off 1000 milisecond and turned on 1000 milliseconds.
If I wanted to keep the sensor off for 1000 milliseconds and turn on the LED for 500 milliseconds how should I do?

See the How to do several things at once tutorial.

If I wanted to keep the sensor off for 1000 milliseconds and turn on the LED for 500 milliseconds how should I do?

Change the interval each time you change the LED state

const byte ledPin =  13;
unsigned long previousMillis = 0;
const byte states[] = {HIGH, LOW};
const unsigned long intervals[] = {200, 200, 200, 800};
const byte NO_OF_INTERVALS = sizeof(intervals) / sizeof(intervals[0]);
byte state;

void setup()
{
  pinMode(ledPin, OUTPUT);
}

void loop()
{
  unsigned long currentMillis = millis();
  if (currentMillis - previousMillis >= intervals[state % NO_OF_INTERVALS])
  {
    previousMillis = currentMillis;
    digitalWrite(ledPin, states[state++ % 2]);
  }
}

Great
now I should have all the necessary info for my first project.
I will update you on the project
thanks for the moment to everyone

Did you want to check the moisture exactly on the hour, or check it when at least an hour has elapsed? Let's say the last reading was taken at exactly 9PM. If the daylight sensor hits 700 at 8:30AM, did you want the reading taken then, or did you want to wait until 9?

My concept is to read the humidity sensor at night and possibly wet the ground. Furthermore arduino would remain off during light hours and work during dark hours. I do not care about the exact reading time but about every 60 minutes from the 700 reading of the photoresistor.

I tried to enter the code but honestly I can not make it work. Who helps me?

dino72:
I tried to enter the code but honestly I can not make it work. Who helps me?

Post the code you tried. Post any errors. If there are no error then tell us what it does and what is wrong.

I do not know where to start and where to enter the code

this is code

/* Il mio primo progetto con arduino realizzato il  20/05/2018
 *  *******************************************************************************************************
    IRRIGAZIONE AUTOMATICA PIANTE 1.0

    Gelsomino
    Bonsai ( 2 )

   Funzionamento attraverso nr 2 sonde di umifìdità posizionati nel gelsomino e in bonsai Ficus Microcarpa
   Se il livello di umidità sale al di sopra del valore 700 ( asciutto ), accende led rosso , led blu e attiva pompa per irrigazione
   Se il valore è compreso tra 700  e 350 ( bagnato ) accende led verde per la verifica del funzionamente
   Se il valore è al di sotto del valore 350 ( troppo bagnato ) nessun led acceso

   Da inserire al progetto;
   1) Lettura dei valori alle ore 00:00, 06:00, 12:00, 18:00
   2) nr 3 letture a distanza di 5 minuti e considerare la media delle letture
   3) Irrigazione da effettuare solo dopo determinata ora ( o funzionamento con fotoresistenza )
 * ********************************************************************************************************
*/
// IRRIGAZIONE AUTOMATICA PIANTE 1.0

// definizione valori sensori A / B
int SensA = A2;
int SensB = A1;
int SensValoreA = 0;
int SensValoreB = 0;
int percentuale;
int map_basso = 800;
int map_alto = 350;

// impostazione colori led
#define ledRossoA = 5;
#define ledVerdeA = 6;
#define ledBluA = 7;
#define ledRossoB = 8;
#define ledVerdeB = 9;
#define ledBluB = 10;

// impostazione tono buzzer
int buzzer = 2;
#define NOTE_C6  1047
#define NOTE_G3  196
#define NOTE_C3  131

// attivazione relè
const int pompaA = 3;
const int pompaB = 4;

// definizione fotoresistore
int foto = A3;
int ValoreFoto = 0;
int fotoresistenza;

// accensione sensori a tempo
const byte SensA =  A2;
const byte SensB =  A1;
unsigned long previousMillis = 0;
const byte states[] = {HIGH, LOW};
const unsigned long intervals[] = {100, 500};
const byte NO_OF_INTERVALS = sizeof(intervals) / sizeof(intervals[0]);
byte state;

void setup() {
  Serial.begin(115200);
  pinMode(SensA, INPUT);
  pinMode(SensB, INPUT);

  pinMode(pompaA, OUTPUT);
  pinMode(pompaB, OUTPUT);

  pinMode(foto, INPUT);

  digitalWrite(5, HIGH);
  digitalWrite(8, HIGH);
  digitalWrite(6, HIGH);
  digitalWrite(9, HIGH);
  digitalWrite(7, HIGH);
  digitalWrite(10, HIGH);
  delay(1000);

  digitalWrite(5, LOW);
  digitalWrite(8, LOW);
  digitalWrite(6, LOW);
  digitalWrite(9, LOW);
  digitalWrite(7, LOW);
  digitalWrite(10, LOW);
  delay(1000);

  tone(buzzer, NOTE_C6, 200);// beep di fine chek up
  delay(1000);
  noTone(buzzer);
}

void loop() {
  if (ValoreFoto > 700) {
    unsigned long currentMillis = millis();
    if (currentMillis - previousMillis >= intervals[state % NO_OF_INTERVALS])
    {
      previousMillis = currentMillis;
      analogRead(SensA, states[state++ % 2]);
      analogRead(SensB, states[state++ % 2]);
    }

    if (ValoreFoto > 700) {
      SensValoreA = analogRead(SensA);
      percentuale = map(SensValoreA, 0, 1023, 100, 0);
      Serial.print(" Sensore A: ");
      Serial.print(percentuale);
      Serial.println(" % ");

      SensValoreB = analogRead(SensB);
      percentuale = map(SensValoreB, 0, 1023, 100, 0);
      Serial.print(" Sensore B: ");
      Serial.print(percentuale);
      Serial.println(" % ");
      delay(2000);
    }

    Serial.print(" Valore Fotoresistenza: ");
    Serial.println(fotoresistenza);
    fotoresistenza = (ValoreFoto);
    ValoreFoto = analogRead(foto);

    if (( ValoreFoto > 700) && ( SensValoreA > 700)) { // se  il sensore A siperiore  700 accende led blu e pompa

      digitalWrite(7, HIGH);// accende led blu
      digitalWrite(3, HIGH);// accende relè per comando pompa

    }
    else {
      digitalWrite(7, LOW);
      digitalWrite(3, LOW);

    }
    if (( ValoreFoto > 700) && ( SensValoreB > 700)) {  // se  il sensore B siperiore  700 accende led blu e pompa
      digitalWrite(10, HIGH);// accende led blu
      digitalWrite(4, HIGH);// accende relè per comando pompa

    }
    else {
      digitalWrite(10, LOW);
      digitalWrite(4, LOW);

    }
    if (( ValoreFoto > 700) && ( SensValoreA < 700 )) {  // terreno bagnato
      digitalWrite(5, HIGH); // accende led rosso A
    }
    else {
      digitalWrite(5, LOW);
    }
    if (( ValoreFoto > 700) && ( SensValoreB < 700 )) {  // terreno bagnato
      digitalWrite(8, HIGH); // accende led rosso B
    }
    else {
      digitalWrite(8, LOW);
    }



  }




  /*if ( ValoreFoto > 800) {
    Serial.print(" Sensora A: ");
    Serial.print(percentuale);
    Serial.println(" % ");
    percentuale = map(SensValoreB, 0, 1023, 100, 0);
    Serial.print(" Sensore B: ");
    Serial.print(percentuale);
    Serial.println(" % ");
    tone(buzzer, NOTE_C6, 400);
    }
    if (SensValoreA > 700) {
    digitalWrite(7, HIGH);// accende led blu
    digitalWrite(3, HIGH);// accende relè per comando pompa
    }
    if (SensValoreB > 700) {
    digitalWrite(10, HIGH);// accende led blu
    digitalWrite(4, HIGH);// accende relè per comando pompa
    }
    if ((SensValoreA > 700) && (SensValoreA < 350)) { // per valori compresi tra 700 e 350
    digitalWrite(6, HIGH);// accende led verde }
    if ((SensValoreB > 700) && (SensValoreB < 350)) {  // per valori compresi tra 700 e 350
      digitalWrite(9, HIGH);// accende led verde
    }
    if (SensValoreA < 350) {
      digitalWrite(5, HIGH); // accendi led rosso - troppo bagnato
    }
    if (SensValoreB < 350) {
      digitalWrite(8, HIGH); // accendi led rosso - troppo bagnato
      noTone(buzzer);
    }

    else
    {
      digitalWrite(SensA, LOW);
      digitalWrite(SensB, LOW);
      digitalWrite(7, LOW);// spegne led blu
      digitalWrite(3, LOW);// spegne relè per comando pompa
      digitalWrite(10, LOW);// accende led blu
      digitalWrite(4, LOW);// accende relè per comando pompa
      digitalWrite(6, LOW);// spegne led verde
      digitalWrite(9, LOW);// spegne led verde
      digitalWrite(5, LOW); // spegni led rosso
      digitalWrite(8, LOW); // spegni led rosso
      delay(250);

    }
    }
    }*/

You do not read the photo-resistor where it makes sense, look at the comments:

/* Il mio primo progetto con arduino realizzato il  20/05/2018
 *  *******************************************************************************************************
    IRRIGAZIONE AUTOMATICA PIANTE 1.0

    Gelsomino
    Bonsai ( 2 )

   Funzionamento attraverso nr 2 sonde di umifìdità posizionati nel gelsomino e in bonsai Ficus Microcarpa
   Se il livello di umidità sale al di sopra del valore 700 ( asciutto ), accende led rosso , led blu e attiva pompa per irrigazione
   Se il valore è compreso tra 700  e 350 ( bagnato ) accende led verde per la verifica del funzionamente
   Se il valore è al di sotto del valore 350 ( troppo bagnato ) nessun led acceso

   Da inserire al progetto;
   1) Lettura dei valori alle ore 00:00, 06:00, 12:00, 18:00
   2) nr 3 letture a distanza di 5 minuti e considerare la media delle letture
   3) Irrigazione da effettuare solo dopo determinata ora ( o funzionamento con fotoresistenza )
 * ********************************************************************************************************
*/
// IRRIGAZIONE AUTOMATICA PIANTE 1.0

// definizione valori sensori A / B
int SensA = A2;
int SensB = A1;
int SensValoreA = 0;
int SensValoreB = 0;
int percentuale;
int map_basso = 800;
int map_alto = 350;

// impostazione colori led
#define ledRossoA = 5;
#define ledVerdeA = 6;
#define ledBluA = 7;
#define ledRossoB = 8;
#define ledVerdeB = 9;
#define ledBluB = 10;

// impostazione tono buzzer
int buzzer = 2;
#define NOTE_C6  1047
#define NOTE_G3  196
#define NOTE_C3  131

// attivazione relè
const int pompaA = 3;
const int pompaB = 4;

// definizione fotoresistore
int foto = A3;
int ValoreFoto = 0;
int fotoresistenza;

// accensione sensori a tempo
const byte SensA =  A2;
const byte SensB =  A1;
unsigned long previousMillis = 0;
const byte states[] = {HIGH, LOW};
const unsigned long intervals[] = {100, 500};
const byte NO_OF_INTERVALS = sizeof(intervals) / sizeof(intervals[0]);
byte state;

void setup() {
  Serial.begin(115200);
  pinMode(SensA, INPUT);
  pinMode(SensB, INPUT);

  pinMode(pompaA, OUTPUT);
  pinMode(pompaB, OUTPUT);

  pinMode(foto, INPUT);

  digitalWrite(5, HIGH);
  digitalWrite(8, HIGH);
  digitalWrite(6, HIGH);
  digitalWrite(9, HIGH);
  digitalWrite(7, HIGH);
  digitalWrite(10, HIGH);
  delay(1000);

  digitalWrite(5, LOW);
  digitalWrite(8, LOW);
  digitalWrite(6, LOW);
  digitalWrite(9, LOW);
  digitalWrite(7, LOW);
  digitalWrite(10, LOW);
  delay(1000);

  tone(buzzer, NOTE_C6, 200);// beep di fine chek up
  delay(1000);
  noTone(buzzer);
}

void loop() {
  
  ValoreFoto = analogRead(foto); //Add this line

  //The following "if" statement did not work because "ValoreFoto" was never read
  if (ValoreFoto > 700) {
    unsigned long currentMillis = millis();
    if (currentMillis - previousMillis >= intervals[state % NO_OF_INTERVALS])
    {
      previousMillis = currentMillis;
      analogRead(SensA, states[state++ % 2]);
      analogRead(SensB, states[state++ % 2]);
    }

    //The next "if" statement is redundant, so comment it out
    //if (ValoreFoto > 700) {
      SensValoreA = analogRead(SensA);
      percentuale = map(SensValoreA, 0, 1023, 100, 0);
      Serial.print(" Sensore A: ");
      Serial.print(percentuale);
      Serial.println(" % ");

      SensValoreB = analogRead(SensB);
      percentuale = map(SensValoreB, 0, 1023, 100, 0);
      Serial.print(" Sensore B: ");
      Serial.print(percentuale);
      Serial.println(" % ");
      delay(2000);
    //}

    Serial.print(" Valore Fotoresistenza: ");
    Serial.println(fotoresistenza);

    //The following line is of no use, "fotoresistenza" is never used for anything
    fotoresistenza = (ValoreFoto);

    //Next line is of no use..
    //ValoreFoto = analogRead(foto);

    //All the following "if" statements should not check for "ValoreFoto > 700"
    //because that has already been done 

    if (/*( ValoreFoto > 700) &&*/ ( SensValoreA > 700)) { // se  il sensore A siperiore  700 accende led blu e pompa

      digitalWrite(7, HIGH);// accende led blu
      digitalWrite(3, HIGH);// accende relè per comando pompa

    }
    else {
      digitalWrite(7, LOW);
      digitalWrite(3, LOW);

    }
    if (/*( ValoreFoto > 700) &&*/ ( SensValoreB > 700)) {  // se  il sensore B siperiore  700 accende led blu e pompa
      digitalWrite(10, HIGH);// accende led blu
      digitalWrite(4, HIGH);// accende relè per comando pompa

    }
    else {
      digitalWrite(10, LOW);
      digitalWrite(4, LOW);

    }
    if (/*( ValoreFoto > 700) &&*/ ( SensValoreA < 700 )) {  // terreno bagnato
      digitalWrite(5, HIGH); // accende led rosso A
    }
    else {
      digitalWrite(5, LOW);
    }
    if (/*( ValoreFoto > 700) &&*/ ( SensValoreB < 700 )) {  // terreno bagnato
      digitalWrite(8, HIGH); // accende led rosso B
    }
    else {
      digitalWrite(8, LOW);
    }



  }




  /*if ( ValoreFoto > 800) {
    Serial.print(" Sensora A: ");
    Serial.print(percentuale);
    Serial.println(" % ");
    percentuale = map(SensValoreB, 0, 1023, 100, 0);
    Serial.print(" Sensore B: ");
    Serial.print(percentuale);
    Serial.println(" % ");
    tone(buzzer, NOTE_C6, 400);
    }
    if (SensValoreA > 700) {
    digitalWrite(7, HIGH);// accende led blu
    digitalWrite(3, HIGH);// accende relè per comando pompa
    }
    if (SensValoreB > 700) {
    digitalWrite(10, HIGH);// accende led blu
    digitalWrite(4, HIGH);// accende relè per comando pompa
    }
    if ((SensValoreA > 700) && (SensValoreA < 350)) { // per valori compresi tra 700 e 350
    digitalWrite(6, HIGH);// accende led verde }
    if ((SensValoreB > 700) && (SensValoreB < 350)) {  // per valori compresi tra 700 e 350
      digitalWrite(9, HIGH);// accende led verde
    }
    if (SensValoreA < 350) {
      digitalWrite(5, HIGH); // accendi led rosso - troppo bagnato
    }
    if (SensValoreB < 350) {
      digitalWrite(8, HIGH); // accendi led rosso - troppo bagnato
      noTone(buzzer);
    }

    else
    {
      digitalWrite(SensA, LOW);
      digitalWrite(SensB, LOW);
      digitalWrite(7, LOW);// spegne led blu
      digitalWrite(3, LOW);// spegne relè per comando pompa
      digitalWrite(10, LOW);// accende led blu
      digitalWrite(4, LOW);// accende relè per comando pompa
      digitalWrite(6, LOW);// spegne led verde
      digitalWrite(9, LOW);// spegne led verde
      digitalWrite(5, LOW); // spegni led rosso
      digitalWrite(8, LOW); // spegni led rosso
      delay(250);

    }
    }
    }*/ //<== This may be a problem, end of comment should probably have been in the previous line

ok I try and I’ll tell you if everything works
Thanks in advance