Go Down

Topic: Celle di carico con HX711 (Read 2416 times) previous topic - next topic

Silente

Se ho capito bene, e la stringa (oggetto String, che non conosco bene) di 24 elementi contiene esclusivamente 0 e 1 si potrebbe fare un lavoro tipo
Code: [Select]

long StringdiBooltoLong ()
{
long numero=0;
for (byte i=0;i<24;i++)
{
numero=numero*2+stringa [i];//so che non è così che si fa con le String, ma non so come si legga l'iesimo punto
}
return (numero);
}

Perdonate la non indentazione e gli errori, ma lo ho scritto al volo. Certamente esiste un modo più diretto operando direttamente con i bit.

Comunque credo che il problema non sia questo (troppo facie se no), e quindi non ho capito qualcosa.
Sappi solo che se stai parlando di una stringa di 24 char che codificano cifre non esiste un tipo dati abbastanza grosso.
Dove va un numero va una variabile, una funzione e/o  un test.
Per ottenere devi spiegare

Strumenti/Formattazione automatica fino alla morte!
Cristianesimo:bibbia='C':K&R

Patrick_M

#16
Apr 30, 2018, 11:42 pm Last Edit: Apr 30, 2018, 11:45 pm by Patrick_M
String
toInt()
Description

Converts a valid String to an integer. The input string should start with an integer number. If the string contains non-integer numbers, the function will stop performing the conversion.

però in questo modo devi spezzarla in più parti

oppure prima la converti in char array
string.toCharArray(buf, len)
e poi uno ad uno li leggi

 
per inserire (lo sketch) il programma, dall'IDE clicca modifica, clicca copia per il forum poi vieni qui e incolla nel tuo post (ctrl+v) ;)

steve-cr

#17
May 03, 2018, 12:33 am Last Edit: May 03, 2018, 12:37 am by steve-cr
Patrick, forse non hai capito bene che la stringa è di ZERO e UNO, quindi binario.
E mi serve la conversione in numero DECIMALE.

String to Int la riporta a numerico, ma sempre binario è !

Silente, ho capito cosa intendi, ma non è così semplice...
Samantha Cristoforetti: "Mi fai fare un giro sul tuo ultraleggero?". "Certamente, però piloto io !"

steve-cr

#18
May 03, 2018, 12:39 am Last Edit: May 03, 2018, 12:58 am by steve-cr
Ho trovato questo:

Code: [Select]
int binary2decimal(byte b)
{

 int dec = 0;
 int power = 1;
 byte mask;
 int weight;
 
 for (mask = 0x01; mask; mask <<= 1)
 {
   if (b & mask)
   {
     weight = 1;    
   }
   else
   {
     weight = 0;    
   }
  
   dec = dec + (power * weight);  
   power = power * 2;
  
}
 
 return dec;
}




..... ma non ho la più pallida idea di come usarlo... !!!!!!

Samantha Cristoforetti: "Mi fai fare un giro sul tuo ultraleggero?". "Certamente, però piloto io !"

gpb01

#19
May 03, 2018, 07:13 am Last Edit: May 03, 2018, 07:18 am by gpb01
La strada più semplice era quella di Silente ... solo che occorre semplificare e velocizzare ... :)

Code: [Select]
String sNum = "101010101010101010101010"; // la tua stringa a 24 caratteri

void setup() {
   byte i = 0;
   unsigned long Num = 0;
   //
   Serial.begin(115200);
   //
   for (i = 0; i < 24; i++) {
      if (sNum.charAt(i) == '1') {
         Num |= (1ul << (23-i));
      }
   }
   Serial.print("La stringa binaria  ");
   Serial.print(sNum);
   Serial.print(" corrisponde a ");
   Serial.println(Num);
}

void loop() {
   // put your main code here, to run repeatedly:

}

... attenzione che il 'ul' dopo il numero 1 (ovvero 1ul) è obbligatorio per indicare che stiamo lavorando con gli unsigned long ... altrimenti 1 lo prende come un intero a 16 bit e ... difficilmente può farne lo shift a 24 bit ;)

Guglielmo
Search is Your friend ... or I am Your enemy !

Silente

Patrick, forse non hai capito bene che la stringa è di ZERO e UNO, quindi binario.
E mi serve la conversione in numero DECIMALE.

