Pages: [1]   Go Down
Author Topic: Controllo LED mediante lettura di un array da web  (Read 388 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 1
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao a tutti.

Sto cercando di interfacciare Arduino con un server web.
Su web ho una pagina con una serie di dati:

3,2,0,0,4,5,1,0,0,0,0,6

che rappresentano due coppie di valori corrispondenti a due opzioni espresse da 6 utenti.
Quindi in questo esempio, l'utente 1 ha scelto le opzioni 3 e 2. L'utente 2 non ha scelto alcuna opzione (valori 0 e 0) eccetera.

Quello che voglio fare è collegare arduino come client a questa pagina (ora statica, in futuro dinamica) e accendere un led per segnalare se e quale degli utenti da 1 a 6 ha scelto almeno un'opzione.

La soluzione che ho trovato è:
- su web: disporre i dati come li ho riportati sopra: 12 valori separati da virgole.
- su arduino: collegarmi alla pagina, leggere i dati, metterli in un array, vedere se la somma della coppia di valori 1 e 2 per l'utente 1, 2 e 3 per l'utente 2, 3 e 4 per l'utente 3 e così via è superiore a zero. Se sì, accendere il led corrispondente.

Questo è il codice che ho sviluppato:
Code:
// Varie inizializzazioni

#include <SPI.h>
#include <Ethernet.h>

const int NUMBER_OF_FIELDS = 12; // how many comma-separated fields we expect
int count = 0;                    // the current field being received
int myArray[NUMBER_OF_FIELDS];   // array holding values for all the fields
int pinX;
byte mac[] = { 0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x02 };
char serverName[] = "ad-webside.com";
EthernetClient client;

void setup()
{
  // imposta i pin dei LED come output
  for(int x = 2;x<8;x++){
    pinMode(x, OUTPUT);
  }
  Serial.begin(9600);
  if(Ethernet.begin(mac) == 0) { // start ethernet using mac & IP address
    Serial.println("Failed to configure Ethernet using DHCP"); 
    while(true)   // no point in carrying on, so stay in endless loop:
      ;
  }
  delay(1000); // give the Ethernet shield a second to initialize
  Serial.println("connecting...");
}


void loop()
{
// connetti e prendi i dati

  if (client.connect(serverName, 80)>0) {
    Serial.print("connected... ");
    client.println("GET /apps/ardumoodboard/stringastato.php HTTP/1.0");
    client.println();
  } else {
    Serial.println("connection failed");
  }

// if connected, get data for the array
  if(client.connected()) {
   for(count = 0; count  < 12; count ++)
    {
      myArray[count] = client.parseInt();

    }   
   for (count=0; count < 12; count = count + 2) {

     // print to serial for debug
    Serial.print( "Valore count: ");
    Serial.print( count);
    Serial.print( " -> ");
    Serial.println( myArray[count]);
    Serial.print( "Valore count + 1: ");
    Serial.print( count+1);
    Serial.print( " -> ");
    Serial.println( myArray[count+1]);

// turn on led if at least one option is > 0
    if (myArray[count + 1] + myArray[count] > 0)
    {
    pinX = (count/2)+2;
   digitalWrite(pinX, HIGH);

    } else {
    pinX = (count/2)+2;
   digitalWrite(pinX, LOW);
    }
   }
  }


  else {
    Serial.println();
    Serial.println("not connected");
    client.stop();
    delay(20000);
  }
  delay(1000);
}

Il problema che ho è che i dati che ritorvo nell'array non sono sempre quelli che si trovano su web. Stampando per debug i valory dell'array ottengo

Code:
connecting...
connected... Valore count: 0 -> 1
Valore count + 1: 1 -> 1
Valore count: 2 -> 200
Valore count + 1: 3 -> 6
Valore count: 4 -> 2013
Valore count + 1: 5 -> 16
Valore count: 6 -> 22
Valore count + 1: 7 -> 3
Valore count: 8 -> 0
Valore count + 1: 9 -> 0
Valore count: 10 -> 24
Valore count + 1: 11 -> 0
connection failed
Valore count: 0 -> 3
Valore count + 1: 1 -> 2
Valore count: 2 -> 0
Valore count + 1: 3 -> 0
Valore count: 4 -> 4
Valore count + 1: 5 -> 5
Valore count: 6 -> 1
Valore count + 1: 7 -> 0
Valore count: 8 -> 0
Valore count + 1: 9 -> 0
Valore count: 10 -> 0
Valore count + 1: 11 -> 6
connection failed
Valore count: 0 -> 0
Valore count + 1: 1 -> 0
Valore count: 2 -> 0
Valore count + 1: 3 -> 0
Valore count: 4 -> 0
Valore count + 1: 5 -> 0
Valore count: 6 -> 0
Valore count + 1: 7 -> 0
Valore count: 8 -> 0
Valore count + 1: 9 -> 0
Valore count: 10 -> 0
Valore count + 1: 11 -> 0
connection failed

not connected

Ovvero: un primo set di valori che non so da dove escano, un secondo set con i valori che ho scritto sulla pagina - quindi i valori corretti, un terzo set con i valori tutti a zero.
Il ciclo loop si chiude correttamente alla fine del terzo set, alla fine dei primi due ho degli errori di connessione.

Non sono un programmatore, il codice l'ho assemblato con pezzi trovati in giro per la rete e la reference guide di arduino sempre aperta, ma non riesco a capire da cosa dipenda il problema e come risolverlo.

Qualcuno ha qualche suggerimento?
Nota bene: non deve per forza funzionare questo codice. Questa è la soluzione che ho trovato io, se ce n'è una più efficiente, ben venga!

Grazie
Andrea
Logged

Pages: [1]   Go Up
Jump to: