Buonasera e buon anno al forum,
Il webserver è parte di un progetto che mi permette di visualizzare con un browser la temperatura misurata con un termistore.
il webserver ha un comportamento anomalo. Quando carico il programma tramite l'IDE tutto funziona regolarmente. Quando spengo Arduino (togliendo l'alimentazione) e lo riaccendo con un alimentatore esterno ( scollegandolo dal pc) , il webserver non riparte. Se, infine, dopo averlo riacceso collegandolo al pc, provo ad analizzare il codice con il serial monitor per il debug, il webserver riparte.
Penso di poter escludere problemi hw o di configurazione di rete.
Vi ringrazio anticipatamente per la disponibilità e resto in attesa di chiarimenti o per ulteriori info.
Hardware: Arduino UNO + Ethernet Shield Rev. 3
Software (solo le impostazioni iniziali + setup() perchè credo sia qui il problema! ) :
#include <SPI.h>
#include <Ethernet.h>
#include <SD.h>
const int REQ_BUF_SZ = 40; // Request Buffer Size
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; // inserisco il MAC address
byte ip[] = { 192, 168, 1, 177}; // inserisco l'indirizzo IP della rete.
byte subnet[] = { 255, 255, 255, 0 }; // subnet
byte gateway [] = { 192, 168, 1, 254}; // il router
byte dns_server[] = { 8, 8, 8, 8}; // dns server
EthernetServer server(80);
File webFile; // gestisce i file sulla SD CARD
char HTTP_req[REQ_BUF_SZ] = {0}; // HTTP request
char req_index = 0; // l'indice al buffer HTTP_req
const int SERIESRESISTOR = 4700; // il valore della resistenza
const int THERMISTORPIN = A0; // il pin A0 dove è connesso il sensore
const int THERMISTORNOMINAL = 4700; // la resistenza del termistore a 25 gradi C
const int TEMPERATURENOMINAL = 25; // temperatura nominale (almost always 25 C)
const int BCOEFFICIENT = 3950; // il coefficiente beta del termistore (usually 3000-4000)
const int NUMSAMPLES = 5; // numero di campioni presi per ogni misura
int samples[NUMSAMPLES]; // array contenente il numero di campioni prelevati
//Scaffold
#define DEBUG 1
/*
---------------------------------------------------------------------------------------------------------
CONFIGURAZIONE INIZIALE
---------------------------------------------------------------------------------------------------------
*/
void setup()
{
analogReference(EXTERNAL);
// disabilito Ethernet chip
pinMode(10, OUTPUT);
digitalWrite(10, HIGH);
#ifdef DEBUG
Serial.begin(9600); // Inizializzo la comunicazione seriale per il Debugging.
#endif
// Inizializzo l'SD Card
#ifdef DEBUG
Serial.println(F("Inizializzo l'SD card...")); // Debug
#endif
if (!SD.begin(4)) {
#ifdef DEBUG
Serial.println(F("ERRORE - Inizializzazione dell'SD Card fallita!")); // Debug
#endif
return; // Inizializzazione fallita
}
#ifdef DEBUG
Serial.println(F("SUCCESSO - SD card inizializzata.")); // Debug
Serial.println(); // Debug
#endif
// controllo l'esistenza del file "index.htm" all'interno dell'SD Card
if (!SD.exists("index.htm")) {
#ifdef DEBUG
Serial.println(F("ERRORE - Non trovo il file <<index.htm>>!"));
#endif
return; // non trovo il file "index.htm"
}
#ifdef DEBUG
Serial.println(F("SUCCESSO - File <<index.htm>> trovato.")); // Debug
Serial.println(); // Debug
#endif
Ethernet.begin(mac, ip, dns_server, gateway, subnet); // inizializzo la libreria ethernet con le impostazioni di rete
server.begin(); // inizializzo il server web.
#ifdef DEBUG
Serial.println(F("Il server e' AVVIATO all'indirizzo: ")); // Debug
Serial.print(F("Local IP: "));
Serial.println(Ethernet.localIP()); // Debug.
Serial.print(F("SubnetMask: "));
Serial.println(Ethernet.subnetMask());
Serial.print(F("Gateway: "));
Serial.println(Ethernet.gatewayIP());
Serial.print(F("DNS Server: "));
Serial.println(Ethernet.dnsServerIP());
Serial.println(); // Debug
#endif
}
/*
---------------------------------------------------------------------------------------------------------
CICLO
---------------------------------------------------------------------------------------------------------
*/
void loop()
{
...
}