Buon pomeriggio a tutti, ho un problema di estetica credo.
Vorrei scambiare comandi tra un Arduino Uno che gioca il ruolo di Client e un Arduino Uno che gioca il ruolo di Server.
Il comando che il client deve inviare al server è il seguente: quando premo un pulsante collegato al mio Arduino Uno client questo deve dire al server
p.s. sono collegati tramite ethernet shield e si scambiano informazioni con il protocollo Telnet sulla porta 23 gli deve dire appunto che è stato premuto il
bottone e che quindi il server deve accendere il Led.
Il problema per ora l'ho risolto con le funzioni print() della libreria client scrivendo appunto print('1'); e print('0'); per accendere e spegnere il Led. Di seguito
posto i due sketch
Sketch del Client
#include <SPI.h> // Importa Libreria SPI
#include<Ethernet.h> // Importa Libreria Ethernet
#define BUTTON 7 // Porta digitale 7 Bottone ON
#define BUTTON2 6 // Porta digitale 6 Bottone OFF
int val = HIGH; // Valore Porta digitale 7
int val2 = HIGH; // Valore Porta digitale 6
int stato = HIGH; // Store stato Porta DGT 7
int stato2 = HIGH; // Store stato Porta DGT 6
byte mac[] = {
0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0x47 };
// MAC Ethernet Shield Client
IPAddress ip( 10, 10, 11, 16 ); // IP Arduino Client
IPAddress server( 10, 10, 11, 45); // IP Arduino Server
EthernetClient client; // Inizializza il Client
void setup() {
pinMode(BUTTON, INPUT); // Imposta PIN DGT 7 INPUT
pinMode(BUTTON2, INPUT); // Imposta PIN DGT 6 INPUT
Ethernet.begin( mac,ip ); // Inizializza Ethernet
Serial.begin(9600); // Inizializza COM3
}
void loop() {
val = digitalRead( BUTTON ); // val = BUTTON
val2 = digitalRead( BUTTON2 ); // val2 = BUTTON2
if( val == HIGH ); // Se val = HIGH FASE 0
else{
if ( val == LOW && val != stato){ // Se val = LOW
// & val diverso da stato
stato == LOW; // Imposta stato = LOW
delay(500); // Ritardo 500 mills
Serial.println("Connessione in corso attendere..."); // Stampa su COM3
// "Connessione in corso attendere..."
if (client.connect(server, 23)){ // Verifica conn. Client-To-Server
Serial.println("Connesso ON"); // Stampa su COM3 Connesso ON
client.print('1'); // Stampa '1' su CLIENT
client.stop(); // Chiudi connessione
stato = HIGH; // Imposta stato = HIGH
}
else{
Serial.println("Connessione ON fallita"); // Altrimenti
// Stampa su COM3 Connessione ON fallita
client.stop(); // Chiudi connessione
}
}
}
if( val2 == HIGH ); // Se val = HIGH FASE 0
else{
if ( val2 == LOW && val2 != stato2){ // Se val2 = LOW
// & val2 diverso da stato2
stato2 == LOW; // Imposta stato2 = LOW
delay(500); // Ritardo 500 mills
Serial.println("Connessione in corso attendere..."); // Stampa su COM3
// "Connessione in corso attendere..."
if (client.connect(server, 23)){
Serial.println("Connesso OFF"); // Stampa su COM3 Connesso OFF
client.print('0'); // Stampa '0' su CLIENT
client.stop(); // Chiudi connessione
stato2 = HIGH; // Imposta stato2 = HIGH
}
else{
Serial.println("Connessione OFF fallita"); // Altrimenti
// Stampa su COM3
// Connessione ON fallita
client.stop(); // Chiudi connessione
}
}
}
}
Sketch del Server
#include <SPI.h> // Importa Libreria SPI
#include <Ethernet.h> // Importa Libreria
// Ethernet
#define LED 7 // Porta digitale 7 LED
byte mac[] = {
0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; // MAC Ethernet Shield del
// Server
byte ip[] = {
10, 10, 11, 45}; // IP Arduino Server
EthernetServer server(23); // Telnet porta 23
EthernetClient client = 0; // Inizializza il Client
void setup()
{
pinMode( LED, OUTPUT ); // Imposta LED OUTPUT
Ethernet.begin(mac, ip); // Inizializza Ethernet
server.begin();
}
void loop()
{
if (server.available() && client.connected()) { // Byte sul Server
// &
// se è true
// Client-To-Server
char c = client.read(); // Legge i Byte su Client
if ( c == '1' ) // Se Byte = '1' LED ON
digitalWrite( LED, HIGH );
else
if ( c == '0' ) // Se Byte = '0' LED OFF
digitalWrite( LED, LOW );
}
}
Grazie!