ShiftIn dubbi segnale inviato da CD4021

Salve a tutti, torno ad importunare i gentili utenti del forum con una domanda sullo shiftIn tramite CD4021.
In particolare il mio quesito è molto semplice: partendo dalla base del circuito del tutorial (quindi 8 switch collegati ad altrettanti ingressi del CD4021 e data, clock e latch su Arduino), che output mi dovrei aspettare stampato sul monitor seriale in corrispondenza della pressione di uno switch?

In pratica mi devo aspettare una cosa del genere (ovviamente impostando la lettura come LSBFIRST):

switch su PI0 = 00000001
switch su PI1 = 00000010
switch su PI3 = 00000100
etc..
switch su PI8 = 10000000

oppure la "conversione in binario" del numero dello switch premuto, preceduto dal numero di zeri necessario per completare la serie di 8?

switch su PI0 = 00000001
switch su PI1 = 00000010
switch su PI3 = 00000011
switch su PI4 = 00000100
etc...
switch su PI8 = 00001000

oppure..altro?

Questo perchè ho un comportamento abbastanza anomalo sul mio circuito e vorrei capire se mi sfugge la logica dell'IC oppure se ho dei corti sulla bread o ancora dei pin ossidati o qualsiasi altro problema ignoto...

Posterei anche l'output del serial monitor ma temo sarebbe poco leggibile..eventualmente provo a strutturarlo in maniera più ordinata se serve.

La conversione in binario elimina gli zeri iniziali per cui 00010000 diventa 10000

leo72:
La conversione in binario elimina gli zeri iniziali per cui 00010000 diventa 10000

Ok, dal punto di vista "matematico" si, ma cmq lo shift register deve mandare via 8 segnali, giusto?

Non capisco quindi lo stesso quale sia l'output che mi devo aspettare sul serial monitor alla pressione di un determinato tasto.

L'output dipende da come stampi la variabile che ricevi tramite shiftIn.
I dati in un microcontrollore sono solo numeri e come tali il micro li tratta. E' poi l'utente che deve dargli il significato che vuole :wink:

Mi spiego, se tu premi il 6° pulsante, otterrai un valore pari a 0b00100000 che è identico a 32 che è uguale a 0x20.
Se lo stampi come decimale, otterrai 32, se lo stampi come binario vedrai scritto 100000 ecc..

Beh, si, io parlo di stampare la variabile in binario.

Quindi deduco che lo schema a cui fare riferimento sia il primo di quelli che ho postato:

switch su PI0 = 00000001
switch su PI1 = 00000010
switch su PI3 = 00000100
etc..
switch su PI8 = 10000000

Non mi spiego allora perché collegando un 74HC595 in uscita, memorizzando l'input in una variabile byte e poi inviandola all'output non mi accende il led corrispondente..

void loop() {

digitalWrite(latchInPin, 1);
byte input = shiftIn(dataInPIN, clockInPIN, LSBFIRST);
delay(20);
digitalWrite(latchInPin, 0);

digitalWrite(latchOutPIN, 1);
shiftOut(dataOutPIN, clockOutPIN, LSBFIRST, input);
delay(20);
digitalWrite(latchOutPIN, 0);

}

Questo è il codice, per cui mi aspetterei che alla pressione dello switch1 mi accendesse il Led1..invece no mi accende delle combinazioni di led alle quali non riesco bene a trovare una logica...qualche idea al riguardo?

Il led1 inoltre rimane sempre debolmente acceso...

La variabile non perde il dato per cui se ci memorizzi ad esempio 0b00000001, quando la rimandi al 595 ha sempre quel valore. Se non è così, significa che c'è qualcosa che non va sul circuito.