startEthernet problem

Hi, there ! Need some serious help with this error!

Σε χρήση: C:\Users\sfour\OneDrive\Υπολογιστής\Έγγραφα\Arduino\libraries\Ethernet
Όχι σε χρήση: C:\Program Files (x86)\Arduino\libraries\Ethernet
exit status 1
'startEthernet' was not declared in this scope

I discovered when I use the void loop(){...} correctly, without forgetting the "{}" it returns this message.
If I miss the last "}", then the code runs , updates data to ThingSpeak, but the loop does not work well. Any ideas for a begginer ???

Here's my total code.

#include <ThingSpeak.h>// Η βιβλιοθήκη του ThingSpeak.
#include <SPI.h>
#include <Ethernet.h>
#include <SoftwareSerial.h>
#include "Servo.h" // Η βιβλιοθήκη του σερβοκινητήρα.
#include "DHT.h"
#include "MQ7.h"
//Για τον αισθητήρα DHT11.
#define DHTPIN 7
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
//Για τον φωτισμό.
#define DELAY 5000 // Καθυστέρηση μεταξύ μετρήσεων σε ms για τον φωτισμό.
#define VIN 5 // Τάση 5V.
#define R 10000 //Αντίσταση 10.000 Ω.
//Για τον αισθητήρα MQ7.
int MQ7pin = A0;
int MQ7Reading;
int MQ7led = 3;
//Για τον αισθητήρα Soil.
int val;
int soil_dig = 8;
int soil_analog = A1;
//Μεταβλητές για τον φωτισμό και για τον υπολογισμό lux.
const int sensorPin = A3; // Το pin στο οποίο συνδέεται ο αισθητήρας.
const int led = 12;
const int greenled = 10;
const int redled = 4;
const long onduration = 10000;
const long offduration = 30000;
int ledstate = HIGH;
long remembertime = 0;
int sensorVal; // Αναλογική τιμή από τον αισθητήρα.
int lux; //Τιμές για τα lux

int valvePin = 13; // Το pin στο οποίο συνδέεται το ρελέ, ώστε να ενεργοποιεί την ηλεκτροβάνα.
//Για τον αισθητήρα Ultrasonic.
#define echoPin 5 // Το echoPin.
#define trigPin 6 // To trigPin.
long duration; // Η διάρκεια που κάνει το ηχητικό κύμα να ταξιδέψει.
int distance; // Ο υπολογισμός της ταχύτητας του ηχητικού κύματος.
//Για τον αισθητήρα Rain.
const int rain_D = 2;//Ψηφιακή τιμή αισθητήρα βροχής.
const int rain_A = A2;//Αναλογική τιμή αισθητήρα βροχής.
int rain_val;// Μεταβλητή για την αποθήκευση της τιμής του αισθητήρα βροχής.
int r;// Μεταβλητή για την αποθήκευση της τιμής του αισθητήρα βροχής.
Servo servo; // Το όνομα του σερβοκινητήρα.
int servoPin = 11; // Το pin στο οποίο συνδέεται ο σερβοκινητήρας.
#define pwm 9 // Το pin στο οποίο συνδέεται ο ανεμιστήρας.

//Σύνδεση

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; //H mac address.
char thingSpeakAddress[] = "api.thingspeak.com";
String writeAPIKey = "PWN6SIKP2CL3Y9Y8";
const int updateThingSpeakInterval = 16 * 1000; // Time interval in milliseconds to update ThingSpeak (number of seconds * 1000 = interval)

// Variable Setup
long lastConnectionTime = 0;
boolean lastConnected = false;
int failedCounter = 0;
// Initialize Arduino Ethernet Client
EthernetClient client;

void setup() {
  startEthernet();
  Serial.begin(9600);
  dht.begin();
  pinMode(MQ7led, OUTPUT);// Θέτει το led του MQ7 ως OUTPUT.
  pinMode(trigPin, OUTPUT); // Θέτει το trigPin ως OUTPUT.
  pinMode(echoPin, INPUT); // Θέτει το echoPin ως INPUT.
  pinMode(rain_D, INPUT); // Θέτει το rain_D ως INPUT.
  pinMode(rain_A, INPUT); // Θέτει το rain_A ως INPUT.
  pinMode(servoPin, OUTPUT);// Θέτει το servoPin ως OUTPUT.
  servo.attach(servoPin);// Σύνδεση σε pin της μεταβλητής του σερβοκινητήρα.
  analogWrite(pwm, 255);// Γράφει μία αναλογική τιμή (PWM pin) σε ένα pin.
  pinMode(soil_analog, INPUT); // Θέτει το soil_analog ως INPUT.
  pinMode(soil_dig, INPUT);// Θέτει το soil_dig ως INPUT.
  pinMode(valvePin, OUTPUT); //Θέτει το 13 ως OUTPUT pin, ώστε να στέλνει σήμα στο relay.
  pinMode(led, OUTPUT);  // Θέτει το ledPin ως output.
  digitalWrite(led, ledstate);
  pinMode(sensorPin, INPUT);// Θέτει το sensorPin ως INPUT.
  pinMode(greenled, OUTPUT);// Θέτει το greenled ως OUTPUT.
  pinMode(redled, OUTPUT);// Θέτει το redled ως OUTPUT.
  
}

