Me gustaría capturar el estado de algunos botones con un registro de desplazamiento ( CD4014B ). Intento solucionar problemas e identificar si el problema que tengo es el hardware o el software.
Al imprimir el byte en el monitor serie, puedo ver 11111111
cuando no se presiona ningún botón. El resultado esperado.
El problema que tengo es que no importa el botón que presione, todos los bits permanecen 1 ... Excepto el botón 'D' . Cuando se presiona 'D', todos los bits son 0.
Aquí está mi esquema:
(Nota al margen: actualmente no tengo botones pulsadores instalados. Estoy simulando que se presiona un botón conectando el cabezal del pin al suelo)
int dataPin = 8;
int clockPin = 9;
int latchPin = 10;
void setup() {
Serial.begin(9600);
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, INPUT);
digitalWrite(latchPin, LOW);
digitalWrite(clockPin, LOW);
}
byte shift() {
byte data, i;
/* first clock pulse gets parallel load */
digitalWrite(latchPin, HIGH);
data=0;
for(i=0;i<8;i++)
{
/* clock low-high-low */
digitalWrite(clockPin, HIGH);
digitalWrite(clockPin, LOW);
/* if this is the first bit, then we're done with the parallel load */
if (i==0) digitalWrite(latchPin, LOW);
/* shift the new bit in */
int temp = digitalRead(dataPin);
if(temp) {
data = data | (1 << i);
}
}
return(data);
}
void loop() {
byte buttons = shift();
Serial.println(buttons, BIN);
delay(10);
}
¿Mi cableado esquemático es correcto y mi código está libre de errores? Y en cualquier caso, ¿por qué no obtengo los resultados deseados?