Paso 2: Programar el Arduino
conectar la placa a la pc y cargar el código para tener acceso a internet#include < EEPROM.h >
#include < Servo.h >
#include < Wire.h >
#include < SERVER328.h >
#include < SPI.h >
#include < Ethernet.h >
Variables configurables del usuario
byte useDhcp = true;
useDns bytes = true;
mac de bytes [] = {0xXX, 0xXX, 0xXX, 0xXX, 0xXX, 0xXX};
Char [] serverName = "us01.proxy.SERVER.org"; Sólo si useDns es cierto
unsigned int serverPort = 5353; Puede establecerse en 53 o 5353
byte statusLedPin = 8;
Configurable por el usuario clave, esto se utiliza para autenticar con el servidor proxy
Esto se comprueba con la EEPROM en el arranque y escrito si es necesario
El proxy server retreives la clave de la EEPROM
clave de bytes [] = {0xXX, 0xXX, 0xXX, 0xXX,
0xXX, 0xXX, 0xXX, 0xXX,
0xXX, 0xXX, 0xXX, 0xXX,
0xXX, 0xXX, 0xXX, 0xXX};
Otras variables necesarias
datos del octeto [257];
dataLength bytes;
hexStage de bytes;
lastInstruction largo sin signo = 0;
lastRefresh largo sin signo = 0;
etapa de byte = 0;
Declarar objeto de cliente
Cliente EthernetClient;
void setup()
{
Carga de ajustes preestablecidos
SERVER.loadPresets();
Configurar pin de estado LED
SERVER.setStatusLedPin(statusLedPin);
SERVER.setStatusLed(1); Inicialización
Compruebe el encabezado de la EEPROM y compruebe si la clave es correcta
Esto es para asegurar que la clave no se borra de la EEPROM
if(EEPROM.Read(0)! = '#')
{
EEPROM.write (0, ' #');
}
if(EEPROM.Read(1)! = 0)
{
EEPROM.write (1, 0);
}
if(EEPROM.Read(2)! = '#')
{
EEPROM.write (2, ' #');
}
if(EEPROM.Read(160)! = '#')
{
EEPROM.write (160, ' #');
}
para (byte i = 0; i < 16; i ++)
{
Si (EEPROM.read(161 + i)! = key[i])
{
EEPROM.write (161 + i, key[i]);
}
}
if(EEPROM.Read(177)! = '#')
{
EEPROM.write (177, ' #');
}
Iniciar red e intente conectar con el servidor proxy
SERVER.setStatusLed(2); Configuración de la red
if(useDhcp)
{
if (!. Ethernet.Begin(Mac))
{
SERVER.setStatusLed (2, false, 10000);
SERVER.reset();
}
}
Delay(1000);
SERVER.setStatusLed(3); Conectar al servidor
Si (useDns & &! Client.Connect (nombre del servidor, serverPort))
{
SERVER.setStatusLed (3, false, 10000);
SERVER.reset();
}
lastInstruction = millis();
}
void loop()
{
if(Client.Connected())
{
Lo que tenemos que hacer depende de que 'etapa' estamos en
Switch(Stage)
{
caso 0: / / Espere Inicio bytes
if(Client.Available())
{
char c = Client.read();
Si (c == '?')
{
etapa ++;
}
}
rotura;
caso 1: / / variables de reajuste
dataLength = 0;
hexStage = 0;
etapa ++;
rotura;
caso 2: / / bytes de instrucciones
if(Client.Available())
{
char c = Client.read();
Si (c == '?')
{
etapa = 1;
rotura;
}
else if (c == '\r' || c == '\n' || c == '.')
{
fase = 0;
rotura;
}
if(!hexStage)
{
datos [0] = SERVER.hexDecode(c) * 16;
}
otra cosa
{
datos [0] += SERVER.hexDecode(c);
}
hexStage =! hexStage;
if(!hexStage)
{
etapa ++;
}
}
rotura;
caso 3: / / bytes de longitud de datos
if(Client.Available())
{
char c = Client.read();
Si (c == '?')
{
etapa = 1;
rotura;
}
else if (c == '\r' || c == '\n' || c == '.')
{
fase = 0;
rotura;
}
if(!hexStage)
{
datos [1] = SERVER.hexDecode(c) * 16;
}
otra cosa
{
datos [1] += SERVER.hexDecode(c);
}
hexStage =! hexStage;
if(!hexStage)
{
etapa ++;
}
}
rotura;
caso 4: / / datos
if(Client.Available())
{
char c = Client.read();
Si (c == '?')
{
etapa = 1;
rotura;
}
else if (c == '\r' || c == '\n' || c == '.')
{
if(dataLength == Data[1])
{
etapa ++;
rotura;
}
otra cosa
{
fase = 0;
rotura;
}
}
if(!hexStage)
{
datos [2 + dataLength] = SERVER.hexDecode(c) * 16;
}
otra cosa
{
datos [2 + dataLength] += SERVER.hexDecode(c);
}
hexStage =! hexStage;
if(!hexStage)
{
dataLength ++;
}
}
rotura;
caso 5: / / ejecuta instrucciones y devuelve resultado
SERVER.instruction(data);
Client.Write('!');
para (int i = 0; i < datos [1] + 2; i ++)
{
Client.Write (SERVER.hexEncode (datos [i] / 16));
Client.Write (SERVER.hexEncode (datos [i] % 16));
}
Client.Write('\n');
lastInstruction = millis();
fase = 0;
rotura;
}
}
otra cosa
{
SERVER.setStatusLed(10);
SERVER.reset();
}
¿Se ha alcanzado el tiempo de espera de instrucción?
if(Millis() - lastInstruction > 30000)
{
Client.Flush();
Client.STOP();
SERVER.setStatusLed(9);
SERVER.reset();
}
Proceso actualiza cada 50ms
if(Millis() - lastRefresh > = 50)
{
SERVER.pinTimers();
SERVER.shiftRegisterTimers();
SERVER.shiftRegisters();
lastRefresh = millis();
}
Verifique si se ha solicitado la reposición
SERVER.checkReset();
}