Go Down

Topic: [Risolto] Serial.print(?); (Read 735 times) previous topic - next topic

Iz2rpn

Sep 28, 2012, 04:15 pm Last Edit: Sep 28, 2012, 06:03 pm by Iz2rpn Reason: 1
Ciao a tutti ho un problema, dovrei inviare una stringa via seriale, ci sono riuscito ma devo fare una cosa particolare ora, devo comporre una stringa mista parole e mista numeri, la seconda vorrei che sia una variabile decisa da me, e fattibile?

grazie


tuxduino

Tipo:

Code: [Select]

int valore = analogRead(0);
Serial.print("valore=");
Serial.println(valore);


?

Iz2rpn

in questo modo non mi prende la variabile, spiego meglio il formato della stringa deve essere questo:

Quote
FA00007100000;


quindi il primo FA e fisso il resto numerico ma poi trasformato in stringa di testo, ma che deve essere una variabile, decisa da me.

PaoloP

Sinceramente... non ho capito la domanda.  :smiley-roll-sweat: :|

tuxduino

Il numero "trasformato in stringa" deve avere sempre la stessa lunghezza ? In tal caso vanno aggiunti manualmente degli zeri di "padding".

E comunque mi pare che - a parte la questione della lunghezza complessiva - il mio esempio sia quello che ti serve.

Iz2rpn

allora io devo inviare tramite usb FA00007100000; e fin qui ci sono se la scrivo:

Quote
serial.print("FA00007100000;")


il programma che mi legge la porta usb risponde e fa quello che deve fare, ma io devo cambiare il valore 00007100000 con un variabile e non so come manipolare una stringa e poi riunirla :)

@tuxduino: ho provato ma non funziona

PaoloP

Hai provato a vedere qui e dintorni? --> http://arduino.cc/en/Tutorial/StringConstructors

tuxduino


@tuxduino: ho provato ma non funziona


Che cosa hai provato ? Cosa vuol dire "non funziona" ? Posta codice, risultato atteso e ottenuto. Qualsiasi informazione aggiuntiva può essere utile ad aiutarti. Per ora siamo abbastanza sul vago...

Iz2rpn

eccomi qui dopo aver tirato qualche testata al monitor

Quote
int c = 7100000;

void setup() {
  // Open serial communications and wait for port to open:
  Serial.begin(9600);
   Serial.print("FA00007100000;");
  }
 

 


void loop() {


  // converting a constant string into a String object:
  String stringTwo =  String("FA0000"); 
  String stringTree = String(c);
  // concatenating two strings:
  String stringOne =  String(stringTwo +  stringTree + ";");
  // prints "This is a string with more":
  Serial.println(stringOne);     

  // do nothing while true:
  while(true);

}


mi restituisce un valore finale strano non corrisponde a quello che voglio io ma cmq ora il codice funziona e il programma risponde

Iz2rpn

il processo è giusto ma sto sbagliando, non riesco a visualizzare la variabile "c" come stringa

PaoloP


int c = 7100000;


Ora ti tiro le orecchie!!  ]:D ]:D ]:D
Code: [Select]
int

Description
Integers are your primary datatype for number storage, and store a 2 byte value. This yields a range of -32,768 to 32,767 (minimum value of -2^15 and a maximum value of (2^15) - 1).


usa unsigned long  :smiley-mr-green:

Iz2rpn

e io me le faccio tirare ora funziona riesco a fare quello che voglio grazie ragazzi, cosi imparo a non leggere la descrizione delle variabili :P

tuxduino

Potresti usare Serial.print() multiple.

Cerca in rete sprintf().

Iz2rpn

@tuxduino: mmmh no sarebbe troppo un caos di codice in questo modo ho più flessibilità nel codice dove posso controllare solo un tipo di dato, questo dato che sto modificando deve cambiare la frequenza radio della mia radio scusate il gioco di parole e ora funziona perfettamente, il primo serial.print mi serve per settare la frequenza di partenza, ho messo quella perché ci sono affezionato :P

codice rivisitato:

Quote

unsigned long b = 8100000;


void setup() {
  // Open serial communications and wait for port to open:
  Serial.begin(9600);
   Serial.print("FA00007100000;");
  }
 

 


void loop() {


  // converting a constant string into a String object:
  String stringTwo =  String("FA0000");

  String stringTree = String(b);   
 
  // concatenating tree strings:
  String stringOne =  String(stringTwo +  stringTree + ";");
  // prints FA00008100000; for radio
  Serial.print(stringOne); 
delay(1000); 

while(true);

}

Go Up