Show Posts
Pages: 1 ... 79 80 [81] 82 83 ... 227
1201  International / Software / Re: Funzione GET x prendere valori dall'url di una pagina HTML on: March 22, 2013, 04:32:23 am
forse devo mettere id.....invece mi è rimasto name....provo!!!!
e si ci va id  smiley , dovresti usare la console degli errori

Firefox > Strumenti > Sviluppo Web > Console degli Errori, se qualcosa non va nel js della tua pagina ti viene segnalata la linea contenente l'errore

ciao

infatti
Code:
Data e ora: 22/03/2013 10:39:57
Errore: TypeError: document.getElementById(...) is null
File sorgente: http://192.168.2.177/
Riga: 71
1202  International / Software / Re: Funzione GET x prendere valori dall'url di una pagina HTML on: March 22, 2013, 03:53:53 am
fai una modifica allo sketch
Siccome c'è il '#' che separa i pezzi che ti servono facciamo si che quando il char c incontri il cancelletto svuoti la stringa readString
potresti usare anche "\n"

Code:
boolean riceve_handler(TinyWebServer& web_server)
{  
      web_server.send_error_code(200);
      web_server.send_content_type("text/plain");
      web_server.end_headers();
      Client& client = web_server.get_client();
                
    if (client.available())
    {
      String readString;
      int16_t c;  
      
       while ((c = client.read())>0)
       {
         readString += (char)c;
         if(c=='#'){          
         Serial.println (readString);  //debug
        
         //------------------------------------
         //qui elabori la stringa in arrivo
         //-----------------------------------
            
         //svuoto la stringa dopo aver incontrato # ... in questo modo la massima lunghezza di  readString
         //sara di 255.255.255.255# quindi 16 char, si evita di crashare arduino a causa di un eventuale
         //saturazione della ram
         readString="";
         }            
       }
      
        readString=""; //svuota la stringa del client.read  
    }
  
      client.stop();  
}

Ottimizzazione delle stringhe inviate
Code:
dato=
    "IP="+ip_1+"."+ip_2+"."+ip_3+"."+ip_4+"#"+
    "SUBNET="+sm_1+"."+sm_2+"."+sm_3+"."+sm_4+"#";

serialprint
Code:
IP=255.255.255.255#
SUBNET=255.255.255.255#


Devi ricordarti di ricaricare la pag 192.168.0.12/ ogni volta che fai una modifica sull' html per renderle effettive e importante le stringhe che mandi dalla pag web devono terminare con '#'
1203  International / Software / Re: Funzione GET x prendere valori dall'url di una pagina HTML on: March 22, 2013, 03:47:13 am
Nono li manda più di 16  smiley mi ero dimenticato di ricaricare la pagina htm sul browser una volta fatte le modifiche

stringa dato
Code:
dato=
    ip_1+"."+ip_2+"."+ip_3+"."+ip_4+"#"+
    sm_1+"."+sm_2+"."+sm_3+"."+sm_4+"#"+
    ip_1+"."+ip_2+"."+ip_3+"."+ip_4+"#"+
    sm_1+"."+sm_2+"."+sm_3+"."+sm_4+"#"+
    ip_1+"."+ip_2+"."+ip_3+"."+ip_4+"#"+
    sm_1+"."+sm_2+"."+sm_3+"."+sm_4+"#"+
    ip_1+"."+ip_2+"."+ip_3+"."+ip_4+"#"+
    sm_1+"."+sm_2+"."+sm_3+"."+sm_4+"#"+
    ip_1+"."+ip_2+"."+ip_3+"."+ip_4+"#"+
    sm_1+"."+sm_2+"."+sm_3+"."+sm_4+"#"+
    ip_1+"."+ip_2+"."+ip_3+"."+ip_4+"#"+
    sm_1+"."+sm_2+"."+sm_3+"."+sm_4+"#"+
    ip_1+"."+ip_2+"."+ip_3+"."+ip_4+"#"+
    sm_1+"."+sm_2+"."+sm_3+"."+sm_4+"#"+
    ip_1+"."+ip_2+"."+ip_3+"."+ip_4+"#"+
    sm_1+"."+sm_2+"."+sm_3+"."+sm_4+"#";