void loop()
{

  Serial.println(F("======================================"));
  Serial.println(F("Συνθήκες στο Θερμοκήπιο :"));
  //DHT11
  float t = dht.readTemperature();// Η θερμοκρασία σε °C.
  float h = dht.readHumidity(); // Η υγρασία του χώρου.
  float f = dht.readTemperature(true); //Η θερμοκρασία σε °F.
  // Υπολογισμός του heat index, ο οποίος πρέπει να μετατραπεί σε Fahrenheit.
  float hi = dht.computeHeatIndex(f, h);
  Serial.print(F("Temperature: "));
  Serial.print(t);
  Serial.print(F("°C "));
  Serial.print(F(" and "));
  Serial.print(f);
  Serial.print(F("°F\t"));
  Serial.print(F("Humidity: "));
  Serial.print(h);
  Serial.print(F(" %\t"));
  Serial.print(F("Heat index: "));
  Serial.print(hi);
  Serial.println(F(" °F"));
  char t_buffer[10];
  char h_buffer[10];
  String temp = dtostrf(t, 0, 5, t_buffer);
  String humid = dtostrf(h, 0, 5, h_buffer);
  //MQ7
  float g = analogRead(MQ7pin);
  Serial.print(F("MQ7: "));
  Serial.println(g);
  char g_buffer[10];
  String gas = dtostrf(g, 0, 5, t_buffer);

  //Soil Humidity
  int soil_analog_value = analogRead(soil_analog);
  soil_analog_value = map(soil_analog_value, 0, 1023, 230, 0);//Συνάρτηση map για μετρατροπή τιμής σε %.
  val = digitalRead(soil_dig);
  Serial.print(F("Soil moisture (Αναλογική τιμή) : "));
  Serial.print(soil_analog_value);
  Serial.print(F("\t"));
  char soil_analog_value_buffer[10];
  String soil = dtostrf(soil_analog_value, 0, 5, t_buffer);
  //Ultrasonic Sensor
  // Αρχικοποίηση του trigPin.
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  // Το trigPin σε HIGH (ACTIVE) για 10 μs.
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  //Διαβάζει το echoPin, επιστρέφει το χρόνο του ηχητικού κύματος σε μs.
  duration = pulseIn(echoPin, HIGH);
  // Υπολογισμός απόστασης.
  distance = (duration - 10) * 0.034 / 2;
  Serial.println("");
  Serial.print(F("Distance: "));
  Serial.print(distance);
  Serial.print(F(" cm"));
  char dis_buffer[10];
  String dis = dtostrf(distance, 0, 5, t_buffer);

  //Rain Sensor
  rain_val = digitalRead(rain_D);
  r = analogRead (rain_A);
  r = abs((100 * r - 4000) / 623);
  Serial.println(F(""));
  Serial.print(F("Rain (Αναλογική τιμή) :"));
  Serial.print(r);
  Serial.print(F("\t"));
  Serial.print(F("Rain (Ψηφιακή τιμή) :"));
  Serial.print(rain_val);
  char r_buffer[10];
  String rain = dtostrf(r, 0, 5, t_buffer);

  // Έλεγχος της θερμοκρασίας , ώστε να ενεργοποιείται ο ανεμιστήρας όποτε χρειάζεται.
  if (t == 26)
  {
    analogWrite(pwm, 51);
    Serial.print(F("Ταχύτητα ανεμιστήρα: 20%   "));
    delay(1000);
  }
  else if (t == 30)
  {
    analogWrite(pwm, 204);
    Serial.print(F("Ταχύτητα ανεμιστήρα: 80%   "));
    delay(1000);
  }
  else if (t > 40 )
  {
    analogWrite(pwm, 255);
    Serial.print(F("Ταχύτητα ανεμιστήρα: 100%   "));
    delay(1000);
    Serial.print(F("\t"));
  }
 // Έλεγχος της τιμής του MQ7, ώστε να ανάβει το led που αναπαριστά ανεμιστήρα.
   if ( g < 200)
  {
    Serial.println(F("O ανεμιστήρας κλειστός - Φυσιολογική ποσότητα CO στον χώρο εργασίας."));
    digitalWrite(MQ7led, LOW); 
  }
  else if (201 < g < 220)
  {
  Serial.println(F("Η μέγιστη φυσιολογική ποσότητα CO για χώρους εργασίας ξεπεράστηκε!!!- Λειτουργία εξαερισμού στο 50%."));
  digitalWrite(MQ7led,HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);                       // wait for a second
  digitalWrite(MQ7led, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);   
  }
   if (g > 220)
  {
  Serial.println(F("Eπικίνδυνα αέρια CO !!!- Λειτουργία εξαερισμού στο 100%."));
  digitalWrite(MQ7led, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(5000);
  }
 //Έλεγχος υγρασίας εδάφους για αυτόματο πότισμα.
  if (soil_analog_value < 50)
  {
    digitalWrite(valvePin, LOW); //Όταν η τιμή γίνει LOW,τότε και το relay πρέπει να λάβει τιμή LOW.
    Serial.println(F("relay on"));
  }
  else
  {
    digitalWrite(valvePin, HIGH); //Όταν η τιμή γίνει HIGH, τότε και το relay πρέπει να λάβει τιμή HIGH.
    Serial.println(F("relay off"));
  }
  // Disconnect from ThingSpeak
  if (!client.connected() && lastConnected)
  {
    Serial.println("...disconnected");
    Serial.println();
    client.stop();
  }
   //Έλεγχος για λειτουργία του σερβοκινητήρα.
  if ((rain_val != HIGH) && (distance < 9)) {
    servo.write(0);
  }
  if ((rain_val != HIGH) && (distance > 9)) {
    servo.write(90);
  }
  else {
      servo.write(0);
   }
}



  // Update ThingSpeak
  if (!client.connected() && (millis() - lastConnectionTime > updateThingSpeakInterval))
  {
    updateThingSpeak("field1=" + temp + "&field2=" + humid + "&field3=" + gas + "&field4=" + soil_analog_value + "&field5=" + dis + "&field6=" + rain);
  }

  // Check if Arduino Ethernet needs to be restarted
  if (failedCounter > 3 ) {
    startEthernet();
  }
  lastConnected = client.connected();

}


