Pages: 1 [2]   Go Down
Author Topic: [Risolto] Xbee:inviare 2 o più valori contemporaneamente  (Read 987 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Jr. Member
**
Karma: 0
Posts: 70
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

le y potrebbero rappresentare un disturbo secondo te? li c'è da vedere chi invia i dati...
Logged

Capo d'Orlando
Offline Offline
God Member
*****
Karma: 2
Posts: 725
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

le y potrebbero rappresentare un disturbo secondo te? li c'è da vedere chi invia i dati...

Non un disturbo ma l'equivalente di "niente". Infatti se attendo un tot prima di leggere il char successivo le y diminuiscono. Ma una c'è sempre, anche se il delay lo porto a 100!
La stringa la invio o tramite DOS o tramite XCTU e la storia è sempre la stessa.. non so più cosa fare, sono rimasto fermo!
Logged

Offline Offline
Jr. Member
**
Karma: 0
Posts: 70
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

metti un semplice while e se il read ritorna 'y' continua a leggere, del tipo

char c;
while((c = serial.read()) == 'y'){}
//alla fine del while in c avrai il carattere "valido"
Logged

Capo d'Orlando
Offline Offline
God Member
*****
Karma: 2
Posts: 725
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

metti un semplice while e se il read ritorna 'y' continua a leggere, del tipo

L'ho detto, ci ho provato smiley solo che non è un carattere normale quindi può essere che sul monitor me lo stampa come y strana mentre invece è qualcos'altro.
Infatti chiedo se qualcuno sa come individuare questo carattere "null", in modo da filtrare come mi hai proposto. Non è un metodo perfettamente pulito ma mi potrebbe bastare perora
Logged

Offline Offline
Jr. Member
**
Karma: 0
Posts: 70
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

leggilo come valore esadecimale e vedi cosa esce
Logged

Capo d'Orlando
Offline Offline
God Member
*****
Karma: 2
Posts: 725
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hola!
Oggi mi sono messo con calma e con mia grande sorpresa sono riuscito a fare ciò che volevo smiley

data una stringa nome1val1nome2val2..nomenvaln; prendere i valori ed assegnarli ad una variabile:

Code:
#include <NewSoftSerial.h>
NewSoftSerial my(3,2);

char val;
String string="";
String a="";
String b="";
String c="";
int a_int,b_int,c_int;

void setup(){
  Serial.begin(9600);
  my.begin(9600);
}

void loop(){
 
 
 
  if(my.available()>0)
  {
    a=b=c=string="";
   
    val=my.read();
   
    while(val!=';'){
     if(my.available()>0)
     {
       string+=val;
       val=my.read();     
     }
    }
   
    Serial.println(string);
     
    for(int i=0;i<string.length();i++){
      if(string.substring(i,i+1).equals("a"))
      {
        i++;
        while(!string.substring(i,i+1).equals("b")){
          a+=string.substring(i,i+1);
          i++;
        }
      }
      if(string.substring(i,i+1).equals("b"))
      {
        i++;
        while(!string.substring(i,i+1).equals("c")){
          b+=string.substring(i,i+1);
          i++;
        }
      }
      if(string.substring(i,i+1).equals("c"))
      {
        i++;
        while(!string.substring(i,i+1).equals("")){
          c+=string.substring(i,i+1);
          i++;
        }
      }
    }
    a_int=stoi(a);
    b_int=stoi(b);
    c_int=stoi(c);
    Serial.print(a_int);
    Serial.print("--");
    Serial.print(b_int);
    Serial.print("--");
    Serial.println(c_int);
   
   
   
  }
 
 

 
}


int stoi(String s){
  byte sLen = s.length();
  int retNum = 0;
  for(byte k=0; k < sLen; k++){
    retNum += ((byte)s.charAt(k)-48) * pow(10, sLen-k-1);
  }
  return retNum;
}

So che magari mi sono complicato un po' la vita ma almeno quello che esce è pulito e non ci sono problemi di tempismo!

L'unico problema è che quella funzione lì che mi trasforma una stringa in un int mi torna dei valori decrementati di 1 ogni tanto.. l'avevo presa sul forum, non ricordo da chi!

A tal proposito vorrei chiedervi una funzione che compie lo stesso lavoro ma magari più immediata smiley




EDIT: Niente, apposto. Bastava solo cercare bene  smiley-sweat
Code:
int stoi(String text)
{
  char temp[20];
  text.toCharArray(temp, 19);
  int x = atoi(temp);
  if (x == 0 && text != "0")
  {
    x = -1;
  }
  return x;





« Last Edit: May 04, 2012, 04:27:55 pm by sciorty » Logged

Pages: 1 [2]   Go Up
Jump to: