Usare 16 bit separati di una int

Ciao ,avrei bisogno di usare i bit di una int in modo singolo, cioè ogni bit ,che poi scrivero a 0 oppure 1 , avrà il suo significato, per esempio funzione 1 ...funzione 2...ecc.. poi via seriale invierò la int e farò l'operazione opposta con processing, dalla int ricavo i 16 bit che sarnno le 16 funzioni. Avete qualche idea? ciao grazie

Meglio che usi 2 byte separati. Per i byte ci sono le funzioni per settare, cancellare ecc dei singoli bit ed é piú semplice mandarli via seriale.

Ciao Uwe

Come dice @uwe, una int = 2 byte quindi spedisci quelli.
Poi… vuoi lavorare sui bit, lato Arduino (C) oppure lato Processing (Java) ?
Lato Arduino ci sono queste funzioni:
https://www.arduino.cc/en/Reference/BitRead
https://www.arduino.cc/en/Reference/BitWrite

se proprio vuoi implementare qualcosa di tuo usando i 16 bit dell’int puoi usare il resto della divisione per 2.
in pratica prendi il tuo int e guardi il resto della divisione per 2. il resto è 0 o 1 e ti da il valore del bit.
poi rifai la stessa operazione sul risutato della divisione e continui così.

esempio che forse si capisce meglio:
5 in binario è 101
5 div 2 = 2 col resto di 1 => il primo bit è a 1
2 div 2 = 1 col resto di 0 => il secondo bit è a 0
1 div 2 = 0 col resto di 1 => il terzo bit è a 1

Puoi anche usare un bit field: https://en.wikipedia.org/wiki/Bit_field

SukkoPera: Puoi anche usare un bit field: https://en.wikipedia.org/wiki/Bit_field

Che è il modo migliore per gestire i singoli bit e non pone limiti di dimensioni, vengono usati automaticamente tanti byte quanti servono, permette di utilizzare gruppi di più bit invece di uno solo, p.e. posso avere 3 flag da 1 bit, uno da 2 bit (4 stati diversi), uno da 3 bit (8 stati diversi), dentro un singolo byte.

metodo uno, si dice quale bit si voglia settare in base alla sua posizione, dove 0 è LSB e 15 il MSB

int value = 0;

#define BIT_SETUP 0
#define BIT_LOOP 1
#define BIT_FUNCTON1 2

void setup()
{
    //setto il bit a 1
    value |=1 << BIT_SETUP;

    //setto il bit a 0
    value &= ~(1 << BIT_SETUP);
}

void loop()
{
    //setto il bit a 1
    value |=1 << BIT_LOOP;

    value |=1 << BIT_FUNCTION1;
    function1();
    value &= ~(1 << BIT_LOOP);

    //setto il bit a 0
    value &= ~(1 << BIT_LOOP);
}

void function1()
{
;
}

metodo due, si usano i valori esadecimali per settare il bit.0x0001 LSB 0x8000MSB

int value = 0;

#define BIT_SETUP 0x0001
#define BIT_LOOP 0x0002
#define BIT_FUNCTON1 0x0004

void setup()
{
    //setto il bit a 1
    value |= BIT_SETUP;

    //setto il bit a 0
    value &= ~(BIT_SETUP);
}

void loop()
{
    //setto il bit a 1
    value |= BIT_LOOP;

    value |= BIT_FUNCTION1;
    function1();
    value &= ~(BIT_LOOP);

    //setto il bit a 0
    value &= ~(BIT_LOOP);
}

void function1()
{
;
}

per approfondire cerca in internet “C operazioni bitwise”

Ciao a tutti , ho visto che ci sono delle funzioni fatte , bitRead e bitWrite, comodissime fatte per trasformare byte, ma dato che processing non ha le stesse funzioni pronte all'uso , ho deciso di mandare-ricevere a processing delle int, e poi con il metodo dividi per due e contolla il resto (0,1) per trovare i bit dalla int, e quello a multipli di 2 , per trasformare i bit in int ho risolto il problema. Grazie ancora a tutti

"[Risolto]"