Serial print
Code:
Setting up SD card...
Setting up the Ethernet card...
Web server starting...
Ready to accept HTTP requests.
255.255.255.255#
255.255.255.255#
255.255.255.255#
255.255.255.255#
255.255.255.255#
255.255.255.255#
255.255.255.255#
255.255.255.255#
255.255.255.255#
255.255.255.255#
255.255.255.255#
255.255.255.255#
255.255.255.255#
255.255.255.255#
255.255.255.255#
255.255.255.255#
1204  International / Software / Re: Funzione GET x prendere valori dall'url di una pagina HTML on: March 22, 2013, 03:16:55 am
A si quello del 2011 si limita a 30, era un esempio questo no non ha limiti, le variabili string sono dannose se usate male a causa della poca ram, ma 200,250byte  dovresti averli liberi, comunque si può ovviare a questo, ora provo  
1205  International / Software / Re: Funzione GET x prendere valori dall'url di una pagina HTML on: March 22, 2013, 03:01:15 am
Non ho messo limiti puoi mandarne anche 8000, sarà arduino che stabilirà un limite prima di saturare la ram, ma 16 mi sembrano un po' pochi, forse ne mandi troppi ... ti sembra che arduino si inchiodi? come scrivi l'invio?
1206  International / Software / Re: Funzione GET x prendere valori dall'url di una pagina HTML on: March 21, 2013, 06:07:58 pm
Allego l' htm modificato ... questo è quanto.
Ora puoi proseguire da solo

ciao
1207  International / Software / Re: Funzione GET x prendere valori dall'url di una pagina HTML on: March 21, 2013, 04:32:03 pm
mi ci vuole un po'

questo è lo sketch pronto per ricevere qualsiasi dato da client
Code:
#include <pins_arduino.h>
#include <SPI.h>
#include <Ethernet.h>
#include <Flash.h>
#include <SD.h>
#include <TinyWebServer.h>

//****************VALUES YOU CHANGE*************/
//byte ip[] = { 192, 168, 0, 12 };// Don't forget to modify the IP to an available one on your home network
byte ip[] = { 192, 168, 2, 177 };// Don't forget to modify the IP to an available one on your home network
//*********************************************/

static uint8_t mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };

 TinyWebServer::PathHandler handlers[] = {
  {"/", TinyWebServer::GET, &index_handler},
  {"/RICEVI", TinyWebServer::POST, &riceve_handler},
  {"/" "*", TinyWebServer::GET, &file_handler},
  {NULL},
};

const char* headers[] = {"Content-Length",NULL};
TinyWebServer web = TinyWebServer(handlers, headers);

boolean has_filesystem = true;
Sd2Card card;
SdVolume volume;
SdFile root;
SdFile file;

//_________________________________________________________________________________________________________________________________________________________________________
boolean riceve_handler(TinyWebServer& web_server)
{  
      web_server.send_error_code(200);
      web_server.send_content_type("text/plain");
      web_server.end_headers();
      Client& client = web_server.get_client();
                
    if (client.available())
    {
      String readString;
      int16_t c;  
      
       while ((c = client.read())>0)
       {
            readString += (char)c;
                
       }
       Serial.println (readString);
       //------------------------------------
       //qui elabori la stringa in arrivo
       //-----------------------------------
              
        readString=""; //svuota la stringa del client.read  
    }
  
      client.stop();  
}

//_________________________________________________________________________________________________________________________________________________________________________
void send_file_name(TinyWebServer& web_server, const char* filename) {
//Serial.print ("1");
  if (!filename) {
    web_server.send_error_code(404);
    web_server << F("Could not parse URL");
  } else {
    TinyWebServer::MimeType mime_type
      = TinyWebServer::get_mime_type_from_filename(filename);
    web_server.send_error_code(200);
    web_server.send_content_type(mime_type);
    web_server.end_headers();
    if (file.open(&root, filename, O_READ)) {
      Serial << F("Read file ");
      Serial.println(filename);
      web_server.send_file(file);
      file.close();
    } else {
      web_server << F("Could not find file: ") << filename << "\n";
    }
  }
}

