Salve mi sono iscritto da poco su questo forum, avrei bisogno di aiuto per quanto riguarada la programmazione di arduino ethernet.
Mi spiego meglio, sto realizzando una serra idroponica automatizzata, inizialmente ho realizzato esso con arduino mega, dei sensori di temperatura,umidità ecc. devo dire che il programma è un po lungo ma al momento funziona benissimo. adesso vorrei espandere il progetto inserendo una shield ethernet per comandare una scheda relè e vorrei visuallizzare da remoto i dati utili dei sensori umidità temperatura livello acqua .
ho realizzato il programma ma devo dire che mi da degli errori durante la compilazione aspetto vostra risposta al più presto
ciao...in primis presentati nell'apposita sezione, passerà sicuramente un moderatore dandoti tutti i riferimenti necessari, in secondo se alleghi copia degli errori che ti da magari capiamo meglio di cosa si tratta.
antonio5690: Come già ti ha indicato ORSO2001, essendo il tuo primo post, nel rispetto del regolamento della sezione Italiana del forum (… punto 13, primo capoverso), ti chiedo cortesemente di presentarti IN QUESTO THREAD (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con MOLTA attenzione il su citato REGOLAMENTO ... Grazie.
Guglielmo
ciao orso 2001 questo é il codice togliendo la parte di arduino ethernet funziona perfettamente non appena aggiungo tutta la parte per la programmazione di arduino ethernet mi da errore un po su tutta la parte del codice
unsigned long STARTINGTIME; //GESTIONE TIMER
const unsigned long TIMEOUT = 2000; //GESTIONE TIMEOUT (2000Ms = 2 Sec)in tutto sta attivo 34 sec dis 33
int val; //PER LETTURA STATUS PIN 9
int x; //PER MESSAGGIO SERIALE
const int valore_limite = 100; //Valore dell'igrometro al quale il relay sarà ON990
//DHT11 Sensor:
#include "DHT.h"
#define DHTPIN 12 // Sensore collegato al PIN 12
#define DHTTYPE DHT11 // DHT 11
DHT dht(DHTPIN, DHTTYPE);
#include <Ethernet.h> //libreria ethernet
#include <SPI.h> //collabora con la libreria ethernet
#include <String.h> //gestione stringhe
byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED}; //indirisso fisico
byte ip[] = {192, 168, 1, 177}; //indirizzo ip locale
byte subnet[] = {255, 255, 255, 0}; //indirizzo subnet
byte gateway[] = {192, 168, 1, 1}; //indirizzo gateway
EthernetServer server(80); //imposto porta protocollo HTTP
int rele = 10; /
String ascoltatore; //dichiarazione stringa
//I2C LCD:
#include <Wire.h> // Libreria WIRE
#include <LiquidCrystal.h> // Libreria LCD I2C
// LCD I2C address
LiquidCrystal lcd( 7, 6, 5, 4, 3, 2); // da cambiare se si ha un modello diverso
void setup()
{
// PIN 9 al Relè - IN1
Serial.begin(9600);
pinMode(9, OUTPUT);
// PIN 10 al relè - IN2
pinMode(10, OUTPUT);
// PIN 11 al relè - IN3
pinMode(11, OUTPUT);
//PIN 13 al LED - in4
pinMode (22, OUTPUT);
Ethernet.begin(mac, ip, gateway, subnet); //inizializzazione impostazioni
ascoltatore=""; //inizializzazione stringa
//I2C LCD
Serial.begin(9600);
lcd.begin(16,2);
Serial.println ("Serra automatizzata");
// Avvio sensore DHT11
dht.begin();
//---------------------------------------------------------------
//IMPOSTAZIONE SETTAGGI
//---------------------------------------------------------------
//myTimer.startTimer(); //start the timer
pinMode(9, OUTPUT); //INIZIALIZZO PIN 13
Serial.begin(9600); //INIZIALIZZO SERIALE
}
void loop()
{
EthernetClient client = server.available(); //attendo l'arrivo di un client
if (client) { //se c'è il cliente deve..
while(client.connected()) {
if(client.available()) {
char c = client.read(); //..leggere i caratteri che invia
ascoltatore.concat(c); //concatena i caratteri del client
if (c == '\n') { //se arrivo a fine riga
if(ascoltatore.indexOf("rele=1")>0) { //controllo che nell'url ci sia led=1
digitalWrite(rele, HIGH); //se c'è accendo il led
}
else {
digitalWrite(rele, LOW); //altrimenti spengo il led
}
client.println("HTTP/1.1 200 OK"); //dico al client che è tutt'ok - standard http
client.println("Content-Type: text/html"); //indico il formato - standard http
client.println(); //necessario per non buggare
client.println(""); //inizio codice html
client.println("Serra idroponica ");
client.println("Accendi - Spegni</body");
client.println(""); //fine codice html
client.stop(); //stop richieste dal client
ascoltatore="";
}
}
}
// Fotoresistore55555555555555555555555555555555555555555555
int Lumen = analogRead (A0); // Lumen come intero della lettura del pin A0
Serial.print("Sen.lux: ");
Serial.println(Lumen, DEC); // Stampa un valore decimale del fotoresistore
if (Lumen > 750)
digitalWrite (11, HIGH); // Se il valore di Lumen è superiore a 750 attiva relè
else
digitalWrite (11, LOW); // altrimenti spegne relè
delay (1000); // Intervallo di 2 secondi
//Livello Acqua
int water = analogRead(A1);
Serial.print ("Sen.acqua: ");
Serial.println(water, DEC); // Stampa il valore decimale del sensore di livello acqua
if (water > 80) {
lcd.setCursor(0,8); // Indica posizione del cursore su LCD
lcd.print("Acqua:OK "); // Stampa su LCD il testo
}
else
{
lcd.setCursor(0,3); // Indica posizione del cursore su LCD
lcd.print("Acqua:BASSA"); // Stampa su LCD il testo
// alarm();
// flash();
delay(1000); // Intervallo di 2 secondi
}
// Igrometro
int igro = analogRead(A3); // Legge il valore analogico
//int umdtrr = 0; // Variabile umidità suolo
//umdtrr = map (igro, 100, 990, 100, 0); // converto il valore analogico in percentuale
//Serial.print("Umi.terreno:");
//Serial.print(umdtrr);
//Serial.println ("%"); //Stampa a schermo il valore
//if (igro <= valore_limite)
//digitalWrite(9,LOW); // Attiva Relè 1
//else
//digitalWrite(9,HIGH); // Spegni Relè 1
//delay(1000); // Attende due secondi
// Lettura umidità e temperatura del sensore DHT11
int h = dht.readHumidity();
int t = dht.readTemperature();
// Misura la temperatura e se maggiore di 40 gradi attiva relè per accendere la ventola
if (t >= 25 )
digitalWrite (10, HIGH); // Attiva Relè 2
else
digitalWrite (10, LOW); // Spegni Relè 2
delay (1000);
Serial.print("Temp: ");
Serial.print(t);
Serial.print("C, Umid: ");
Serial.print(h);
Serial.println("%");
// impostare cursore sulla prima riga:
lcd.setCursor(21,1);
lcd.print("temperatura:");
lcd.print(t);
lcd.print("C");
// imposta cursore sulla seconda riga:
lcd.setCursor(21,0);
lcd.print("Umidita:");
lcd.print(h);
lcd.print("%");
for (int positionCounter = 0; positionCounter < 21; positionCounter++) {
// scroll one position left:
lcd.scrollDisplayLeft();
// wait a bit:
delay(500);
}
// scroll 29 positions (string length + display length) to the right
// to move it offscreen right:
for (int positionCounter = 0; positionCounter < 25; positionCounter++) {
// scroll one position right:
lcd.scrollDisplayRight();
// wait a bit:
delay(500);
}
// scroll 16 positions (display length + string length) to the left
// to move it back to center:
for (int positionCounter = 0; positionCounter < 21; positionCounter++) {
// scroll one position left:
lcd.scrollDisplayLeft();
// wait a bit:
delay(500);
}
val = digitalRead(9); //LEGGO IL VALORE DEL PIN 9
Serial.println(x++); //INVIO ALLA SERIALE UN MESSAGGIO
//---------------------------------------------------------------
//GESTIONE TIMEOUT: DOPO 2 SECONDI CAMBIO LO STATO DEL LED
//---------------------------------------------------------------
if ((millis() - STARTINGTIME) > TIMEOUT) {
if (val == HIGH) {
digitalWrite(9, LOW);//SPENGO IL LED
STARTINGTIME = millis(); //RIAVVIO IL TIMER
} else {
digitalWrite(9, HIGH);//ACCENDO IL LED
STARTINGTIME = millis(); //RIAVVIO IL TIMER
}
}
}
void alarm(){
tone(8,1000,900); // Imposta tono acustico su PIN 3(pin,frequenza suono,lunghezza suono)
delay(1000); // Aspetta per 1 secondi
tone(8,500,900); // Imposta tono acustico su PIN 3
delay(1000); // Aspetta per 1 secondi
tone(8,1000,900); // Imposta tono acustico su PIN 3
delay(1000); // Aspetta per 1 secondi
tone(8,500,900); // Imposta tono acustico su PIN 3
delay(1000); // Aspetta per 1 secondi
}
//void flash() {
// digitalWrite(13, HIGH); // Imposta il LED su ON
//delay(100); // Aspetta per 1 secondo
// digitalWrite(13, LOW); // Impostiamo il LED su OFF
// delay(100); // Aspetta per 1 secondo
//digitalWrite(13, HIGH); // Imposta il LED su ON
// delay(100); // Aspetta per 1 secondo
// digitalWrite(13, LOW); // Impostiamo il LED su OFF
// delay(100); // Aspetta per 1 secondo
// digitalWrite(13, HIGH); // Imposta il LED su ON
// delay(100); // Aspetta per 1 secondo
//digitalWrite(13, LOW); // Impostiamo il LED su OFF
// delay(100); // Aspetta per 1 secondo
//digitalWrite(13, HIGH); // Imposta il LED su ON
// delay(100); // Aspetta per 1 secondo
// digitalWrite(13, LOW); // Impostiamo il LED su OFF
// delay(100); // Aspetta per 1 secondo
//digitalWrite(13, HIGH); // Imposta il LED su ON
/// delay(100); // Aspetta per 1 secondo
// digitalWrite(13, LOW); // Impostiamo il LED su OFF
// delay(100); // Aspetta per 1 secondo
//digitalWrite(13, HIGH); // Imposta il LED su ON
//delay(3000); // Aspetta per 1 secondo
//digitalWrite(13, LOW); // Impostiamo il LED su OFF
// delay(100); // Aspetta per 1 secondo
//}
>antonio5690: ti ricordo che in conformità al regolamento, punto 7, devi editare il tuo post (quindi NON scrivendo un nuovo post, ma utilizzando il bottone More -> Modify che si trova in basso a destra del tuo post) e racchiudere il codice all'interno dei tag CODE (... sono quelli che in edit inserisce il bottone con icona fatta così: </>, tutto a sinistra).
In pratica, tutto il tuo codice dovrà trovarsi racchiuso tra due tag: [code] _il _tuo_ codice_ [/code]
così da non venire interpretato e non dare adito alla formazione di caratteri indesiderati o cattiva formattazione del testo. Grazie.
Guglielmo
dove dichiari "int rele = 10;" hai messo una sola "/" ....o la togli o ne metti una seconda;
poi alla fine del loop() manca una "}"
ciao
PS: per cortesia fai quanto chiesto da Guglielmo ed inserisci il codice tra i tag code
grazie