Salve a tutti
Sarebbe bello se il forum avesse varie sezioni, tra le quali anche un po' domande software.
Ho una variabile compilata da un POST del client che è esattamente un numero in formato stringa, questo numero che arriva corrisponde a un digital output
Avrei bisogno di ricavare l'intero da questa stringa per metterlo nel digitalWrite.
Ho visto un po' di esempi su vari forum ma non funzionano, come posso fare diversamente?
Grazie
così funziona
#include <String.h> // anche se apparentemente non serve
char * thisChar = "46";
int a = atoi(thisChar);
digitalWrite(a, 1);
così non va quando lo metto in un altra variabile
#include <String.h> // anche se apparentemente non serve
String D3 = "46";
char * thisChar = D3;
int a = atoi(thisChar);
digitalWrite(a, 1);
error: cannot convert 'String' to 'char*' in initialization
ciao
nel primo caso stai usando un array di char, che atoi "digerisce" senza problemi.
Nel secondo caso stai cercando di dare ad atoi un oggetto String, e non sa che farsene (infatti l'errore dice: impossibile convertire String in char* (char * vuol dire array di char) )
In oltre l'errore è nella riga
char * thisChar = D3;
ovvero dove tenti di puntare un OGGETTO String con un puntatore a char (i puntatori possono essere gestiti come array)
modifica così:
char * thisChar = D3.toCharArray() ;
e tutto dovrebbe funzionare senza problemi.
grazie per la risposta, ........... non va neanche così, ho provato di tutto
string.c_str()
http://www.cplusplus.com/reference/string/string/c_str/
atoi
http://www.cplusplus.com/reference/clibrary/cstdlib/atoi/
boost::lexical_cast works pretty well. #include <boost/lexical_cast.hpp>
librerie caricate
#include <String.h>
#include <Iostream.h>
#include <stdio.h>
#include <stdlib.h>
#include <cstring.h>
ho sempre un errore o di char, o di conversione, o di inizializzazione ecc
nella tua correzione ho provato così:
String D3 = "46";
char * thisChar = D3.toCharArray() ;
int a = atoi(thisChar);
con questo errore:
error: no matching function for call to 'String::toCharArray()'
C:\Programmi\arduino-0022\hardware\arduino\cores\arduino/WString.h:80: note: candidates are: void String::toCharArray(char*, unsigned int)
vedendo su toCharArray() - Arduino Reference
string.toCharArray(buf, len)
Parameters
string: a variable of type String
buf: the buffer to copy the characters into (char [])
len: the size of the buffer (unsigned int)
mettendo i parametri
String D3 = "46";
char * thisChar = D3.toCharArray(2,2) ;
int a = atoi(thisChar);
errore:
sketch_oct25a:109: error: invalid conversion from 'int' to 'char*'
sketch_oct25a:109: error: initializing argument 1 of 'void String::toCharArray(char*, unsigned int)'
sketch_oct25a:109: error: void value not ignored as it ought to be
ciao =(
colpa mia, funziona così:
String D3 = "46";
char thisChar[D3.length()];
D3.toCharArray(thisChar, D3.length()) ;
int a = atoi(thisChar);
Grandioso 
funzia .... anche se mi restituisce solo 4
in teoria ottengo D3[0] dovrei avere anche D3[1]
come ottengo tutto il contenuto numerico? scusa tanto, ero abituato al vecchio parseInt(string), in c/c++ mi trovo un po' in crisi su particolari trattamenti delle variabili
Grazie ancora
Ciao
D3 NON è un array ma un oggetto, che al suo interno possiede anche un array... ma va bè.
in teoria dovrebbe restituirti anche il 3 senza modifiche, mi sembra molto strano questo comportamento.. prova con un numero a 3 cifre a vedere cosa succede
ok con 3 cifre ottengo le prime 2, va bene così aggiungo una cifra alla stringa del post 
in teoria io inviavo
D046 per indicare che è una digital port 46 da commutare a 0
D146 per indicare che è una digital port 46 da commutare a 1
Perfetto ciaoo
guarda, basta cambiare
char thisChar[D3.length()];
D3.toCharArray(thisChar, D3.length());
in
char thisChar[D3.length()+1];
D3.toCharArray(thisChar, D3.length()+1);