//__________________________________________________________________________________________________________________________________________________________________________
boolean file_handler(TinyWebServer& web_server) {
//Serial.print ("2");
  char* filename = TinyWebServer::get_file_from_path(web_server.get_path());
  send_file_name(web_server, filename);
  free(filename);
  return true;
}

//__________________________________________________________________________________________________________________________________________________________________________
boolean index_handler(TinyWebServer& web_server) {
//Serial.print ("3");
  send_file_name(web_server, "SETUP.HTM");
  return true;
}
//_________________________________________________________________________________________________________________________________________________________________________

void setup() {
 
  Serial.begin(9600);
  //Serial << F("Free RAM: ") << FreeRam() << "\n";
 
  pinMode(SS_PIN, OUTPUT);   // set the SS pin as an output
  digitalWrite(SS_PIN, HIGH);   // and ensure SS is high
  pinMode(10, OUTPUT);   // Set the CS pin as an output
  digitalWrite(10, HIGH);   // Turn off the W5100 chip! (wait for configuration)
  pinMode(4, OUTPUT);   // Set the SDcard CS pin as an output
  digitalWrite(4, HIGH);   // Turn off the SD card! (wait for configuration)
  // initialize the SD card.
  Serial.println("Setting up SD card...");
  // pass over the speed and Chip select for the SD card
  if (!card.init(SPI_FULL_SPEED, 4)) {
    Serial.println("card failed");
    has_filesystem = false;
  }
  // initialize a FAT volume.
  if (!volume.init(&card)) {
    Serial.println("vol.init failed!");
    has_filesystem = false;
  }
  if (!root.openRoot(&volume)) {
    Serial.println("openRoot failed");
    has_filesystem = false;
  }

  // Initialize the Ethernet.
  Serial.println("Setting up the Ethernet card...");
  Ethernet.begin(mac, ip);

  // Start the web server.
  Serial.println("Web server starting...");
  web.begin();

  Serial.println("Ready to accept HTTP requests.");
}
 
//_________________________________________________________________________________________________________________________________________________________________________
void loop() {
  if (has_filesystem) {
    web.process();
  }
}


ora devo vedere l'html
1208  International / Software / Re: Funzione GET x prendere valori dall'url di una pagina HTML on: March 21, 2013, 03:08:18 pm
Ho capito che non vuoi uno scambio continuo, ma la tinywebserver lavora su questi riconoscimenti

Code:
{"/", TinyWebServer::GET, &index_handler },
  {"/SEND", TinyWebServer::POST, &blink_led_handler },
  {"/ledstatus" "*", TinyWebServer::GET, &led_status_handler },
  {"/" "*", TinyWebServer::GET, &file_handler },
  {NULL},
};

