Pages: [1]   Go Down
Author Topic: problema arduino web client  (Read 1283 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Full Member
***
Karma: 0
Posts: 112
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Possibile che nessuno sappia spiegarmi dove sbaglio?
Devo configurare un arduino client che mi accenda un led su un arduino server in ethernet:
il programma che ho scritto funziona perfettamente ma vorrei che non facesse una connessione ogni loop quando il pulsante è LOW, mentre quando è HIGH si connette una volta e basta......dov'è l'errore????


Code:
   
 #include <SPI.h>
#include <Ethernet.h>
#include <Client.h>
// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:

// il MAC Address lo posso inventare
byte mac[] = {  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192,168,0,108 };
byte server[] = { 192,168,0,107 }; // mio computer

Client client(server, 80);
// set pin numbers:
const int buttonPin = 2;     // the number of the pushbutton pin
const int ledPin =  7;      // the number of the LED pin

// variables will change:
int buttonState = 0;     
int buttonStateOld = 0; // variable for reading the pushbutton status


// Initialize the Ethernet client library
// with the IP address and port of the server
// that you want to connect to (port 80 is default for HTTP):


void setup() {

 
  // initialize the LED pin as an output:
  pinMode(ledPin, OUTPUT);     
  // initialize the pushbutton pin as an input:
  pinMode(buttonPin, INPUT); 
    // start the Ethernet connection:
 Ethernet.begin(mac, ip);
  // inizializza la libreria seriale:
  Serial.begin(9600);
  //inizializza la Ethernet shield, dopo un secondo:
  delay(1000);
  Serial.println("connecting...");
  // se ottiene una connessione, stampa via seriale:
  if (client.connect())
  Serial.println("connected");
   
else {
  // se non si connette al server:
  Serial.println("connection failed");
  }
}

void loop()
{buttonStateOld=buttonState;

 buttonState = digitalRead(buttonPin);


  // check if the pushbutton is pressed.
  // if it is, the buttonState is HIGH:
  if (buttonState != buttonStateOld)
 {
      if (buttonState == HIGH){
       client.connect();//connette il client
    Serial.println("connesso"); //stampa su seriale;
   client.println("POST /led=1");//invia il comando "accendi led";
   client.println();
   Serial.println("led acces");
 client.stop();       
    // turn LED on:   
     digitalWrite(ledPin, HIGH); 
     
      } }
  else
   
      if (buttonState == LOW){
      !client.connect();
    Serial.println("connesso"); //stampa su seriale;
   client.println("POST /led=0");//invia il comando "spegni led";
   
   client.println();
   Serial.println("post led spento");
 client.stop();
    // turn LED off:
    digitalWrite(ledPin, LOW);// accendo un led spia su client;
     Serial.println("led spento");//stampa su seriale;
   
}delay (2000);//end delay before loop starts again
}
Logged

0
Offline Offline
Edison Member
*
Karma: 24
Posts: 2319
Have you mooed today?
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ciao, scusa se mi permetto, ma per riuscire a leggere 'sto codice me lo son dovuto copiare e identare...
[OT]sarò io fissato con 'ste robe..[/OT]

Qui riporto il loop identato in maniera leggibile (naturalmente a mio avviso):
Code:
void loop() {
buttonStateOld=buttonState;
buttonState = digitalRead(buttonPin);


   // check if the pushbutton is pressed.
   // if it is, the buttonState is HIGH:
   if (buttonState != buttonStateOld) {
if (buttonState == HIGH){
client.connect();//connette il client
Serial.println("connesso"); //stampa su seriale;
client.println("POST /led=1");//invia il comando "accendi led";
client.println();
Serial.println("led acces");
client.stop();      
// turn LED on:    
digitalWrite(ledPin, HIGH);  
}
} else if (buttonState == LOW){
!client.connect();
Serial.println("connesso"); //stampa su seriale;
client.println("POST /led=0");//invia il comando "spegni led";
  
client.println();
Serial.println("post led spento");
client.stop();
// turn LED off:
digitalWrite(ledPin, LOW);// accendo un led spia su client;
Serial.println("led spento");//stampa su seriale;
}
delay (2000);//end delay before loop starts again
}

Ora che è identato, vedo chiaramente che l'anomalia che riscontri è dovuta a come gestisci l'if che fai sul buttonState.
L'else sul buttonState = LOW lo fai riferito alla condizione if errata...
« Last Edit: May 12, 2011, 11:25:28 am by pitusso » Logged

Offline Offline
Full Member
***
Karma: 0
Posts: 112
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

scusami pitusso della forma del codice ma premetto che sono nuovissimo di arduino....e anche di programmazione;
se sono riuscito a fare qualcosa è grazie a voi senior!!!!
infatti la prima parte del codice è giusta e funziona correttamente, il problema è che non riesco a capire come gestire l'if dell' else nella seconda parte del loop!! ......hai qualche esempio a portata di mano??? grazie
Logged

0
Offline Offline
Edison Member
*
Karma: 24
Posts: 2319
Have you mooed today?
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
......hai qualche esempio a portata di mano??

..certo:
http://www.arduino.cc/en/Reference/Else
..ma le istruzioni if..else le trovi praticamente in ogni linguaggio di programmazione.
Logged

Offline Offline
Full Member
***
Karma: 0
Posts: 112
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Grazie Pitusso: devo ringraziare te e Lesto se sono riuscito nell' impresa;
posto il codice magari potrebbe servire a qualche neofita come me che è impazzito per parecchi giorni prima di trovare la soluzione; purtroppo non ho trovato nessuno disposto a fornirmi la soluzione ma questo ha fatto sì che imparassi un po' di programmazione......grazie ancora amici del forum, questo per me è molto gratificante proprio perchè qualcuno, quando ho posto i primi quesiti, mi ha subito "abbandonato" al mio progetto. Chi come me si avvicina a questo splendido mondo dovrebbe essere supportato e non demoralizzato, anche se di C++ non ha mai sentito parlare (ma questo non è un peccato)!!!! Perciò metterò a disposizione il mio seppur semplice lavoro in quanto per prima cosa non ci sono esempi a riguardo, e poi penso che anche i progetti più semplici dovrebbero avere la giusta collocazione all'interno del forum(è da qui che si parte!!!!).
Code:
#include <SPI.h>
#include <Ethernet.h>
#include <Client.h>
// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:

// il MAC Address lo posso inventare
byte mac[] = {  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192,168,0,108 };
byte server[] = { 192,168,0,107 }; // mio computer

Client client(server, 80);
// set pin numbers:
const int buttonPin = 2;     // the number of the pushbutton pin
const int ledPin =  7;      // the number of the LED pin

// variables will change:
int buttonState = 0;     
int buttonStateOld = 0; // variable for reading the pushbutton status


// Initialize the Ethernet client library
// with the IP address and port of the server
// that you want to connect to (port 80 is default for HTTP):


void setup() {

 
  // initialize the LED pin as an output:
  pinMode(ledPin, OUTPUT);     
  // initialize the pushbutton pin as an input:
  pinMode(buttonPin, INPUT); 
    // start the Ethernet connection:
 Ethernet.begin(mac, ip);
  // inizializza la libreria seriale:
  Serial.begin(9600);
  //inizializza la Ethernet shield, dopo un secondo:
  delay(1000);
  Serial.println("connecting...");
  // se ottiene una connessione, stampa via seriale:
  if (client.connect())
  Serial.println("connected");
   
else {
  // se non si connette al server:
  Serial.println("connection failed");
  }
}

void loop()  {
        buttonStateOld=buttonState;
        buttonState = digitalRead(buttonPin);
 
    // check if the pushbutton is pressed.
    // if it is, the buttonState is HIGH:
    if (buttonState != buttonStateOld)  {
                  if (buttonState == HIGH){
                           client.connect();//connette il client
                           Serial.println("connesso"); //stampa su seriale;
                           client.println("POST /led=1");//invia il            comando "accendi led";
                           client.println();
                           Serial.println("led acces");
                           digitalWrite(ledPin, HIGH); // turn LED on:   
                           client.stop();}
                    }
           {if (buttonState != buttonStateOld)
           {if (buttonState == LOW){
            client.connect();
            Serial.println("connesso"); //stampa su seriale;
            client.println("POST /led=0");//invia il comando "spegni led";
            client.println();
            Serial.println("post led spento");
            client.stop();
            // turn LED off:
            digitalWrite(ledPin, LOW);// accendo un led spia su client;
            Serial.println("led spento");//stampa su seriale;
   
        }
       }
      }
          delay (500);//end delay before loop starts again
}

Ti sarei grato, se il codice contenesse qualche errore, se tu potessi verificarlo in modo da migliorarlo e renderlo utilizzabile!!! Grazie ancora,Fabio.
 
Logged

Offline Offline
Full Member
***
Karma: 0
Posts: 112
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Il codice funziona perfettamente, va bene così,dimentico qualcosa, o potrebbe essere migliorato? si accettano critiche e consigli!!!  smiley-mr-green smiley-grin
Logged

Pages: [1]   Go Up
Jump to: