Insegnare Arduino all'ITIS

lesto:
Altro esempio, i PIN digitali in realtà si leggono(e scrivono) in gruppi da 8, poichè i registri atmega328 sono ad 8 bit, se non erro i loro nomi sono portb portc e portd

Funziona così: i pin sono raggruppati in gruppi di 8, che si chiamano porte. Ogni porta ha 3 registri, PINx, PORTx e DDRx (dove x sta per la porta, ad esempio per la porta B i registri saranno PINB, PORTB, DDRB).
Ognuno è composto da 8 bit, i quali corrispondono agli 8 pin della porta.
I bit di DDRx dicono al controllore se i relativi pin devono essere di input o output (0 input, 1 output).
Dentro PINx trovi il valore logico reale dei pin, quindi se sono in input puoi leggere lo stato dell'ingresso. Anche i pin di output possono essere letti e può essere utile per vedere se ci sono problemi in quanto se dico che il pin deve essere HIGH ma lo leggo LOW è probabile che ci sia un cortocircuito verso massa.
PORTx fa due cose diverse a seconda che il pin sia impostato (attraverso DDRx) in input o output. Se è output dentro PORTx imponi lo stato logico dell'uscita, se è come input serve per attivare o disattivare i pull-up.

Piccolo suggerimento: se devi impostare ad 1 il bit 5 di PORTB puoi fare così:

PORTB |= (1<<PB5)

Tutti i bit di tutti i registri sono referenziati a quel modo, esattamente come li trovi sul datasheet.

Spero di essermi spiegato bene, non è semplice riepilogare il tutto in 10 righe... :sweat_smile:

@arbuschi
Di chicche non saprei cosa dirti a parte i datasheet e, se ti serve utilizzare l'assembler, l'istruction set. A noi le cose le spiegava il prof e poi per approfondimenti andavamo sul datasheet. Comunque se ti serve una mano per fare qualcosa non esitare a chiedere, se posso ti aiuto (magari se vedi che sul forum non rispondo mandami un pm con il link alla discussione).
Occhio ad utilizzare il watchdog con gli arduino perché c'è anche il rischio che lo bricchi. Il mega, per esempio, ha il bootloader buggato in quanto, se riceve un reset dal watchdog, poi entra in un loop di reset e non ne esce più. Per fare le prove ti consiglio di utilizzare il massimo tempo che ti mette a disposizione il tuo microcontrollore così, anche se c'è qualche problema, hai più tempo per cercare di resettarlo. Se imposti 100ms e per un problema qualunque nel codice già all'inizio entra il watchdog poi non hai modo di sbloccarlo se non con un programmatore in quanto poi non risponde più.