qualsiasi cosa metti di diverso da questi prefissi viene interpretato come errore a parte questo {"/" "*" che lo interpreta come nome del file, se esiste te lo manda altrimenti da errore es: 192.168.0.12/pippo.txt te lo visualizza sulla pag html

devi usare la funzione
boolean blink_led_handler(TinyWebServer& web_server) {
che riceve i dati dal client, per mandarglieli  dovresti usare sul js che ho scritto qualche post indietro
Code:
function send()
 {
    $.ajax({
      type: "POST",
   data: "addr1=1&addr3=2&addr3=5&addr4=7",
   dataType: "text",
   cache: false,
   url: "/SEND",
   success: function(r){ },
   error: function() {  }
  });
};
funzione collegata al pulsante "salva" che invia i dati contenuti nei campi <input .....

se tu invii http://192.168.0.12/index.htm?addr1=1&addr3=2&addr3=5&addr4=7 la tiny ti butta fuori, non lo riconosce
puoi mettere lo sketch che hai modificato del tiny?
1209  International / Software / Re: Funzione GET x prendere valori dall'url di una pagina HTML on: March 21, 2013, 02:03:34 pm
Manca il file javascript file.js che fa da tramite tra html e arduino se hai visto l'esempio tiny l'avrai notato

ciao
1210  International / Software / Re: uscita immediata da un loop o un ciclo on: March 21, 2013, 10:23:59 am
Si janos vado a studiare, intanto tu fagli usare un millis() per 50ms
1211  International / Software / Re: uscita immediata da un loop o un ciclo on: March 21, 2013, 10:13:28 am
non centra perchè lui è dentro a una funzione quando ha bisogno di leggere la pressione del bottone che impegna il suo tempo, non ha  mica un delay da 10 minuti

loop()

Vai alla funzione 1()
Vai alla funzione 2()
Vai alla funzione 3()
Vai alla funzione 4()
leggi il pulsante

il pulsante lo legge solo quando ha terminato le 4 funzioni, ci vuole qualcosa che intercetti il pulsante interrompendo per un istante tutto quello che il micro sta facendo, questo lo fa solo attivando un interrupt
1212  International / Hardware / Re: Taparelle con relè radio+ Arduino UNO on: March 21, 2013, 09:11:57 am
Ma anche arduino è cinese?
1213  International / Software / Re: uscita immediata da un loop o un ciclo on: March 21, 2013, 08:56:46 am
Utilizza millis() invece dei delay()...

cosa centra il delay con l'intercettare un evento durante il ciclo?

Prendi un pin che abbia l'interrupt, lo attivi, questo resterà in attesa di un cambio anche durante l'esecuzione di una funzione diversa dal loop.  

http://gonium.net/md/2006/12/20/handling-external-interrupts-with-arduino/
1214  International / Software / Re: Funzione GET x prendere valori dall'url di una pagina HTML on: March 21, 2013, 05:12:42 am
Perchè usi la tiny che è pesante come lib per poi fare quello che fa un semplice esempio webserver. La tinywebserver non è stata pensata con questo criterio, lo fa tramite ajax metodo POST

la funzione che invia il dato potrebbe essere tipo questa
Code:
function send()
 {
    $.ajax({
      type: "POST",
   data: "addr1=1&addr3=2&addr3=5&addr4=7",
   dataType: "text",
   cache: false,
   url: "/SEND",
   success: function(r){ },
   error: function() {  }
  });
};

nello sketch ti ritrovi comunque nella stessa situazione identica che ho postato sopra cercare questa stringa  "addr1=1&addr3=2&addr3=5&addr4=7" nel pacchetto
Code:
if (client.available()) {
        char c = client.read();
        pacchetto += (char)c;
        Serial.write(c);
        ...
        ...

usi la tiny perchè carica  i file da SD?
ti basta aggiungere poche righe per inviare la pagina htm agli esempi webserver dentro l'IDE
Code:
void loop()
{
EthernetClient client = server.available();

    if (client) {  
        boolean currentLineIsBlank = true;
        while (client.connected()) {
            if (client.available()) {  
                char c = client.read();
                
                if (c == '\n' && currentLineIsBlank) {  
                    client.println("HTTP/1.1 200 OK");
                    client.println("Content-Type: text/html");
                    client.println("Connection: close");
                    client.println();
                    //------------------invia pagina index.htm------------------------------------
                    webFile = SD.open("index.htm");      
                    if (webFile) {
                        while(webFile.available()) {
                            client.write(webFile.read());
                        }
                        webFile.close();
                    //-------------------------------------------------------------------------------
                    }
                    break;
                }            
                if (c == '\n') {  
                    currentLineIsBlank = true;
                }
                else if (c != '\r') {    
                    currentLineIsBlank = false;
                }
            }
        }
        delay(1);    
        client.stop();
    }
}
1215  International / Software / Re: Funzione GET x prendere valori dall'url di una pagina HTML on: March 20, 2013, 06:26:12 am
Con tinywebserver è possibile prendere l'url e poi lavorarlo????
si, ma non lo fa solo quello

eccoti un esempio base presente anche nele cartelle dell'ide, ti ho aggiunto 2 pulsanti giusto per farti vedere il risultato dell'url sul serial.print
Code:
/*
  Web Server
 
 A simple web server that shows the value of the analog input pins.
 using an Arduino Wiznet Ethernet shield.
 
 Circuit:
 * Ethernet shield attached to pins 10, 11, 12, 13
 * Analog inputs attached to pins A0 through A5 (optional)
 
 created 18 Dec 2009
 by David A. Mellis
 modified 9 Apr 2012
 by Tom Igoe
 
 */

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

// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
byte mac[] = {
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,2, 177);

// Initialize the Ethernet server library
// with the IP address and port you want to use
// (port 80 is default for HTTP):
EthernetServer server(80);

void setup() {
 // Open serial communications and wait for port to open:
  Serial.begin(9600);
   while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }


  // start the Ethernet connection and the server:
  Ethernet.begin(mac, ip);
  server.begin();
  Serial.print("server is at ");
  Serial.println(Ethernet.localIP());
}


void loop() {
  // listen for incoming clients
  EthernetClient client = server.available();
  if (client) {
   String pacchetto;
    Serial.println("new client");
    // an http request ends with a blank line
    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        pacchetto += (char)c;
        Serial.write(c);
        // if you've gotten to the end of the line (received a newline
        // character) and the line is blank, the http request has ended,
        // so you can send a reply
        if (c == '\n' && currentLineIsBlank) {
          // send a standard http response header
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println("Connection: close");
          client.println();
          client.println("<!DOCTYPE HTML>");
          client.println("<html>");
                    // add a meta refresh tag, so the browser pulls again every 5 seconds:
          //client.println("<meta http-equiv=\"refresh\" content=\"5\">");
          // output the value of each analog input pin
          for (int analogChannel = 0; analogChannel < 6; analogChannel++) {
            int sensorReading = analogRead(analogChannel);
            client.print("analog input ");
            client.print(analogChannel);
            client.print(" is ");
            client.print(sensorReading);
            client.println("<br />");          
          }
          client.println("</html>");
          client.print("<input type=\"button\" style=\"width:120px; height:80px\" value=\"On\" onclick =\" location.href='/?on_2'\">");
         client.print("<input type=\"button\" style=\"width:120px; height:80px\" value=\"Off\" onclick =\" location.href='/?off_2'\">");  
          break;
        }
        if (c == '\n') {
          // you're starting a new line
          currentLineIsBlank = true;
        }
        else if (c != '\r') {
          // you've gotten a character on the current line
          currentLineIsBlank = false;
        }
      }
    }
pacchetto="";
    // give the web browser time to receive the data
    delay(1);
    // close the connection:
    client.stop();
    Serial.println("client disconnected");
  }
}