String to Int la riporta a numerico, ma sempre binario è !

Silente, ho capito cosa intendi, ma non è così semplice...
Vuoi dirmi (non lo so) che con molti che amano gli oggetti String non esiste un modo per ottenerne e modificarne un elemento?
Batti le mani, schiocca le dita,
Meglio gli array tutta la vita
Dove va un numero va una variabile, una funzione e/o  un test.
Per ottenere devi spiegare

Strumenti/Formattazione automatica fino alla morte!
Cristianesimo:bibbia='C':K&R

gpb01

#21
May 03, 2018, 07:57 am Last Edit: May 03, 2018, 08:11 am by gpb01
Vuoi dirmi (non lo so) che con molti che amano gli oggetti String non esiste un modo per ottenerne e modificarne un elemento?
Ma prima di scrivere certe affermazioni ... lo hai letto almeno il codice che ho messo ? ? ? :o :o :o

Guglielmo

P.S.: Che poi su Arduino la classe String sia da evitare siamo d'accordo, ma che non esistano i metodi per manipolarla ... è una sciocchezza !
Search is Your friend ... or I am Your enemy !

Patrick_M

ma scusate, forse non ci arrivo io, anzi senz'altro

unsigned long numero= b101100101001100011101010

Serial.print(numero,DEC )
non mi stampa come risultato 11.704.554?
per inserire (lo sketch) il programma, dall'IDE clicca modifica, clicca copia per il forum poi vieni qui e incolla nel tuo post (ctrl+v) ;)

gpb01

#23
May 03, 2018, 09:47 am Last Edit: May 03, 2018, 09:47 am by gpb01
ma scusate, forse non ci arrivo io, anzi senz'altro
... credo NON ti sia chiaro che lui ha una String NON un numero ... una String di 24 caratteri ASCII 0x30 e 0x31 (ovvero il carattere 0 ed il carattere 1) e vuole trasformare la String che rappresenta in ASCII 24 bit in un numero ;)

Guglielmo
Search is Your friend ... or I am Your enemy !

Patrick_M

#24
May 03, 2018, 10:11 am Last Edit: May 03, 2018, 10:12 am by Patrick_M
e con toint non la converte in numero?
al limite spezzandola e poi facendo gli opportuni shift
per inserire (lo sketch) il programma, dall'IDE clicca modifica, clicca copia per il forum poi vieni qui e incolla nel tuo post (ctrl+v) ;)

Standardoil

Credo di si
e con toint non la converte in numero?
al limite spezzandola e poi facendo gli opportuni shift

si la convertirebbe, ma temo interpretandola come numero scritto in decimale, con 10 che vale dieci, non due
Prima legge di Nelson (che sono io): Se vuoi il mio aiuto dimostrami almeno che hai letto il nostro "aiutateCi ad aiutarVi"

Non bado a studenti, che copino altrove

Tu hai problema-Io ti domando-Tu non mi rispondi: vuol dire che non ti serve più

Patrick_M

si si ho provato e me ne sono reso conto  chiedo scusa :)
per inserire (lo sketch) il programma, dall'IDE clicca modifica, clicca copia per il forum poi vieni qui e incolla nel tuo post (ctrl+v) ;)

steve-cr

Grazie Guglielmo, funziona.

Silente aveva visto giusto ma, appunto, non era così facile la conversione.

Ho provato anche quella di Patrick ma gia sapevo che la stringa di ingresso la vede già come un numero decimale e non binario. Infatti l'output salta da negativo a positivo ogni x letture ...
Samantha Cristoforetti: "Mi fai fare un giro sul tuo ultraleggero?". "Certamente, però piloto io !"

steve-cr

Guglielmo, mi puoi spiegare in pratica le istruzioni? Ammetto che lul e CharAt mi sono ostiche...
Samantha Cristoforetti: "Mi fai fare un giro sul tuo ultraleggero?". "Certamente, però piloto io !"

gpb01

Grazie Guglielmo, funziona.
:) ... in ogni caso, se invece della classe String, riesci ad utilizzare un semplice array di char (ovvero una stringa classica del 'C'), eviti problemi e si velocizza il tutto ;)

Guglielmo
Search is Your friend ... or I am Your enemy !

Go Up