Go Down

Topic: da string a byte? (Read 323 times) previous topic - next topic

rubino25

Salve a tutti.. E' da parecchio che non vengo sul sito e non programmo! Da un pò mi sono rimesso a farlo ma sono bloccato in un punto assurdo..
Dalla seriale ricevo 6 caratteri e 6 numeri, li metto in una variabile string e poi li uso a piacimento. Il problema nasce dal fatto che devo separare in numeri dai caratteri e passarli alle 2 uscite pwm. Sò che di solito si usano gli array, ma proprio non ci salto fuori.. Qualche aiuto?
L'estensione fisica dello stato mentale!

lucadentella

ciao

postaci un esempio della stringa che ricevi così ti sappiamo indirizzare.. vi sono varie funzioni per separare una variabile stringa, oppure a volte conviene salvare tutto in un buffer di char e poi entrare nella singola "posizione".
lucadentella.it

rubino25

La stringa è la seguente: cu1xxxcu2xxx. Dove xxx è la parte numerica che devo estrarre. Ho provato anche con un array, ma non sò come estrarre le due variabili..   :smiley-roll-sweat:
L'estensione fisica dello stato mentale!

lucadentella

Usa il metodo Substring per estrarre la parte della stringa che ti interessa e la funzione atoi per convertire la "sottostringa" in int
http://arduino.cc/en/Reference/StringSubstring
lucadentella.it

rubino25

Ho provato mille volta quel metodo, ma mi ritorna un errore..
Ti posto il codice:
Code: [Select]
void loop()
{
  if (Serial.available() > 0) { //Se sono presenti dati nel buffer
    while (Serial.available() > 0) { //finchè ci sono dati in seriale li legge e li aggiunge alla variabile
      valore_buffer[cont] = Serial.read(); //riempie il buffer con i dati in seriale
      cont ++;
      pausa(2);
    }
  }
    stringa_buffer = valore_buffer;
    for (int i = 0; i <10 ; i++) { //pulisco array
      valore_buffer[i] = 0;
    }
    cont = 0;
    if ((stringa_buffer.substring(0,1) == "s") && (stringa_buffer.substring(1,2) == "1")) { //se il comando è s indica lo stato della connessione
      Serial.println("#00Connected to Bloetooth.");
      digitalWrite(led_stato, HIGH);
      stato_connessione = 49;
    }
    else if ((stringa_buffer.substring(0,1) == "s") && (stringa_buffer.substring(1,2) == "0")) { //se lo stato è uguale a 0
      Serial.println("#00Disconnected from Bloetooth.");
      digitalWrite(led_stato, LOW);
      stato_connessione = 0;
      stop_motori();
    }
   
  if ((stato_connessione == 49) && (stringa_buffer.substring(0,1) == "c")) {
    if (stringa_buffer.substring(1,2) == "u") {
      motore = atoi(stringa_buffer.substring(2,3));


Ora come ora me ne dà altri, ma non me lo faceva fare.. Non è che devo usare una stringa di "appoggio" e poi convertirla?
tipo:
Code: [Select]
stringa_temp = stringa1.substring(2,3);
motore = atoi(stringa_temp);
L'estensione fisica dello stato mentale!

rubino25

Risolto!! Ho usato una variabile temp come appoggio e l'ho convertita in un array. Poi Ho convertito l'array in byte ed il giocoè fatto!!!
L'estensione fisica dello stato mentale!

Go Up