Show Posts
Pages: 1 ... 80 81 [82] 83 84 ... 227
1216  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();
    }
}
1217  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
1218  International / Software / Re: elenco dei file su sdcard che sparisce on: March 20, 2013, 06:02:33 am
questo è l'esempio che si trova nell'ide 152, ho cambiato il pin 10 in 4 per la mia sheld, e ho aggiunto digitalwrite(4,1), l'ho provato e funziona

Code:
/*
  SD card basic file example
 
 This example shows how to create and destroy an SD card file
 The circuit:
 * SD card attached to SPI bus as follows:
 ** MOSI - pin 11
 ** MISO - pin 12
 ** CLK - pin 13
 ** CS - pin 4
 
 created   Nov 2010
 by David A. Mellis
 modified 9 Apr 2012
 by Tom Igoe
 
 This example code is in the public domain.
 
 */
#include <SPI.h>
#include <SD.h>

File root;

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
  }


  Serial.print("Initializing SD card...");
  // On the Ethernet Shield, CS is pin 4. It's set as an output by default.
  // Note that even if it's not used as the CS pin, the hardware SS pin
  // (10 on most Arduino boards, 53 on the Mega) must be left as an output
  // or the SD library functions will not work.
  pinMode(4, OUTPUT);
  digitalWrite(4,1);
  
  if (!SD.begin(4)) {
    Serial.println("initialization failed!");
    return;
  }
  Serial.println("initialization done.");

  root = SD.open("/");
  
  printDirectory(root, 0);
  
  Serial.println("done!");
}

void loop()
{
  // nothing happens after setup finishes.
}

void printDirectory(File dir, int numTabs) {
   while(true) {
    
     File entry =  dir.openNextFile();
     if (! entry) {
       // no more files
       //Serial.println("**nomorefiles**");
       break;
     }
     for (uint8_t i=0; i<numTabs; i++) {
       Serial.print('\t');
     }
     Serial.print(entry.name());
     if (entry.isDirectory()) {
       Serial.println("/");
       printDirectory(entry, numTabs+1);
     } else {
       // files have sizes, directories do not
       Serial.print("\t\t");
       Serial.println(entry.size(), DEC);
     }
     entry.close();
   }
}

1219  International / Software / Re: Sketch si blocca dopo alcuni giorni on: March 19, 2013, 06:34:56 pm
dopo 3-4 giorni il freeze lo causa una stringa dichiarata vuota?
ci mette 4 giorni a riempire il buffer o la ram?
Se è un esaurimento della ram, perchè solo lo shield si inchioda e non arduino?
come mai non risponde alle richieste, ma al ping si?
come mai riavviando l'SPI torna a funzionare correttamente?

Ragazzi sono 2 anni che leggo questo problema, ma una soluzione definitiva non l'ha ancora trovata nessuno, non dico che lo fanno tutti gli sketch, ma il suo è davvero elementare.

Sono quasi convinto che il problema è causato da qualche cosa che va storto all'interno della rete...il problema non si verifica in tutte le reti lan, solo su alcune.

ciao  
1220  International / Software / Re: Sketch si blocca dopo alcuni giorni on: March 19, 2013, 04:19:47 pm
si volevo dire 152 miii che pignola!!! smiley-grin smiley-grin smiley-grin
la 152 è anche per avr/arm
1221  International / Software / Re: Sketch si blocca dopo alcuni giorni on: March 19, 2013, 04:04:06 pm
ciao
Perchè uno sketch fatto su ide 0022, prova la 1.0.5 ha subito molte modifiche e correzioni di bug lungo la strada, non ti garantisco che non si inchiodi più, ma prova e torna tra qualche giorno e facci sapere, dato il tuo sketck molto elementare la tua testimonianza può essere molto utile
Il freeze della ethernet è molto discusso ... ti basta googlare un po per leggere parecchio sull'argomento.
1222  International / Software / Re: elenco dei file su sdcard che sparisce on: March 19, 2013, 01:29:31 pm
a me sembra che nell'esempio ci sia

Code:
#include <SPI.h>
entry.close();

dove sono finite?

stessa cosa nel post di ilpaso
1223  International / Software / Re: Problema sketch monitoraggio contatore Enel e fotovoltaico on: March 19, 2013, 11:07:49 am
Ahhahah non lo conoscevo questo acronimo usato nell'informatica che sta per Keep It Simple, Stupid, ossia "rimani sul semplice, stupido"
allora kiss kiss a tutti smiley
1224  International / Software / Re: Problema sketch monitoraggio contatore Enel e fotovoltaico on: March 19, 2013, 10:55:12 am
kiss
smiley-eek kiss  smiley-eek
1225  International / Generale / Re: Arduino r3 non originale chiarimento on: March 19, 2013, 09:32:42 am

Quote
Anche a me sembra identica peró quando ho contattato il venditore mi ha detto che non era originale ma molto similie....
questo prima o dopo l'acquisto?
1226  International / Software / Re: Funzione GET x prendere valori dall'url di una pagina HTML on: March 19, 2013, 09:10:15 am
si ma con get non hai solo 255 caratteri a disposizione da mandare?
nell'esempio sono meno di 60 char

non ho un esempio fatto su uno sketch, io lo split lo uso dalla parte client sul jquery-javascript con 8 byte vedo lo status di 70 pin, al massimo rispedisco verso il server 1 byte che ne gestisce 8 alla volta per mia comodità, ma nessuno mi impedisce di mandarne di più, perchè dovrei mandarne di più? la paginetta web serve per la visualizzazione in realtime di quello che accade nel server, al massimo quando premo un tastino ne devo attivare uno mica 10 o 20.

se vuoi controllare 8 pin in uno solo byte tramite http usa la manipolazione dei registri.
inviando per es:  http://192.168.2.179/?255 posso assegnare il valore 255 al PORTD e accenderli tutti ... valore 0 spegnerli tutti oppure valori intermedi che accendono e spengono dei led secondo logica binaria.

dipende tutto da cosa uno vuole fare e scegliere la strada migliore e meno complessa, anche con indexof puoi gestire più chiavi contenute nella stessa stringa get, puoi mettere anche dei simboli differenti che ne delimitano le parti
es  http://192.168.2.179/?255@blabla#125*540§ e usare questi simboli @#*§ come separatori.

Ripeto, se non si sa quale deve essere il risultato non si può dare una risposta adeguata, i metodi sono illimitati nel trattare le stringhe si costruiscono si spediscono e si smontano

Se cerchi come usare lo split .... google "arduino split"

ciao
1227  International / Software / Re: Funzione GET x prendere valori dall'url di una pagina HTML on: March 19, 2013, 04:21:19 am
Ho capito.....così però posso lavorarare solo con un paramentro per volta, oppure madare n parametri nell'url???
Cioè ti spiego....
quando schiacci SALVA, nel mio Url dovrei mandare più parametri in un sol colpo, e dovrei prenderli tutti tramite arduino.
Questo si può fare con il metodo sopra descritto??
La cosa più logica per avere una quantità alta di dati nella get sarebbe mandare per es:
 http://192.168.2.179/?122,145,163,blabla,40,12,5,184,74,245,140,215,19 e farne poi lo split della ',' il tutto te lo ritroverai in una array
split[0] ci sarà 122
split[1] ci sarà 145
split[2] ci sarà 163
split[3] ci sarà blabla
...
...
split[12] ci sarà 19

la ',' è solo un simbolo usato come separatore, se servono numeri con la ',' si possono usare altri simboli a piacere ad es # o @ ecc

Es:  http://192.168.2.179/?122,14#145,45#163,74#blabla#40#12#5#184#74#245#140#215#19
1228  International / Software / Re: Arduino e JqueryMobile on: March 18, 2013, 02:59:04 pm
nel jquery ci sono le funzioni ajax e json queste ti permettono di inviare solo il dato senza aggiornare da link mantenendo la connessione costante. non so se hai spazio sufficiente nella flash per fare un pezzo di js.
1229  International / Generale / Re: Open Source??......solo nel termine stretto on: March 18, 2013, 08:21:00 am
Tutto chiaro, hai convinto anche me smiley

Ti chiedo una cortesia visto che meglio di te non può saperlo nessuno, potresti dare un occhiata a questo treadh  http://arduino.cc/forum/index.php/topic,154482.0.html che riguarda le certificazioni delle Vostre schede e darci qualche chiarimento.

Distinti saluti.
1230  International / Software / Re: Arduino e JqueryMobile on: March 18, 2013, 06:09:52 am
Tu hai detto questo
Quote
l'elettricista che eseguira' l'impianto in casa vostra deve assicurarsi di mettere a terra il vostro impianto in altro modo. E come?
Collegando le terre all'impianto di riscaldamento o a quello idraulico.
L'interpretazione della frase è questa:
Se non hai un conduttore di terra prendila dai tubi del riscaldamento... No, non si fa.
Se poi tu mi dici che i tubi metallici che girano per la casa vanno collegati al collettore di terra dove da esso parte il cavo verso i dispersori, allora si va fatto (ed è anche obbligatorio), però quello si chiama "collegamento equipotenziale".
Inoltre prelevare la terra dai tubi acqua, gas ecc è del tutto inutile dato che lungo le linee vengono montati gli isolatori quindi privi di continuità.
Per i cavi vabbè ... mi sono permesso di correggerti perchè sono ignorante sull'argomento e non ho mai fatto i calcoli sulle sezioni adeguate  smiley-twist, scusami non so quello che dico.
Gli ingegneri usano questa e anche tu dovresti saperla a memoria .... tabella CEI-UNEL 35024-1 ... mi sembra di intravedere che l' 1,5mmq  tiene 15.50A a temperature di impiego 25-30°

ciao

Pages: 1 ... 80 81 [82] 83 84 ... 227