serial display

ciao a tutti!
ho comprato un display seriale su ebay della funrobo, ma il codice di esempio che mi ha dato il venditore mi permette solo di inviare al display stringhe di caratteri, qualcuno ha idea di come potrei inviare valori variabili?
questo e' il codice:

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

void loop() {

    Serial.print("$CLEAR\r\n");
    Serial.print("$GO 1 1\r\n");
    Serial.print("$PRINT funrobo\r\n");
    Serial.print("$GO 2 1\r\n");
    Serial.print("$PRINT seriallcd\r\n");
    Serial.print("$CURSOR 0 0\r\n");
    delay(1000);
  
}

Non posso provarlo, ma dovrebbe essere ad esempio

Serial.print("$PRINT %s funrobo\r\n",miaStringa);

purtroppo niente mi dice invalid conversion from const char to long int...

io uso questa funzione per convertire da float to string...credo sia il caso tuo...in sostanza vuoi inviare un numero variabile magari di un sensore...

prima di void setup inserisci questa riga:
//Function converts float to char array to display on LCD
char * floatToString(char * outstr, float value, int places, int minwidth, bool rightjustify);

questa riga dopo il void loop(void):

char buff[5]; //buffer per funzione floatToString

per scrivere sul display dovrai fare:

Serial.print(floatToString(buff,temp,1,0,false));

prendi tutto con le pinze xo' a me funziona :slight_smile:
la variabile visualizzata e' temp, il valore dopo temp e' quanti numeri vuoi dopo la virgola, gli altri cosi' su 2 piedi non ricordo.
poi se qualcuno ha idee migliori o funzioni piu' snelle e veloci che ben venga, io sono allo stato primordiale in questo mondo.

// floatToString.h
//
// Tim Hirzel
// tim@growdown.com
// March 2008
// float to string
//

char * floatToString(char * outstr, float value, int places, int minwidth, bool rightjustify) {
// this is used to write a float value to string, outstr. oustr is also the return value.
int digit;
float tens = 0.1;
int tenscount = 0;
int i;
float tempfloat = value;
int c = 0;
int charcount = 1;
int extra = 0;
// make sure we round properly. this could use pow from <math.h>, but doesn't seem worth the import
// if this rounding step isn't here, the value 54.321 prints as 54.3209

// calculate rounding term d: 0.5/pow(10,places)
float d = 0.5;
if (value < 0)
d *= -1.0;
// divide by ten for each decimal place
for (i = 0; i < places; i++)
d/= 10.0;
// this small addition, combined with truncation will round our values properly
tempfloat += d;

// first get value tens to be the large power of ten less than value
if (value < 0)
tempfloat *= -1.0;
while ((tens * 10.0) <= tempfloat) {
tens *= 10.0;
tenscount += 1;
}

if (tenscount > 0)
charcount += tenscount;
else
charcount += 1;

if (value < 0)
charcount += 1;
charcount += 1 + places;

minwidth += 1; // both count the null final character
if (minwidth > charcount){
extra = minwidth - charcount;
charcount = minwidth;
}

if (extra > 0 and rightjustify) {
for (int i = 0; i< extra; i++) {
outstr[c++] = ' ';
}
}

// write out the negative if needed
if (value < 0)
outstr[c++] = '-';

if (tenscount == 0)
outstr[c++] = '0';

for (i=0; i< tenscount; i++) {
digit = (int) (tempfloat/tens);
itoa(digit, &outstr[c++], 10);
tempfloat = tempfloat - ((float)digit * tens);
tens /= 10.0;
}

// if no places after decimal, stop now and return
// otherwise, write the point and continue on
if (places > 0)
outstr[c++] = '.';

// now write out each decimal place by shifting digits one by one into the ones place and writing the truncated value
for (i = 0; i < places; i++) {
tempfloat *= 10.0;
digit = (int) tempfloat;
itoa(digit, &outstr[c++], 10);
// once written, subtract off that digit
tempfloat = tempfloat - (float) digit;
}
if (extra > 0 and not rightjustify) {
for (int i = 0; i< extra; i++) {
outstr[c++] = ' ';
}
}

outstr[c++] = '\0';
return outstr;
}

Mi sembra di aver capito che la funzione "Serial.print" non ha niente a che fare con la "printf" del C ANSI, quindi la stringa da inviare va costruita a parte.
Per convertire un float in una stringa è già a disposizione la funzione "dtostrf" delle librerie AVRGCC ;).
Ciao

scusatemi...ho girato un'ora in rete per scoprire come installare la libreria copiando questo file di testo ma non ho trovato niente...qualcuno sarebbe cosi' gentile??il progetto sulla moto e' quasi al termine...a breve un bel servizio con foto!grazie a tutti!