Problema Char

Ciao ragazzi,

sarà una banalità ma non riesco a venirne a capo.

Se scrivo questo codice ottengo il risultato voluto di transmittedChars “23456”:

   char receivedChars[7]="123456";
   char transmittedChars [6];
  
 
void setup()
{
   Serial.begin(9600);
}

void loop()
{
  
   char sensore [2] = {receivedChars[0],'\0'}; //Il valore del primo carattere mi dice quale sensore trasmette

   char valore[6]={receivedChars[1],receivedChars[2],receivedChars[3],receivedChars[4],receivedChars[5],'\0'};
   
   Serial.print("receivedChars: ");
   Serial.println(receivedChars);
  
   Serial.print("sensore: ");
   Serial.println(sensore);
  
   char transmittedChars [6]= {receivedChars[1],receivedChars[2],receivedChars[3],receivedChars[4],receivedChars[5],'\0'};

   Serial.print("transmittedChars: ");
   Serial.println(transmittedChars);


   Serial.println("_____________");
   
   delay(1000);
}

Io però avrei bisogno di stampare la char transmittedChars solo se il primo carattere è 1.
Provo così, ma non funziona!!!

   char receivedChars[7]="123456";
   char transmittedChars [6];
  
 
void setup()
{
   Serial.begin(9600);
}

void loop()
{
  
   char sensore [2] = {receivedChars[0],'\0'}; //Il valore del primo carattere mi dice quale sensore trasmette

   char valore[6]={receivedChars[1],receivedChars[2],receivedChars[3],receivedChars[4],receivedChars[5],'\0'};
   
   Serial.print("receivedChars: ");
   Serial.println(receivedChars);
  
   Serial.print("sensore: ");
   Serial.println(sensore);
  
   int a = atoi(sensore);
   if ( a == 1){   char transmittedChars [6]= {receivedChars[1],receivedChars[2],receivedChars[3],receivedChars[4],receivedChars[5],'\0'};}

   Serial.print("transmittedChars: ");
   Serial.println(transmittedChars);


   Serial.println("_____________");
   
   delay(1000);
}

Come mai?

Grazie tantissimo

ciao....perchè in entrambi i casi hai una stringa di char globale e locale con lo stesso nome...nel secondo caso quella locale la crei all'interno della if a==1 ma stampi fuori...

Grazie ORSO, ma non ho capito. Nel primo caso ricevo la stringa desiderata Nel secondo (che è quello che mi interessa) non ricevo nessun dato per "transmittedChars". In effetti è già creata dentro la if e stampata fuori!

Ti sta dicendo che hai due variabili con lo stesso nome, una globale ed una locale e la locale nasconde la globale !!!

Leva quel "char" davanti a "if ( a == 1){ char transmittedChars [6]= ..." così eviti di ridichiararla locale.

Guglielmo

Se levo il char ricevo errore:
cannot convert ‘’ to ‘char’

Zamundo:
Se levo il char ricevo errore:
cannot convert ‘’ to ‘char’

Ovvio, non essendo più la dichiarazione di una variabile, devi assegnare uno ad uno, elemento per elemento i singoli valori.

Ma non ti ricordi manco più come si lavora con gli array ? ? ? :o

Guglielmo

E' che se per un po' non ti "eserciti" con un argomento te lo scordi.

Ok adesso vado a ripassare... prima di ricevere uno shampoo "transalpino" !!!!

:D

Abbracci Guglielmo

Zamundo: Nel secondo (che è quello che mi interessa) non ricevo nessun dato per "transmittedChars".

A parte quanto già segnalato , mi chiedevo alcune cose nel tuo codice:

   char sensore [2] = {receivedChars[0],'\0'}; //Il valore del primo carattere mi dice quale sensore trasmette
...
   Serial.print("sensore: ");
   Serial.println(sensore);
  
   int a = atoi(sensore);
   if ( a == 1){
    ...

Perché definire una stringa ("sensore") di un solo carattere, più terminatore, poi fare "atoi()" per convertirlo in intero e quindi confrontare con 1? Fai molto prima così, senza variabile in più e senza atoi():

...
   Serial.print("sensore: ");
   Serial.println(receivedChars[0]);
  
   if ( receivedChars[0] == '1'){
    ...

oppure se vuoi proprio metterlo esplicito:

...
   char sensore = receivedChars[0];
   Serial.print("sensore: ");
   Serial.println(sensore);
  
   if ( sensore == '1'){
    ...

Inoltre per l'assegnazione tu vuoi copiare solo dal secondo carattere in poi, quindi ti basta lo strcpy per copiare tutti i caratteri. Ovvero invece di (che è comunque sbagliato):

transmittedChars[6]= {receivedChars[1],receivedChars[2],receivedChars[3],receivedChars[4],receivedChars[5],'\0'};}

basta fare:

strcpy(transmittedChars, receivedChars+1);

ma in realtà credo che ti basterebbe addirittura fare questo:

transmittedChars = receivedChars+1;

ossia impostare il puntatore "transmittedChars" al secondo carattere di "receivedChars". Per cui il codice diventa:

...
   Serial.print("receivedChars: ");
   Serial.println(receivedChars);
  
   char sensore = receivedChars[0];
   Serial.print("sensore: ");
   Serial.println(sensore);
  
   if ( sensore == '1'){
     transmittedChars = receivedChars+1;
     Serial.print("transmittedChars: ");
     Serial.println(transmittedChars);
     Serial.println("_____________");
   }   
   delay(1000);