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!