Go Down

Topic: Invio Comandi tra Client e Server (Read 2 times) previous topic - next topic

lollo1100

Lesto ho fatto come dici tu sono andato su Telnet all'indirizzo IP specificato x il server se faccio 1 e 0 se li digito il led si accende e si spegne se digito "ON " oppure "OFF" con il codice di ON e OFF del server non va guarda il codice sarebbe questo

Code: [Select]

#include <SPI.h>                               //  Importa Libreria SPI
#include <Ethernet.h>                          //  Importa Libreria
//  Ethernet

#define LED 7                                  //  Porta digitale 7 LED

char comando[3] ;

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };        //  MAC Ethernet Shield del Server

byte ip[] = { 10, 10, 11, 17 };                             //  IP Arduino Server

EthernetServer server = EthernetServer(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()
{
  while ( client.connected() && server.available() >= 3 ) {                 //  Client-To-Serve                                                                                               
    char c = client.read();                                            //  Legge i Byte su Client
    comando[0] = c;
    c = client.read();                                            //  Legge i Byte su Client
    comando[1] = c;
    c = client.read();                                            //  Legge i Byte su Client
    comando[2] = c;
  }
  if ( comando[0] == 'O' && comando[1] == 'N' && comando[2] == ' ' )
    digitalWrite( LED, HIGH );
  if ( comando[0] == 'O' && comando[1] == 'F' && comando[2] == 'F' )
    digitalWrite( LED, LOW );
}



Sicuramente è xchè client.read legge un carattere alla volta :) però come faccio a fargli leggere i 3 caratteri??? Grazie sempre con telnet dal lato server

lesto

il fatto di leggere 3 caratteri lo stai già facendo, e si fa esattamente così, si legge un carattere alla volta e si riscostruisce.

Quote
se faccio 1 e 0 se li digito il led si accende e si spegne se digito "ON " oppure "OFF" con il codice di ON e OFF del server non va


se non hai ricaricato il codice sul server con le modifiche che abbiamo fatto fin'ora per legger 3 lettere ci credo che non funziona. Se avessi caricato il codice 1 e 0 non dovrebbero più funzionare.
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

lollo1100

Lesto come dicevo prima

ho caricato questo sketch su un arduino uno

Code: [Select]


#include <SPI.h>                               //  Importa Libreria SPI
#include <Ethernet.h>                          //  Importa Libreria
//  Ethernet

#define LED 7                                  //  Porta digitale 7 LED

char comando[3] ;

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };        //  MAC Ethernet Shield del Server

byte ip[] = { 10, 10, 11, 17 };                             //  IP Arduino Server

EthernetServer server = EthernetServer(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()
{
  while ( client.connected() && server.available() >= 3 ) {                 //  Client-To-Serve                                                                                               
    char c = client.read();                                            //  Legge i Byte su Client
    comando[0] = c;
    c = client.read();                                            //  Legge i Byte su Client
    comando[1] = c;
    c = client.read();                                            //  Legge i Byte su Client
    comando[2] = c;
  }
  if ( comando[0] == 'O' && comando[1] == 'N' && comando[2] == ' ' )
    digitalWrite( LED, HIGH );
  if ( comando[0] == 'O' && comando[1] == 'F' && comando[2] == 'F' )
    digitalWrite( LED, LOW );
}



poi sono andato su putty ho aperto la pagina telnet dell ip 10.10.11.17 ok ? e se faccio 1 e 0 ok il led si accende e si spegne se scrivo ON   oppure OFF non succede nulla :) dove sbaglio?

lesto

sbagli che NON hai caricato il codice sull'arduino, altrimenti 1 e 0 NON funzionerebbero.
Poi magari on funzionerebbero nemmeno "ON" e "OFF" (ma dubito), ma sicuramente 0 e 1 non devono funizonare..

cioè mi spieghi se hai veramente caricato quel codice come mai si accende quando scrivi 0 e 1? arduino non se lo inventa certo dal nulla :)

l'unica spiegazione è che sia rimasto sopra il vecchio codice.

Suggerimento: quando carichi il codice togli l'ethernet shield, se il problema persiste fai il reset a mano
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

lollo1100

se carico questo codice su arduino

Code: [Select]


#include <SPI.h>                                              //  IMPORTA LIBRERIA SPI
#include <Ethernet.h>                                         //  IMPORTA LIBRERIA ETHERNET

#define LED 7                                                 //  PORTA DIGITALE 7 LED

//  PARAMETRI ETHERNET

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };          //  MAC ETHERNET SHIELD DEL SERVER
byte ip[] = { 10, 10, 11, 17 };                               //  IP ARDUINO SERVER
byte gateway[] = { 10, 10, 11, 1 };
byte subnet[] = { 255, 255, 255, 0 };                             

//  ALTRE VARIABILI

#define dimCmd 8      //  LUNGHEZZA DEL PIù LUNGO COMANDO
int cmd[dimCmd];      //  ARRAY DI COMANDO
int bitRicevuti = 0;  //  NUMERO DI BIT RICEVUTI

boolean connectState = false;                  //  USATA PER VERIFICARE CONNESSIONE CLIENT TO SERVER

unsigned long tempoDaUltimaAzione;             //  TEMPO IN ms DALL'ULTIMA ATTIVITà
unsigned long tempoMassimoPermesso = 300000;   //  5 MINUTI

EthernetServer server = EthernetServer(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();
  delay(150);
}
void loop()
{
  if (server.available() && client.connected()) {  //  BYTE SUL SERVER & CONNECTED

    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 BYE = 0 LED OFF
        digitalWrite( LED, LOW );
  }
}


vado su tera term e digito 1 poi 0 il led si accende e si spegne

se carico l'altro quello del messaggio precedente con ON E OFF e provo da tera term a digitare ON O OFF IL LED  non si accende...vorrei capire perchè

Go Up