void updateThingSpeak(String tsData)
{
  if (client.connect(thingSpeakAddress, 80))
  {
    client.print("POST /update HTTP/1.1\n");
    client.print("Host: api.thingspeak.com\n");
    client.print("Connection: close\n");
    client.print("X-THINGSPEAKAPIKEY: " + writeAPIKey + "\n");
    client.print("Content-Type: application/x-www-form-urlencoded\n");
    client.print("Content-Length: ");
    client.print(tsData.length());
    client.print("\n\n");
    client.print(tsData);
    lastConnectionTime = millis();
    if (client.connected())
    {
      Serial.println("Connecting to ThingSpeak...");
      Serial.println();
      failedCounter = 0;
    }
    else
    {
      failedCounter++;
      Serial.println("Connection to ThingSpeak failed (" + String(failedCounter, DEC) + ")");
      Serial.println();
    }
  }
  else
  {
    failedCounter++;
    Serial.println("Connection to ThingSpeak Failed (" + String(failedCounter, DEC) + ")");
    Serial.println();
    lastConnectionTime = millis();
  }
}

void startEthernet()
{
  client.stop();
  Serial.println("Connecting Arduino to network...");
  Serial.println();
  delay(1000);
  // Connect to network amd obtain an IP address using DHCP
  if (Ethernet.begin(mac) == 0)
  {
    Serial.println("DHCP Failed, reset Arduino to try again");
    Serial.println();
  }
  else
  {
    Serial.println("Arduino connected to network using DHCP");
    Serial.println();
  }
  delay(1000);

}

int sensorRawToPhys(int raw) {
  // Conversion rule
  float Vout = float(raw) * (VIN / float(1023));// Conversion analog to voltage
  float RLDR = (R * (VIN - Vout)) / Vout; // Conversion voltage to resistance
  int phys = 500 / (RLDR / 1000); // Conversion resitance to lumen
  return phys;
}

  else
  {
    servo.write(0);
  }
}  /////////// loop() ENDS HERE //////////////

///////////// YOU CAN'T PUT CODE OUTSIDE A FUNCTION //////////////////

// Update ThingSpeak
if (!client.connected() && (millis() - lastConnectionTime > updateThingSpeakInterval))
{
  updateThingSpeak("field1=" + temp + "&field2=" + humid + "&field3=" + gas + "&field4=" + soil_analog_value + "&field5=" + dis + "&field6=" + rain);
}

You ended loop() early so the bare code after loop() caued your compile to fail before 'startEtherenet()" is defined.

Yes, this seems to help. But still, the code inside the loop is ignored, except the actual data which is properly send to ThingSpeak. Can you see anything else I miss?

else if (201 < g < 220)

This is NOT a valid shortcut! You have to spell it out:

else if (201 < g && g < 220)

You are creating separate buffers for each call to 'dtostrf()' but not using them.

  char g_buffer[10];
  String gas = dtostrf(g, 0, 5, t_buffer);

  char soil_analog_value_buffer[10];
  String soil = dtostrf(soil_analog_value, 0, 5, t_buffer);

  char dis_buffer[10];
  String dis = dtostrf(distance, 0, 5, t_buffer);

  char r_buffer[10];
  String rain = dtostrf(r, 0, 5, t_buffer);

Thanks, I noticed my mistakes !
The problem still remains. When I don't use the scripts to send my data to ThinkSpeak, the code works properly and the control circuits I have created do the right things. I can't see why it stops working when it is sending data in the same time.
For instance, when I wet the sensor, it should be sending the command to the relay in order to activate the solenoid valve, but it doesn't. When I use the following code it works, but I can't send data....

