problema shift in con 74hc165 shift out con 74hc595

salve a tutti
volevo esporvi un problema a cui non riesco a venire a capo!
il mio intento, come da oggetto, è quello di leggere lo stato di 8 tasti con l'ausilio del 74hc165 e di verificare il loro stato con l'74hc595
vi allego il codice:

// test shift register in input 74hc165 e test shift register in out
//  scansiona 8 tasti dal 165, e riproduce il loro stato su 8 led collegati al 595
int dout=4;//data out pin 14 del 595 
int clo=2;// clock pin 11 del 595
int lo=3;// latch pin 12 del 595

int din=8;//data in pin 9 del 165
int cin=2;//clock pin 2 del 165
int lin=3;//latch pin 1 del 165
  
void setup()
{ //pin 595
  pinMode(clo,OUTPUT);  
  pinMode(dout,OUTPUT);
  pinMode(lo,OUTPUT);
  //pin 165
  pinMode(cin,OUTPUT);
  pinMode(din,INPUT);
  pinMode(lin,OUTPUT);
}
int READ(int dat,int cl)  //funzione di lettura shift register
{ int val;
   val= digitalRead(dat);  //lettura dato
  digitalWrite(cl,LOW);
  digitalWrite(cl,HIGH);  //clock
  digitalWrite(cl,LOW);
  return val;             //ritorna il valore letto
}


void Stampabasso(int dat,int cl) //stampa bit basso
{ digitalWrite(dat,LOW);
  digitalWrite(cl,LOW);
  digitalWrite(cl,HIGH);
  digitalWrite(cl,LOW);
}

void Stampaalto(int dat,int cl)  //stampa pin alto
{ digitalWrite(dat,HIGH);
  digitalWrite(cl,LOW);
  digitalWrite(cl,HIGH);
  digitalWrite(cl,LOW);
}


void loop()
{
  int i=0;
  int arr[8]={0,0,0,0,0,0,0,0}; //array lettura, azzerato
  digitalWrite(lin,HIGH);
  delay(150);
  digitalWrite(lin,LOW);  //faccio entrare gli ingressi nel 165
  digitalWrite(lin,HIGH);
  
  for(i=0;i<8;i++)
  {
    arr[i]=READ(din,cin);  //inserisce nell'array il valore del dato letto
  }
 
 
  
  // scrittura
  digitalWrite(lo,LOW);
  digitalWrite(lo,HIGH);
  digitalWrite(lo,LOW);
  delay(20);

{for(i=0;i<8;i++)
 {if(arr[i]==1)
   {Stampaalto(dout,clo);}
  else
   {Stampabasso(dout,clo);}
 }

  }
  delay(150);
 
}

Nella parte di scrittura del 595 non ho problemi, ho provato separatamente le funzioni, e pare girare bene.

non riesco a far girare la parte dello shift in, ovvero anche se cambio lo stato dei tasti i led rimangono sempre e tutti accesi.
cosa sbaglio!???
grazie!

il mio intento, come da oggetto, è quello di leggere lo stato di 8 tasti con l'ausilio del 74hc165 e di verificare il loro stato con l'74hc595

scusa, per meglio capire, che differenza intendi tra "leggere" e "verificare" lo stato di 8 tasti?

int dout=4;//data out pin 14 del 595
int clo=2;// clock pin 11 del 595
int lo=3;// latch pin 12 del 595

int din=8;//data in pin 9 del 165
int cin=2;//clock pin 2 del 165
int lin=3;//latch pin 1 del 165

grazie pelletta! ho risolto!
mi era proprio sfuggito
buona serata!

La distrazione fa passare brutte serate a volte :wink:

:astonished:
L'importante è che la questione sia risolta, ma togliere qualche dubbio non sarebbe male. Poiché damosound ha deciso di ignorare bellamente la mia domanda (ma è un suo sacrosanto diritto), vorrei sapere almeno da BUD in che consiste il suo intervento.
Io leggo il codice postato all'inizio e le righe suggerite da te ed a me sembrano ASSOLUTAMENTE identiche, a pèarte le dimensioni ed il colore che tu hai dato a quei 2 e 3, e non credo che sia questa la soluzione.
Quindi, se non scoccia pure a te, mi spieghi perché un suggerimento identico al post originale dovrebbe risolvere un problema?

Mike, ti do un bel 3!

Ha assegnato gli stessi pin di arduino a entrambi gli shift register, ecco perchè ho evidenziato i numeri.

Come punizione mezz'ora in ginocchio sui ceci :stuck_out_tongue_closed_eyes:

:wink:

eh no caro, non ci sto! intanto credo che lui abbia sbagliato a porre la domanda, usando due verbi con lo stesso significato riferiti a due integrati con funzionamento "opposto", senza possibilità di vedere uno schema elettrico, figuriamoci se mi mettevo ad analizzare il programma, visto che la programmazione non è proprio quel che si dice il "mio forte" :D, quindi mi sono limitato a leggere il tuo suggerimento e confrontarlo con il suo firmware. Di solito si suggerisce la soluzione corretta o si fa presente l'errore; tu ti sei affidato al silenzio stampa ed allo spirito di deduzione di chi ha commesso l'errore; io una caxxata del genere, scarso come sono, non l'avrei fatta mai, semplicemente eprché non metto mai mano ad un firmware se prima non disegno uno schema elettrico e realizzo l'hardware :wink:
Quindi il 3 non lo merito e non lo voglio, i ceci sì, domani finiscono in pentola con 150g di ditalini, grazie del pensiero e a buon rendere 8)

Ecco, lo sapevo che si arrabbiava XD

Nemmeno io ho visto tutto il firmware, ho notato subito quell'errore di distrazione e l'ho evidenziato.
Non credo sia necessario lo schema elettrico quando vengono inizializzati gli stessi pin di arduino a più integrati che per altro svolgono funzioni differenti.
Poi magari il problema era altrove, intanto quella cosa era da sistemare.
Come giustamente hai detto, non avendo visto lo schema elettrico non potevo suggerire una modifica al firmware quindi mi sono limitato a segnalare l'errore.