ciao ho il seguente problema di conversione dell'array.
Il codice mi legge url che scrivo sul brower e fin qui tutto mi funziona, poi devo prendere il valore pulito e mandarlo alla myserial.write e qui sorgono i problemi.
Vi mando il codice che ho costruito
Devo caricare i valori 10 20 50 e spedirli con mySerial.write alla seriale.
Il codice ' errato percheè il programma mi va in errore di stak overflow e non mi spedisce nulla
case 1:
Serial.println("main\n\tpath /main\n\treq: " + String(req) + "\n\tlen: " + req.length());
char arr2[200];
char *str2[20];
char *ptr2;
idx = 0;
req.toCharArray(arr2, 200);
ptr2 = strtok(arr2, "?&"); // takes a list of delimiters
while (ptr2 != NULL) {
str2[idx] = ptr2;
idx++;
ptr2 = strtok(NULL, "&"); // takes a list of delimiters
Serial.println (ptr2); // qui mi fa vedere tutti i dati corretti
}
mySerial.write(ptr2, 20);
break;
[/ code]
Ciao! Premetto che essendo dati numerici 10,20,50, forse sarebbe più sensato inviare un byte con quel valore numerico e non un array di char.
Il tuo array mySerial.write(ptr2, 20); ptr2 non è un array di caratteri!è un array di indirizzi di memoria, che di solito sono numeri che non possono essere contenuti in un byte. serial.write invia una successione di byte che non possono contenere l'indirizzo di memoria, ma non è neanche quello che vorresti.
Se li vuoi trasmettere come caratteri, usa strcpy() per copiare le stringhe in un array di char, e poi invia quello con serial.write().
cioe, vediamo se ho capito bene
tu hai (e non mi interessa sapere come) un array di 200 char, di nome "arr2" che contiene una stringa
questa stringa è nella forma http://192.168.4.1/?10&20&50
tu devi timandare sulla seriale software 10 20 50
ti serve di archiviarli in un array? o solo rispedirli?
sono interi non negativi oppure potrebbero essere anche maggiori di 32000 o negativi?
quanti sono gli elementi? sempre 3 o magari un numero variabile?
nell'ipotesi semplificativa che siano interi non negativi e non ti serva archiviarli e non ci interessi "comprenderli e usarli" ma solo rispedirli
byte i=0;
bool start=0;
while(arr2[i])
{
if (arr2[i]=='?')
{
start=1;
}
if (start)
{
if (arr2[i]>='0' && arr2[i]<='9')
{
myserial.write(arr2[i]);
}
}
}
Standardoil:
cioe, vediamo se ho capito bene
tu hai (e non mi interessa sapere come) un array di 200 char, di nome "arr2" che contiene una stringa
questa stringa è nella forma http://192.168.4.1/?10&20&50
tu devi timandare sulla seriale software 10 20 50
ti serve di archiviarli in un array? o solo rispedirli?
sono interi non negativi oppure potrebbero essere anche maggiori di 32000 o negativi?
quanti sono gli elementi? sempre 3 o magari un numero variabile?
nell'ipotesi semplificativa che siano interi non negativi e non ti serva archiviarli e non ci interessi "comprenderli e usarli" ma solo rispedirli
byte i=0;
bool start=0;
while(arr2[i])
{
if (arr2=='?')
{
start=1;
}
if (start)
{
if (arr2[i]>='0' && arr2[i]<='9')
{
myserial.write(arr2[i]);
}
}
}
mi esce errore c
lerror: ISO C++ forbids comparison between pointer and integer [-fpermissive]
Ripensandoci usare un array di char o un puntatore, si ottiene sempre un puntatore al primo elemento.
Il nome dell'array è il puntatore al primo elemento. Quindi è la stessa cosa
Ripensandoci mi sono accorto che nel test if .... Mi sono dimenticato l'indice dello array (rimasto nella tastiera)
Ma tu non hai risposto alle mie domande, servono ad aiutarti, vedi tu se è il caso di rispondere o no
Comunque ho corretto il programma
Standardoil:
cioe, vediamo se ho capito bene
tu hai (e non mi interessa sapere come) un array di 200 char, di nome "arr2" che contiene una stringa
questa stringa è nella forma http://192.168.4.1/?10&20&50
tu devi timandare sulla seriale software 10 20 50
ti serve di archiviarli in un array? o solo rispedirli?
sono interi non negativi oppure potrebbero essere anche maggiori di 32000 o negativi?
quanti sono gli elementi? sempre 3 o magari un numero variabile?
nell'ipotesi semplificativa che siano interi non negativi e non ti serva archiviarli e non ci interessi "comprenderli e usarli" ma solo rispedirli
byte i=0;
bool start=0;
while(arr2[i])
{
if (arr2[i]=='?')
{
start=1;
}
if (start)
{
if (arr2[i]>='0' && arr2[i]<='9')
{
myserial.write(arr2[i]);
}
}
}
ciao scusa non ti avevo risposto mi sono accorta ora.
Mi occorre spedire solo i numeri interi che mi arrivano sulla seriale e non saranno piu' di 64, non hanno una lunghezza fissa.
Diciamo che la stringa che mi arriverà dal web sarà come quella che avevo scritto un po' piu' lunga (max64), mi arriveranno solo numeri interi positivi.
scusa ancora per la non risposta
Bettybetty:
ciao scusa non ti avevo risposto mi sono accorta ora.
Mi occorre spedire solo i numeri interi che mi arrivano sulla seriale e non saranno piu' di 64, non hanno una lunghezza fissa.
Diciamo che la stringa che mi arriverà dal web sarà come quella che avevo scritto un po' piu' lunga (max64), mi arriveranno solo numeri interi positivi.
scusa ancora per la non risposta
ora non mi da errore nello SCARICAMENTO del programma ma quando parte la stringa esce errore
uso nodemcu che usa esp ho rifatto lo skech semplificandolo ma continua a darmi errore appena tento di trasferire il file in seriale
Mando il istato:
void loop() {
// aspetto che un client si connetta
WiFiClient client = server.available();
if (!client) {
return;
}
// attendo che invii qualche dato
while(!client.available()){
delay(1);
}
// leggo la prima linea della richiesta (attenzione è CASE SENSITIVE)
String request = client.readStringUntil('\r');
Serial.println(request);
delay (100);
mySerial.write (request); // se tolgo questa linea funziona senza bloccarsi
delay (100);
Serial.println ("FINITO");là
}