#include <ThingSpeak.h>// Η βιβλιοθήκη του ThingSpeak.
#include <SPI.h>
#include <Ethernet.h>
#include <SoftwareSerial.h>
#include <Servo.h> // Η βιβλιοθήκη του σερβοκινητήρα.
#include "DHT.h"
#include "MQ7.h"
//Για τον αισθητήρα DHT11.
#define DHTPIN 7
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
//Για τον φωτισμό.
#define DELAY 5000 // Καθυστέρηση μεταξύ μετρήσεων σε ms για τον φωτισμό.
#define VIN 5 // Τάση 5V.
#define R 10000 //Αντίσταση 10.000 Ω.
//Για τον αισθητήρα MQ7.
int MQ7pin = A0;
int MQ7Reading;
int MQ7led = 3;
//Για τον αισθητήρα Soil.
int val;
int soil_dig= 8;
int soil_analog = A1;
//Μεταβλητές για τον φωτισμό και για τον υπολογισμό lux.
const int sensorPin = A3; // Το pin στο οποίο συνδέεται ο αισθητήρας.
const int led = 12;
const int greenled = 10;
const int redled = 4;
const long onduration = 10000;
const long offduration = 30000;
int ledstate = HIGH;
long remembertime = 0;
int sensorVal; // Αναλογική τιμή από τον αισθητήρα.
int lux; //Τιμές για τα lux

int valvePin = 13; // Το pin στο οποίο συνδέεται το ρελέ, ώστε να ενεργοποιεί την ηλεκτροβάνα.
//Για τον αισθητήρα Ultrasonic.
#define echoPin 5 // Το echoPin.
#define trigPin 6 // To trigPin.
long duration; // Η διάρκεια που κάνει το ηχητικό κύμα να ταξιδέψει.
int distance; // Ο υπολογισμός της ταχύτητας του ηχητικού κύματος.
//Για τον αισθητήρα Rain.
const int rain_D = 2;//Ψηφιακή τιμή αισθητήρα βροχής.
const int rain_A = A2;//Αναλογική τιμή αισθητήρα βροχής.
int rain_val;// Μεταβλητή για την αποθήκευση της τιμής του αισθητήρα βροχής.
int r;// Μεταβλητή για την αποθήκευση της τιμής του αισθητήρα βροχής.
Servo servo; // Το όνομα του σερβοκινητήρα.
int servoPin = 11; // Το pin στο οποίο συνδέεται ο σερβοκινητήρας.
#define pwm 9 // Το pin στο οποίο συνδέεται ο ανεμιστήρας.

//Σύνδεση
String readString; 
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; //H mac address.
byte ip[] = {192,168,2,121};
EthernetClient client;
unsigned long myChannelNumber = 1342582; //Ο αριθμός του καναλιού.
const char * myWriteAPIKey = "PWN6SIKP2CL3Y9Y8";  //Το ΑΡΙ Κey του καναλιού.
 const int updateInterval = 16000;
