wire trasmettere long

ciao avrei la necessità di trasmettere un long e/o u float tramite i2c come posso fare?

Magari dico una cavolata ma… provare a mandare due int?
Se il numero che vuoi mandare è 548999 mandare 548 e 999?

si solo che non non so come trasformarlo.... gli int riesco ad inviarli ma i mlon non so coma scomporli....

La butto sempre li. Magari non è quello che intendevi…
I long arrivano fino a 2,147,483,647 (4 bytes) mentre gli int fino a 32,768 (2 byte value).
Allora un primo esempio potrebbe essere:

long numero=2147483647;
int num1=numero/100000000;
int num2=numero/10000-num1*10000;
int num3=numero-num2*10000;

A questo punto invii i tre int e dall’altra parte li riassembli.
In alternativa puoi usare l’operatore di shift (che forse è meglio) ma qui non sono molto ferrato.

Dal sito ho letto

int a = 5;        // binary: 0000000000000101
int b = a << 3;   // binary: 0000000000101000, or 40 in decimal
int c = b >> 3;   // binary: 0000000000000101, or back to 5 like we started with

A questo punto direi che puoi prendere il tuo long e shiftarlo…
La prima strada è quella che uso su un foglio di calcolo per dividere un numero grande.
La seconda strada è quella che cercherei di percorrere con Arduino :stuck_out_tongue:

grazie

stavo provando con gli shift ecco il codice provato, che però lo divide in un int e 2 byte

long val = 1234567891;
long result;
int mezzo;

void setup()
{
  Serial.begin(9600);           // start serial for output
}

void loop()
{
  result = 0;
  Serial.print(result);
  Serial.print("     ");
  Serial.println(val);
   mezzo = val >> 16;
  result += mezzo * 65536;
Serial.print(result);
  Serial.print("     ");
  Serial.println(val);
  mezzo = val >> 8;
  result += mezzo * 256;
Serial.print(result);
  Serial.print("     ");
  Serial.println(val);
  result += val & 0xff;
Serial.print(result);
  Serial.print("     ");
  Serial.println(val);
  
  
  
  delay(5000);
}

il massimo sarebbero 4 byte ora faccio altre prove

il codice non funziona bene.... se qualcuno ha idee sono ben'accette