Stap 2: Programmeren van de Arduino
de Raad sluit aan op de pc en het uploaden van de code om toegang te krijgen tot het internet#include < EEPROM.h >
#include < Servo.h >
#include < Wire.h >
#include < SERVER328.h >
#include < SPI.h >
#include < Ethernet.h >
Configureerbare gebruikersvariabelen
byte useDhcp = true;
byte useDns = true;
byte mac [] = {0xXX, 0xXX, 0xXX, 0xXX, 0xXX, 0xXX};
char [servernaam] = "us01.proxy.SERVER.org"; Alleen als useDns klopt
unsigned int serverPort = 5353; Kan worden ingesteld 53 of 5353
byte statusLedPin = 8;
Gebruiker configureerbaar sleutel, dit wordt gebruikt voor verificatie met de proxyserver
Dit is getoetst aan de EEPROM op boot en geschreven indien nodig
De proxy server haalt de sleutel uit de EEPROM
byte [key] = {0xXX, 0xXX, 0xXX, 0xXX,
0xXX, 0xXX, 0xXX, 0xXX,
0xXX, 0xXX, 0xXX, 0xXX,
0xXX, 0xXX, 0xXX, 0xXX};
Andere vereiste variabelen
bytegegevens [257];
byte dataLength;
byte hexStage;
unsigned long lastInstruction = 0;
unsigned long lastRefresh = 0;
byte fase = 0;
Client-object declareren
EthernetClient de klant;
VOID Setup
{
Voorinstellingen laden
SERVER.loadPresets();
Status LED pincode instellen
SERVER.setStatusLedPin(statusLedPin);
SERVER.setStatusLed(1); Initialisatie
Controleer de EEPROM kop en controleren om te zien als de sleutel klopt
Dit is om ervoor te zorgen dat de sleutel wordt niet gewist uit de 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, ' #');
}
voor (byte ik = 0; ik < 16; i ++)
{
Als (EEPROM.read(161 + i)! = key[i])
{
EEPROM.write (161 + i, key[i]);
}
}
if(EEPROM.Read(177)! = '#')
{
EEPROM.write (177, ' #');
}
Start netwerk en probeert te verbinden met proxyserver
SERVER.setStatusLed(2); Netwerkconfiguratie
if(useDhcp)
{
if (!. Ethernet.begin(Mac))
{
SERVER.setStatusLed (2, false, 10000);
SERVER.reset();
}
}
delay(1000);
SERVER.setStatusLed(3); Verbinding maken met server
Als (useDns & &! Client.Connect (servernaam, serverPort))
{
SERVER.setStatusLed (3, false, 10000);
SERVER.reset();
}
lastInstruction = millis();
}
void loop
{
if(client.Connected())
{
Wat we moeten doen is afhankelijk van welke 'on-stage' Wij staan
switch(stage)
{
geval van 0: / / Wait voor start byte
if(client.available())
{
char c = Client.read();
Als (c == '?')
{
fase ++;
}
}
breken;
geval 1: / / Reset variabelen
dataLength = 0;
hexStage = 0;
fase ++;
breken;
geval 2: / / instructie byte
if(client.available())
{
char c = Client.read();
Als (c == '?')
{
fase = 1;
breken;
}
anders als (c '\r' == || c == '\n' || c == '.')
{
fase = 0;
breken;
}
if(!hexStage)
{
gegevens [0] = SERVER.hexDecode(c) * 16;
}
anders
{
gegevens [0] += SERVER.hexDecode(c);
}
hexStage =! hexStage;
if(!hexStage)
{
fase ++;
}
}
breken;
Case 3: / / lengte gegevensbyte
if(client.available())
{
char c = Client.read();
Als (c == '?')
{
fase = 1;
breken;
}
anders als (c '\r' == || c == '\n' || c == '.')
{
fase = 0;
breken;
}
if(!hexStage)
{
gegevens [1] = SERVER.hexDecode(c) * 16;
}
anders
{
gegevens [1] += SERVER.hexDecode(c);
}
hexStage =! hexStage;
if(!hexStage)
{
fase ++;
}
}
breken;
geval 4: / / gegevens
if(client.available())
{
char c = Client.read();
Als (c == '?')
{
fase = 1;
breken;
}
anders als (c '\r' == || c == '\n' || c == '.')
{
if(dataLength == data[1])
{
fase ++;
breken;
}
anders
{
fase = 0;
breken;
}
}
if(!hexStage)
{
gegevens [2 + dataLength] = SERVER.hexDecode(c) * 16;
}
anders
{
gegevens [2 + dataLength] += SERVER.hexDecode(c);
}
hexStage =! hexStage;
if(!hexStage)
{
dataLength ++;
}
}
breken;
geval 5: / / instructie uitvoeren en resultaat
SERVER.instruction(data);
Client.write('!');
for (int i = 0; ik < data [1] + 2; i ++)
{
Client.write (SERVER.hexEncode (gegevens [i] / 16));
Client.write (SERVER.hexEncode (gegevens [i] % 16));
}
Client.write('\n');
lastInstruction = millis();
fase = 0;
breken;
}
}
anders
{
SERVER.setStatusLed(10);
SERVER.reset();
}
De instructie time-out is bereikt?
if(Millis() - lastInstruction > 30000)
{
Client.Flush();
Client.stop();
SERVER.setStatusLed(9);
SERVER.reset();
}
Proces worden vernieuwd elke 50 MS
if(Millis() - lastRefresh > = 50)
{
SERVER.pinTimers();
SERVER.shiftRegisterTimers();
SERVER.shiftRegisters();
lastRefresh = millis();
}
Controleren om te zien als reset heeft aangevraagd
SERVER.checkReset();
}