if (client.available()) {
        char c = client.read();
non si limita a leggere solo off_2 ma è un pacchtto con molte informazioni
- Tipo di richiesta GET,POST,PUT, ecc
- user-agent descrive il client che fa la richiesta, come vedi mi sono connesso con un windows nt6.1, windows a 64bit e il browser è Firefox
- accept ti descrive il content-type text/html
- language decodifiche ecc ecc
- se aggiungessimo i popup di autenticazione, qui dentro ci sarebbero anche le chiavi a base64 dell' username and passw

risultato nel serial dopo la pressione del tasto  da browser
Quote
server is at 192.168.2.177
new client
GET /?on_2 HTTP/1.1 >>>>>> GET attuale
Host: 192.168.2.177
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:19.0) Gecko/20100101 Firefox/19.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: it-IT,it;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Referer: http://192.168.2.177/?off_2 >>> GET precedente
Connection: keep-alive

client disconnected

scusa query.indexof    cosa fa????   ....mi daresti un po' più di codice che non riesco a capire??? grazie mille

La richiesta arriva sottoforma di caratteri seriali, uno alla volta e la riga "pacchetto += (char)c;" ha il compito di salvare tutti i char in un unica stringa. Questa stringa "pacchetto" come vedi è lunga e occupa molti byte mettendo a rischio la ram, andrebbe lavorata un po meglio e salvare solo il necessario, un altro accorgimento è quella di non dichiararla pubblica

"indexof" cerca in tutta la stringa il pezzo che tu vuoi vedere se esiste....
Se è contenuto all'interno della stringa ti restutisce la posizione inziale
Se non esiste la sequenza esatta ti restituisce -1

stringa = "ciao mondo e ciao universo";
int posizione = stringa.indexOf("mondo"); // cerchiamo mondo
il risultato sarà
5  quinto carattere dalla pos iniziale

se cerchi "ciao" essendocene 2 ti restituisce la posiz solo del primo

vedi:
indexOf
Substring
string.length()
LastIndexOf

Ultima cosa: se non vuoi vedere sulla barra degli indirizzi "http://192.168.2.177/?off_2" nell' html costruisci un form con metodo POST
Pages: 1 ... 79 80 [81] 82 83 ... 227