Salve a tutti, mi presento, Sono Alessio Scattareggia e sono nuovo ad aprire topic nel forum, mentre leggo sempre molti thread. Ho la necessità di mettere un tastierino per immettere un codice alla porta di casa mia per garantirne la sicurezza, ho un Arduino Uno e l'ethernet shield con il chip Wiznet. Ho un server con una pagina php che recepisce la richiesta POST e manda un'altra richiesta ad un relè tcp. Ora, su acquisire il codice e conservarlo in una variabile ci sono, non riesco correttamente a mandare la richiesta, perchè se mando l'url dal browser la porta si apre come dovrebbe, quindi il problema è arduino. Metto il codice riuscireste a dirmi cosa sto sbagliando?
premetto che il ciclo for ho dovuto farlo con gli if e il goto perchè avevo il compilatore buggato e un po' di fretta, lo cambierò poi che adesso ho risolto, intanto il caricamento dell'array funziona.
Ho oscurato gli ip e le porte perché non essendo mai in quella casa sto sviluppando su un arduino di test con il server pubblicato in rete, quindi evito di farlo in giro. Anche se in questo momento l'apriportone è scollegato dal relè.
grazie mille se lo farete, da quando ho iniziato con arduino siete stati la mia salvezza in più occasioni sono sicuro che lo sarete pure stavolta.
#include <SPI.h>
#include <Ethernet.h>
#include <Keypad.h>
#include<EthernetUdp.h>
//-----ETHERNET-CONFIG-START--------
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; //Creao un array di byte per specificare il mac address
IPAddress ip( 192, 168, 4, 161); //creo un array di byte per specificare l'indirizzo ip
IPAddress mydns(8, 8, 8, 8); //dns
IPAddress gateway( 192, 168, 4, 250); // Internet access via router
IPAddress subnet( 255, 255, 255, 0); // Subnet mask
//-----TCP-CONFIG-------------------
IPAddress ipserver( xxx, xxx, xxx, xxx); //server tcp da raggiungere
IPAddress clientport (xxxx); //porta personalizzata client
IPAddress serverport (xxxx); //porta personalizzata server
EthernetServer ArduinoServer(serverport); //creo un oggetto server che rimane in ascolto sulla porta specificata
EthernetClient client; //inizializazione tcp client
//------UDP-CONFIG-----
char packetBuffer[UDP_TX_PACKET_MAX_SIZE]; // buffer to hold incoming packet,
char ReplyBuffer[] = "acknowledged"; // buffer for a string to send back
EthernetUDP Udp; //dichiarazione udp
unsigned int localPort = 8888; // udp port to listen on
//-----ETHERNET-CONFIG-END------------
//-----inizializzazione tastiera------
int i;
char V[6];
const byte ROWS = 4; //four rows
const byte COLS = 4; //four columns
//define the cymbols on the buttons of the keypads
char hexaKeys[ROWS][COLS] =
{
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
byte rowPins[ROWS] = {8, 7, 6, 5}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {4, 3, 2, 1}; //connect to the column pinouts of the keypad
Keypad customKeypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS); //initialize an instance of class NewKeypad
//----------fine tastiera------
char cc;
int c;
void setup()
{
Serial.begin(9600); //inizializza con la velocità seriale
Ethernet.begin(mac, ip, mydns, gateway, subnet); //inizializza lo shield con il mac e l'ip
ArduinoServer.begin(); //inizializza l'oggetto server
delay(1000); //tempi tecnici per far andar su l'interfaccia
Udp.begin(localPort); // start UDP
pinMode(9, OUTPUT);
}
void loop()
{
principale();
function();
}
void principale()
{
delay(1000); // give the Ethernet shield a second to initialize:
Serial.print("in attesa di pin ");
Serial.println("...");
int i = 0; //indice ciclo for
fort:
if (i < 5) //massimo di caratteri inseribili
{
inizio:
char customKey = customKeypad.getKey(); //prende l'input carattere
if (customKey) //carica in numero in un array di 5
{
V[i] = customKey;
Serial.print("I ");
Serial.println(i);
Serial.print("V ");
Serial.println(V);
}
else goto inizio;
i++;
delay(500);
goto fort;
}
else
{
char Vstring = char(V); //carica l'array in una variabile
Serial.print("il codice inserito è: ");
Serial.print(V); //riporta in seriale il numero
if (client.connect(ipserver, clientport)) //controlla se il server remoto è presente
{
Serial.println("connected to ");
Serial.println(client.remoteIP()); //stampa l'ip a seriale
client.print("POST xxx.xxx.xxx.xxx:xxx/convalida-porta.php?codicelett=");
client.print(Vstring); //manda una richiesta con il codice inserito al server
client.print(" HTTP/1.0 \n");
client.println("Connection: close");
client.println();
delay(1000);
}
else Serial.println("connection failed"); // if you didn't get a connection to the server:
}
}
void function()
{
Serial.println("sono dentro");
c=client.read();
Serial.println(c);
}
}