come dare il valore a una variabile byte prendendo come bit gli ingressi?

esiste una funzione su arduino che mi permette di dare il valore ad una variabile, per esempio byte, prendendo come bit gli ingressi dell'arduino?
per esempio:
INPUT 1 == bit7
INPUT 2 == bit6
INPUT 3 == bit5
INPUT 4 == bit4
INPUT 5 == bit3
INPUT 6 == bit2
INPUT 7 == bit1
INPUT 8 == bit0

INPUT 1 == 0
INPUT 2 == 1
INPUT 3 == 1
INPUT 4 == 0
INPUT 5 == 0
INPUT 6 == 0
INPUT 7 == 1
INPUT 8 == 0
--> value==98

esiste una funzione che mi fa questo calcolo? o devo farmi un programmino che me lo calcola? scusate ma sono un po' nuovo del linguaggio di arduino :blush:

byte a=PORTB;

ed assegni tutti i bit della porta B, che comprende i pin dall'8 al 13.
Puoi fare lo stesso con PORTC e PORTD.

ok ma questo ma vale anche per i mega2560? basta che mi guardo che pin che comprendono le varie porte no?
e se anzi che occupare tutti gli 8 bit ne occupo solo 5 gli altri li devo mettere a massa o comunque lasciare inutiliazzati... questo non mi piace molto...
comunque è fattibile grazie :slight_smile:

er_like_no_other:
e se anzi che occupare tutti gli 8 bit ne occupo solo 5 gli altri li devo mettere a massa o comunque lasciare inutiliazzati... questo non mi piace molto...

Leggi tutta la porta e poi applichi una maschera AND o OR a seconda se vuoi tenere fissi a 1 o 0 i bit che non ti interessano e che puoi usare per altri scopi sia come IN che come OUT.

non ho capito bene cosa intendi tu.. ma ho una mezza idea di come potrei fare, è che devo comunque intervenire via software, ma non è neanche un gran problema alla fine...
per il mega2560 uso lo stesso principio no?

supponiamo che hai salvato nella variabile n tutti i bit di una porta dell'atmega, e a te interessa salvare i primi 4 della porta in un'altra variabile x:

se te fai

x=n & 0x11110000

adesso in x trovi nelle prime quattro posizioni i bit salvati e nelle altre 4 trovi 0..
così ti va bene?

si grazie :slight_smile:

Appunto... stavo scrivendo la stessa cosa :smiley:

ok ok ho capito :wink:
grazie a tutti! :slight_smile:

se te fai

x=n & 0x11110000

adesso in x trovi nelle prime quattro posizioni i bit salvati e nelle altre 4 trovi 0..

0x11110000 è un numero esadecimale e vale 286.326.784
Probabilmente intendevi 0b11110000 = 240 = 0xF0

Ciao

se io dovessi dare un valore a una porta tipo PORTD=B00001011, cioè la uso come output, ma mi bastano solo 4 pin della porta, gli altri posso usarli come input? o devo lasiarli inutilizzati? come funziona?

MGuruDC:

se te fai

x=n & 0x11110000

adesso in x trovi nelle prime quattro posizioni i bit salvati e nelle altre 4 trovi 0..

0x11110000 è un numero esadecimale e vale 286.326.784
Probabilmente intendevi 0b11110000 = 240 = 0xF0

Ciao

si si hai ragione=) piccola svista

@er_like_no_other
puoi usarli come input,
ti consiglio di leggerti questa pagina:

devi settare un altro registro per impostare la porta come input o come output

alexdb:
ti consiglio di leggerti questa pagina:
Arduino Reference - Arduino Reference

Era la pagina che avevo suggerito io... basterebbe leggerla... :sweat_smile:

eheh scusate... adesso la leggo tutta :wink:

non mi è chiara una cosa... ma io impostando la porta come input o output posso usare anche i pin analogici come pin digitali o no?
grazie a tutti :wink:

er_like_no_other:
non mi è chiara una cosa... ma io impostando la porta come input o output posso usare anche i pin analogici come pin digitali o no?
grazie a tutti :wink:

Sì.

questo è molto buono perchè mi permette di utilizzare anche i pin analogici che normalmente rimarrebbero inutilizzati :slight_smile:
grazie per l'aiuto!