void setup() {
   
  Serial.begin(9600);
  ThingSpeak.begin(client);// Σύνδεση στο cloud του ThingSpeak.

  dht.begin();
  pinMode(MQ7led, OUTPUT);// Θέτει το led του MQ7 ως OUTPUT.
  pinMode(trigPin, OUTPUT); // Θέτει το trigPin ως OUTPUT.
  pinMode(echoPin, INPUT); // Θέτει το echoPin ως INPUT.
  pinMode(rain_D, INPUT); // Θέτει το rain_D ως INPUT.
  pinMode(rain_A, INPUT); // Θέτει το rain_A ως INPUT.
  pinMode(servoPin, OUTPUT);// Θέτει το servoPin ως OUTPUT.
  servo.attach(servoPin);// Σύνδεση σε pin της μεταβλητής του σερβοκινητήρα.
  analogWrite(pwm, 255);// Γράφει μία αναλογική τιμή (PWM pin) σε ένα pin.
  pinMode(soil_analog, INPUT); // Θέτει το soil_analog ως INPUT.
  pinMode(soil_dig, INPUT);// Θέτει το soil_dig ως INPUT.
  pinMode(valvePin, OUTPUT); //Θέτει το 13 ως OUTPUT pin, ώστε να στέλνει σήμα στο relay.
  pinMode(led, OUTPUT);  // Θέτει το ledPin ως output.
  digitalWrite(led,ledstate);
  pinMode(sensorPin, INPUT);// Θέτει το sensorPin ως INPUT.
  pinMode(greenled, OUTPUT);// Θέτει το greenled ως OUTPUT.
  pinMode(redled, OUTPUT);// Θέτει το redled ως OUTPUT.

}
void loop() {
  
  Serial.println(F("======================================"));
  Serial.println(F("Συνθήκες στο Θερμοκήπιο :"));
  //DHT11
  float t = dht.readTemperature();// Η θερμοκρασία σε °C.
  float h = dht.readHumidity(); // Η υγρασία του χώρου.
  float f = dht.readTemperature(true); //Η θερμοκρασία σε °F.
  // Υπολογισμός του heat index, ο οποίος πρέπει να μετατραπεί σε Fahrenheit.
  float hi = dht.computeHeatIndex(f, h);
  Serial.print(F("Temperature: "));
  Serial.print(t);
  Serial.print(F("°C "));
  Serial.print(F(" and "));
  Serial.print(f);
  Serial.print(F("°F\t"));
  Serial.print(F("Humidity: "));
  Serial.print(h);
  Serial.print(F(" %\t"));
  Serial.print(F("Heat index: "));
  Serial.print(hi);
  Serial.println(F(" °F"));

  // Έλεγχος της θερμοκρασίας , ώστε να ενεργοποιείται ο ανεμιστήρας όποτε χρειάζεται.
  if (t == 26)
  {
    analogWrite(pwm, 51);
    Serial.print(F("Ταχύτητα ανεμιστήρα: 20%   "));
    delay(1000);
  }
  else if (t == 30)
  {
    analogWrite(pwm, 204);
    Serial.print(F("Ταχύτητα ανεμιστήρα: 80%   "));
    delay(1000);
  }
  else if (t > 40 )
  {
    analogWrite(pwm, 255);
    Serial.print(F("Ταχύτητα ανεμιστήρα: 100%   "));
    delay(1000);
    Serial.print(F("\t"));
  }
  
  
  
  //MQ7
  float g = analogRead(MQ7pin);
  Serial.print(F("MQ7: "));
  Serial.println(g);

    // Έλεγχος της τιμής του MQ7, ώστε να ανάβει το led που αναπαριστά ανεμιστήρα.
   if ( g < 200)
  {
    Serial.println(F("O ανεμιστήρας κλειστός - Φυσιολογική ποσότητα CO στον χώρο εργασίας."));
    digitalWrite(MQ7led, LOW); 
  }
  else if (201 < g && g < 220)
  {
  Serial.println(F("Η μέγιστη φυσιολογική ποσότητα CO για χώρους εργασίας ξεπεράστηκε!!!- Λειτουργία εξαερισμού στο 50%."));
  digitalWrite(MQ7led,HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);                       // wait for a second
  digitalWrite(MQ7led, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);   
  }
   if (g > 220)
  {
  Serial.println(F("Eπικίνδυνα αέρια CO !!!- Λειτουργία εξαερισμού στο 100%."));
  digitalWrite(MQ7led, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(5000);
  }
  //Soil Humidity
  int soil_analog_value = analogRead(soil_analog);
  soil_analog_value = map(soil_analog_value, 0, 1023, 230, 0);//Συνάρτηση map για μετρατροπή τιμής σε %.
  val = digitalRead(soil_dig);
  Serial.print(F("Soil moisture (Αναλογική τιμή) : "));
  Serial.print(soil_analog_value);
  Serial.print(F("\t"));

  
  //Έλεγχος υγρασίας εδάφους για αυτόματο πότισμα.
  if (soil_analog_value < 50)
  {
    digitalWrite(valvePin, LOW); //Όταν η τιμή γίνει LOW,τότε και το relay πρέπει να λάβει τιμή LOW.
    Serial.println(F("relay on"));
  }
  else
  {
    digitalWrite(valvePin, HIGH); //Όταν η τιμή γίνει HIGH, τότε και το relay πρέπει να λάβει τιμή HIGH.
    Serial.println(F("relay off"));
  }
 
  
  //Ultrasonic Sensor
  // Αρχικοποίηση του trigPin.
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  // Το trigPin σε HIGH (ACTIVE) για 10 μs.
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  //Διαβάζει το echoPin, επιστρέφει το χρόνο του ηχητικού κύματος σε μs.
  duration = pulseIn(echoPin, HIGH);
  // Υπολογισμός απόστασης.
  distance = (duration - 10) * 0.034 / 2;
  Serial.println("");
  Serial.print(F("Distance: "));
  Serial.print(distance);
  Serial.print(F(" cm"));
//Rain Sensor
  rain_val = digitalRead(rain_D);
  r = analogRead (rain_A);
  r = map (r,0,1023,0,230);
  Serial.println(F(""));
  Serial.print(F("Rain (Αναλογική τιμή) :"));
  Serial.print(r);
  Serial.print(F("\t"));
  Serial.print(F("Rain (Ψηφιακή τιμή) :"));
  Serial.print(rain_val);

  //Έλεγχος για λειτουργία του σερβοκινητήρα.
  if ((rain_val != HIGH) && (distance < 9)) {
    servo.write(0);
  }
  if ((rain_val != HIGH) && (distance > 9)) {
    servo.write(90);
  }
  else {
      servo.write(0);
   }
 
  //Μέτρηση τιμής της φωτοαντίστασης και μετατροπή σε lux.
  sensorVal = analogRead(sensorPin);
  lux=sensorRawToPhys(sensorVal);
  Serial.print("Raw value from sensor= ");
  Serial.println(sensorVal); //Τύπωση αναλογικής τιμής.
  Serial.print("Physical value from sensor = ");
  Serial.print(lux); //Τύπωση αναλογικής τιμής.
  Serial.println(" lumen"); 

//Συνθήκες για το άνοιγμα των led και των κουρτινών σκίασης σε διάφορες γωνίες.
   if (ledstate == HIGH){
    if((millis() - remembertime) >= onduration){
    ledstate = LOW;
    remembertime = millis();
    }
   }
   if (ledstate == LOW){
    if((millis() - remembertime) >= offduration){
    ledstate = HIGH;
    remembertime = millis();
   }
   }
  
  //Lux.
   if (lux < 100){
   digitalWrite(led, HIGH);
   if (lux < 200){
    digitalWrite(greenled, ledstate);
   if (lux < 300){
    digitalWrite(redled, ledstate);
   }}}
   if(lux > 350){
    digitalWrite(redled, LOW);
    if(lux > 450){
    digitalWrite(greenled, LOW);
    if (lux>600){
    digitalWrite(led, LOW); 

 }}}
   else 
   digitalWrite(led,ledstate);
   
 
 //Τα δεδομένα για το ThingSpeak, τα οποία στέλνονται στα αριθμημένα fields.
  ThingSpeak.writeField(myChannelNumber, 1, t, myWriteAPIKey);
  ThingSpeak.writeField(myChannelNumber, 2, h, myWriteAPIKey);
  ThingSpeak.writeField(myChannelNumber, 3, g, myWriteAPIKey);
  ThingSpeak.writeField(myChannelNumber, 4, soil_analog_value, myWriteAPIKey);
  ThingSpeak.writeField(myChannelNumber, 5, distance, myWriteAPIKey);
  ThingSpeak.writeField(myChannelNumber, 6, r, myWriteAPIKey);
 delay(16000); 
}
int sensorRawToPhys(int raw){
  // Conversion rule
  float Vout = float(raw) * (VIN / float(1023));// Conversion analog to voltage
  float RLDR = (R * (VIN - Vout))/Vout; // Conversion voltage to resistance
  int phys=500/(RLDR/1000); // Conversion resitance to lumen
  return phys;
 
}

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.