In questo codice ho la variabile subnet che passando nel case 2 me la setta correttamente ma nel case 3 mi azzera subnet[0] anziche' 255.
#include <SPI.h>
#include <Ethernet.h>
#include <SD.h>
byte ip[] = { 192, 168, 1, 177 }; //Indirizzo scheda di rete
byte gateway[] = { 192, 168, 1, 1 }; //Indirizzo Gateway
byte subnet[] = { 255, 255, 255, 0 }; //Subnet Mask Maschera di rete
byte DNS[] = { 8, 8, 8, 8 }; //DNS opendns
static uint8_t mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; //MAC Address
const int SD_CS = 4; // pin 4 is the SPI select pin for the SDcard
const int ETHER_CS = 10; // pin 10 is the SPI select pin for the Ethernet
void ReadNetwork() {
/* contenuto del file
12:34:56:78:90:AB
192.168.1.43
255.255.255.0
192.168.1.1
8.8.8.8
*/
pinMode(ETHER_CS,OUTPUT);
digitalWrite(ETHER_CS,HIGH);
if(!SD.begin(4)) Serial.println("SD fail read network.ini");
else Serial.println("SD ok");
File fh = SD.open("network.ini",FILE_READ);
char netBuffer[32];
if(!fh)
{
Serial.println("SD open fail");
return;
}
else Serial.println("ho aperto network.ini");
int chPos = 0;
int lineNo = 0;
while(fh.available())
{
char ch = fh.read();
if(ch == '\r') { //uso lo spazio (\b) per delimitare stringa
chPos = 0;
switch(lineNo) {
case 0:
// Serial.print("mac ");
sscanf(netBuffer,"%2x:%2x:%2x:%2x:%2x:%2x",&mac[0],&mac[1],&mac[2],&mac[3],&mac[4],&mac[5]);
Serial.print ("\r\nAnalisi Variabili Netmask case 0\r\n");
Serial.println(subnet[0]);
Serial.println(subnet[1]);
Serial.println(subnet[2]);
Serial.println(subnet[3]);
break;
case 1:
// Serial.print("ip ");
sscanf(netBuffer,"%u.%u.%u.%u",&ip[0],&ip[1],&ip[2],&ip[3]);
Serial.print ("\r\nAnalisi Variabili Netmask case 1\r\n");
Serial.println(subnet[0]);
Serial.println(subnet[1]);
Serial.println(subnet[2]);
Serial.println(subnet[3]);
break;
case 2:
// Serial.print("netmask ");
sscanf(netBuffer,"%u.%u.%u.%u",&subnet[0],&subnet[1],&subnet[2],&subnet[3]);
Serial.print ("\r\nAnalisi Variabili Netmask case 2\r\n");
Serial.println(subnet[0]);
Serial.println(subnet[1]);
Serial.println(subnet[2]);
Serial.println(subnet[3]);
break;
case 3:
// Serial.print("gateway ");
sscanf(netBuffer,"%u.%u.%u.%u",&gateway[0],&gateway[1],&gateway[2],&gateway[3]);
Serial.print ("\r\nAnalisi Variabili Netmask case 3\r\n");
Serial.println(subnet[0]);
Serial.println(subnet[1]);
Serial.println(subnet[2]);
Serial.println(subnet[3]);
break;
case 4:
// Serial.print("DNS ");
sscanf(netBuffer,"%u.%u.%u.%u",&DNS[0],&DNS[1],&DNS[2],&DNS[3]);
Serial.print ("\r\nAnalisi Variabili Netmask case 4\r\n");
Serial.println(subnet[0]);
Serial.println(subnet[1]);
Serial.println(subnet[2]);
Serial.println(subnet[3]);
break;
}
Serial.println(lineNo); //Visualizza numero riga
Serial.println(netBuffer); //Visualizza contenuto riga
lineNo++; //Incrementa riga per il case
}
else if(ch == '\n') {
// do nothing
}
else if(chPos < 31) {
netBuffer[chPos] = ch;
chPos++;
netBuffer[chPos] = 0;
}
}
Serial.print ("\r\nAnalisi Variabili Netmask passo 4\r\n");
Serial.println(subnet[0]);
Serial.println(subnet[1]);
Serial.println(subnet[2]);
Serial.println(subnet[3]);
fh.close(); //Chiude il file
Serial.print ("\r\nAnalisi Variabili Netmask passo 5\r\n");
Serial.println(subnet[0]);
Serial.println(subnet[1]);
Serial.println(subnet[2]);
Serial.println(subnet[3]);
int x;
Serial.print("\r\nmac ");
for(x=0;x<6;x++) {
Serial.print(mac[x],HEX);
if(x<5) Serial.print(":");
}
Serial.print("\r\nip ");
for(x=0;x<4;x++) {
Serial.print(ip[x],DEC);
if(x<3) Serial.print(".");
}
Serial.print ("\r\nAnalisi Variabili Netmask \r\n");
Serial.println(subnet[0]);
Serial.println(subnet[1]);
Serial.println(subnet[2]);
Serial.println(subnet[3]);
Serial.println ("Compilazione Netmask");
Serial.println (x);
Serial.print("\r\nnetmask ");
for(x=0;x<4;x++) {
Serial.print(subnet[x],DEC);
if(x<3) Serial.print(".");
}
Serial.print("\r\ngateway ");
for(x=0;x<4;x++) {
Serial.print(gateway[x],DEC);
if(x<3) Serial.print(".");
}
Serial.print("\r\ndns ");
for(x=0;x<4;x++) {
Serial.print(DNS[x],DEC);
if(x<3) Serial.print(".");
}
Serial.println(Ethernet.localIP());
Serial.println(Ethernet.subnetMask());
Serial.println(Ethernet.gatewayIP());
Serial.println(Ethernet.dnsServerIP());
Serial.println("\r\nStarting ethernet");
Ethernet.begin(mac,ip,DNS,gateway,subnet);
digitalWrite(10,HIGH);
Serial.println(Ethernet.localIP());
Serial.println(Ethernet.subnetMask());
Serial.println(Ethernet.gatewayIP());
Serial.println(Ethernet.dnsServerIP());
}
void setup(){
Serial.begin(57600);
//ReadConfig();
ReadNetwork();
}
void loop(){
}
Chi sa dirmi il perche?