errata conversione dei numeri in caratteri

ciao a tutti ho un codice di questo tipo:

char testo="";
void loop(){
   int    value=analogicRead(A0);
   char t[2];
   sprintf (t, "%03i", value);
   strcat(testo,t);
   Serial.print(testo);
}

il problema è che 'testo' non contiene i valori di 't ' concatenati bensi i rispettivi caratteri ASCII.
INSOMMA Io VORREI QUESTO: 34 34 35 ..
ed invece ottengo questo: ? ? ! ...
come posso risolvere? Aiutatemi! grazie

  1. presentati nell'apposita sezione

  2. credo tu abbia un po' di confusione sui tipi di variabile e la loro dichiarazione

>MadMath: come ti ga già indicato "fratt", essendo il tuo primo post, nel rispetto del regolamento (… punto 13, primo capoverso), ti chiedo cortesemente di presentarti IN QUESTO THREAD (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con MOLTA attenzione il su citato REGOLAMENTO ... Grazie.

Guglielmo

Grazie per le risposte. ho letto il regolamento ed ho effettuato la presentazione. Ho risolto cosi:

char testo;
void loop(){
   int    value=analogicRead(A0);
   String testo=String(value,DEC);
   char t[testo.length()];
   testo.toCharArray(t,testo.length());
   Serial.print(testo);
}

Adesso funziona.

Sicuro che compili?
analogicRead non credo esista, ma forse è solo un errore di battitura.
poi la char testo fuori dal loop non ti serve. e mi pare superfluo anche l'array t e la copia da testo a t.

Per trasformare numeri in caratteri da inviare su seriale esiste la funzione Serial.print (nome della variabile); che manda sulla seriale il codice ASCII di ogni cifra. Come variabile può essere anche usata una lettura diretta.
Per convertire caratteri in numeri bisogna fare invece carattere-'0', cpn il quale si ottiene il valore del numero. Questa operazione va fatta, però, controllando che esso sia un numero, ovvero che quel codice corrisponda ad una cifra. A tale scopo esiste la funzione isDigit (codice da verificare) che da 0 se non é un numero e 1 se lo é.
La funzione Serial.write , invece, scrive sulla seriale il byte che ha per VALORE il numero, che dal computer, ignaro, viene convertito nel suo codice ASCII. Comunque essa non é una funzione inutile, che può semplificare molto le comunicazioni tra macchine.
So che la domanda era più specifica, ma preferivo dire tutto quello che so. Che altro c'é?

avete ragione ci sono degli errori:

String testo;
String t;
void loop(){
   int    value=analogRead(A0);
   t=String(value,DEC); 
   testo.concat(t);
   testo.concat(" ");
   char t1[testo.length()];
   testo.toCharArray(t1,testo.length());
   Serial.print(t1);       //testo stampato correttamente
   Serial.print(testo);   //testo stampato in maniera errata
/**
*Altro codice in cui, quando si verifica la condizione, invio un sms con testo 't1' e dopo resetto testo=String("");*/

}

In definitiva se uso una variabile T_string Serial.print interpreta i numeri come codice ASCII se invece uso una variabile T_char Serial.print stampa i numeri come correttamente come testo.

Per stampare i numeri cone codici ASCII puoi anche usare tutti i tipi di variabile numerica. La print li riconosce come numero. É solo il tipo char che è riconosciuto come codice ASCII di qualcosa (anche il nome dovrebbe riebocarlo, char é carattere)

Forse conviene che usi solo stringhe classiche del c (array di char).
Prova a vedere queste 2 funzioni
itoa
strcat
Dovrebbero essere supportate entrambe.

Vedo che hai risolto in modo alternativo, comunque nel primo codice commetti errore nell'uso di strcat il quale prende due puntatori (il compilatore dovrebbe anche avvertirti dell'errore), mentre come primo argomento usi 'testo' il cui tipi è char (un carattere).

Vedi qui per il reference C: C reference

Devi dichiarare testo come array di caratteri di dimensioni tali da ospitare la concatenazione.

char testo[20];  // 19 caratteri + 1 carattere terminatore di stringa (0x00)

Ciao.

fratt>>Non posso usare solo Stringhe, perché la successiva funzione di libreria per invio dei messaggi richiede due argomenti di T_char, (non è presente nel codice postato) altrimenti mi da l'errore, in compilazione.

Maurotec>>vi prego d'ignorare il primo codice postato, contiene troppi errori.

Io_me>> il problema è esattamente l'opposto con la T_char ottengo il testo voluto, con la T_string i numeri vengono interpretati come codice ASCII.